File: blk03410.txt
?;8850>:7icZA=91-9voe@<8qjaoi`JEB a[T<96946B>::57a\U=79E@>:62ZUN<94\WORLGGB@B=<51484. wfXSMMHC<84jd[YTND?= {{yuyvsng[tjZRONTNIHDA0-//++1/*.+& xfkib}sa_]ZwhQB?=EA;YL:?:62/551.! ubvnawm]zkSteOMJMqbLh\J0+8-*(-*&43 UlbTVROPNI^VD=;A96=52;/+56/3=7-%"+.+(,)(42%(% eMeYH^TGl]FUMBtaA]O:ND5 text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"]M ,["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+briM ckGap)*l,y:wallSize+(brickHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else M if(paddle.x+brickWidth>canvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)M ){bricks.splice(l,1);if(ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.M fillRect(paddle.x,paddle.y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 kQ775fsCzebm5srxzMxM18flT+tb6XTQAEEp0ABBiTjoyhNnnivHV6xd+sT0Tq8zHfInRkY6Vze2bdtWjvN4pWn7KNan66ABglKgAYIScdAojy0effuRcnzdvTct2bfpdXHHdFnJNz3lT1bMf4+m7aOggwYISoEGCEqBBghKgQYIykVCevb43evODs48Xm77v5NjmgxMMB00QFAKNEBQIg6gNZdf/bol2848cWIMMxnMpZdeWo5/sfrlY5uHDhogKAUaICgRB1355Zlq/PN/++rY5sHKs2bNmnFPoWf5FwQcf/KnY5uHDhogKAUaICgRR8t23HV3OT72x39Yu/1v168b6Zza9pK1S7flEQjQDh00QFAKNEBQIo6W3ZLFF7satq8U+cP2r/9a9RD+b7/5yJJ93/hwfw/pz7/jbVLl32kHvdBBAwSlg27ZwVOny/EtDx6u374Cu+k25F8dVIzz7jJfe7rSbdmypRzfcccdKaXp7aRftKb67/2lz/+8HEdZa1zMKcp8M cjpogKAUaICgRBwta4ovVnqs0XTBsO71YTp06FBKKaVvPN+5t7j4r/6sHP/5kceX2bM6bzfn7ua8x44d6zi/aZTHCJdcckk5HmekUMwpynxyOmiAoBRogKBEHEM0qSs3RhVndOuCG66s3f6zv/l89cPvvSmllNKlb9hcf5Is4uh07rrzwjDooAGCUqABghJxDNEkxRqR/fqrrirHP/3Lv67d52Pn/jxxov778d5/8GA5fj7bno9/7YPv7md60DcdNEBQCjRAUCKOlk3qyo3I/vtHP+x6340bN/b9PkWU8swjP+77HNALHTRAUAo0QFAijpY1xRqij/Fa/bvbU0opPf+NB5d9fbl9eolSoA06aICgdNAjomsenl91cdGuqSvu9vVu3wfapIMGCEqBBghKxDFELgy2b+vWrSmllO5seP1jDdvbcKcn1zFiOmiAoBRogKBEHEMk1mhf/r1xvcjXOXfStKKjeO9NmzaV2w4fPtzXfKAbOmiAoBRogKBEHCNiRUe7jh49M 2nGfbm7f7uW4bt4T2qSDBghKgQYISsTRsqYoQ6wxer3EGm0cB23TQQMEpYNumU55vO64445yfOONN5bjp59+etnj8vXVLgYShQ4aICgFGiAoEUfLHn37kXJ83b03db29m32p5PHFSjo39EIHDRCUAg0QlIijC73EFvnr+ZroU5/aWG1PS7cfvfXa7FxtzHoydVqNEe28MAgdNEBQCjRAUCKOLuSxxdGbqyji1KeqqCKPLQqnn3+247nv/6+zH61335dtdLNLo4WFhXFP4TwzMzPjngITTAcNEJQCDRCUiKNHz9xXfQfdvqfny/GuV3T/XXlFrNHrccQwPz9fO966desYZsMk00EDBKWDHkDe/RZdcb5t3eqLynF+wbDuuN2XVPvSWd65zs7OjvS98/dzkZBh0kEDBKVAAwQl4hhAp4t9F9xwZTle98iPy3FT3EH3Rh1rwDjooAGCUqABghJxDKAunshXbuS6iTsAcjpogKAUaICgRBwtKaKNPMp46pvfK8evfONrM Rz4nhsOt3oyKDhogKAUaICgRB/TIszja954/urUcHzt2bOjvd/To0eyn3xz6+/VLBw0QlAINEJSIgxVlpUQKmzZtGvcUmAA6aICgdNBDZO3z+eqeQDc3NzeGmQzf/v37y/G0P3nv6suri3Bbtmwpx/nFwH/65/tGOaWUVr982Zfzi5Yjn1tGBw0QlAINEJSIY0R+5Ql255mmj/3T9Lv24uHvPD7uKaSUUjr+5E/HPYVGOmiAoBRogKBEHC0pYov8Yfx1ry9WfK/h7kvqH/Q/6Xz8ny6juI27DVHmqYMGCEqBBghKxDGAIp5Iqfp+wm5WaNQdB7CYDhogKAUaICgRxwDyeKKILbqJLOqOm9ZVHEAzHTRAUDroAXS62Fd80/dyis55za3VU77Sw48NPjlgxdNBAwSlQAMEJeLoUR5F7L5v+X1vWb+uHD/69iPl+Lp7b1qy/bp7O+8LTBcdNEBQCjRAUCKOLpwfOWTb/+JEtv2mJfumLLZoiirqtos1gJR00ABhKdAAM QYk4uiCeAMZBBw0QlAINEJQCDRCUAg0QlIuEwFDt37+/dvvmHTtHPJPlRZynDhogKAUaIKipijjyjyoPHXigemF+fgyzGY+9jxxZsm1ubm4MM6FO/m8RLQJg9HTQAEEp0ABBrdq8Y+cL454EAEvpoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYL6f4+LRmUu9i0TAAAAAElFTkSuQmCC" class="background"><div class="game"><canvas width="750" height="585" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const conM text=canvas.getContext("2d");const grid=15;const paddleHeight=grid*5;const maxPaddleY=canvas.height-grid-paddleHeight;var paddleSpeed=6;var ballSpeed=5;const leftPaddle={x:grid*2,y:canvas.height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const rightPaddle={x:canvas.width-grid*3,y:canvas.height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const ball={x:canvas.width/2,y:canvas.height/2,width:grid,height:grid,l:false,dx:ballSpeed,dy:-ballSpeed};function collides(l,d){return l.x<d.x+d.width&&l.x+l.wM idth>d.x&&l.y<d.y+d.height&&l.y+l.height>d.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);leftPaddle.y+=leftPaddle.dy;rightPaddle.y+=rightPaddle.dy;if(leftPaddle.y<grid){leftPaddle.y=grid}else if(leftPaddle.y>maxPaddleY){leftPaddle.y=maxPaddleY}if(rightPaddle.y<grid){rightPaddle.y=grid}else if(rightPaddle.y>maxPaddleY){rightPaddle.y=maxPaddleY}context.fillStyle="white";context.fillRect(leftPaddle.x,leftPaddle.y,leftPaddle.width,leftPaddle.height);context.fillRect(rigM htPaddle.x,rightPaddle.y,rightPaddle.width,rightPaddle.height);ball.x+=ball.dx;ball.y+=ball.dy;if(ball.y<grid){ball.y=grid;ball.dy*=-1}else if(ball.y+grid>canvas.height-grid){ball.y=canvas.height-grid*2;ball.dy*=-1}if((ball.x<0||ball.x>canvas.width)&&!ball.l){ball.l=true;setTimeout(()=>{ball.l=false;ball.x=canvas.width/2;ball.y=canvas.height/2},400)}if(collides(ball,leftPaddle)){ball.dx*=-1;ball.x=leftPaddle.x+leftPaddle.width}else if(collides(ball,rightPaddle)){ball.dx*=-1;ball.x=rightPaddle.x-ball.width}context.fM illRect(ball.x,ball.y,ball.width,ball.height);context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,grid);context.fillRect(0,canvas.height-grid,canvas.width,canvas.height);for(let l=grid;l<canvas.height-grid;l+=grid*2){context.fillRect(canvas.width/2-grid/2,l,grid,grid)}}document.addEventListener("keydown",function(l){if(l.which===38){rightPaddle.dy=-paddleSpeed}else if(l.which===40){rightPaddle.dy=paddleSpeed}if(l.which===87){leftPaddle.dy=-paddleSpeed}else if(l.which===83){leftPaddle.dy=paddleSpeed}});dL ocument.addEventListener("keyup",function(l){if(l.which===38||l.which===40){rightPaddle.dy=0}if(l.which===83||l.which===87){leftPaddle.dy=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","RM ","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGaM p=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(brickHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.wiM dth&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>canvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSizeM ;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvasM .height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddle.y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.whLSich===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! text/plain;charset=utf-8 YiTXtXML:com.adobe.xmp <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! @j>=:ETH.ETH:0xDB5B6952643171047484311e567F860c0a30ec1C:454702::0 text/plain;charset=utf-8 No hay justicia en este mundo, las gorras estan de huelga y el sol nos fuerza marchitar la frente. No se van a cansar de protestar nunca? que voy a hacer yo de aca a dos a os con todas estas arrugas? Para colmo escuche ayer en la radio que la arrugas tambi n han organizado un gremio y quieren pedir que les pongamos cremas org nicas y no se que otras ridiculeces. Y esto es todo por culpa de las gorras que no hacen mas que quejarse. Lo an que hacer es sentarse en la cabeza de uno y esperar a quM e se haga de noche, pero ni eso pueden hacer sin protestar. Ahora quieren que les pongamos protector solar factor sesenta para que no se decoloren y quieren turnos de no mas de dos horas porque les hace calor. Si, ya se, usted va a decir que soy un capitalista explotador, las pobres gorras tienen derechos como cualquier zapatilla de vecino o tenedor de plata. Imaginense un mundo que estos seres no fueran mas que objetos inanimados, que mundo feliz, 0+HO,$N*CO^1q*)OV@|* %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz DjB=:BNB.BNB:bnb1vw2ypxm9dzktdnd5cuh629c82x9e9xh9xryk7z:24180855:te:0 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.M 0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:69eac0b9-5ded-4db5-9d6d-0e98185ccc55" xmpMM:InstanceID="xmp.iid:f1a3016f-1864-4d42-b07f-eb9da3348ad8" xmpMM:OriginalDocumentID="xmp.did:6b3f751c-cbe4-43aa-a4cb-3670cf60360a" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676407985906209" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:53:04+11:00" xmp:ModifyDate="2023:02:15T07:53:04+11:00"> <xmpMM:HisM tory> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:9249d2ed-7ac8-4fe4-a179-f38514b87b65" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:53:05"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dM c="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:c683129f-e9b4-45f6-b553-bf651af36b34" xmpMM:InstanceID="xmp.iid:beadcc44-715f-4334-8743-b7933d596fa0" xmpMM:OriginalDocumentID="xmp.did:da930a31-0afa-4096-96bb-eda7aeb5e023" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676407961880034" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorToM ol="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:52:40+11:00" xmp:ModifyDate="2023:02:15T07:52:40+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:3809d12d-fc36-4ff5-8bdf-9e23af9e1e44" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:52:41"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M Mx <?xpacket end="w"?>h! - " " -D*2**2*D<I;7;I<lUKKUl}ici} - " " -D*2**2*D<I;7;I<lUKKUl}ici} 0+HO,$N*CO^1q*)OV@|* %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz text/plain;charset=utf-8 ,It's another day for you and me in paradise!h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/html;charset=utf-8 <title>System Info</title> font-family: sans; font-size: 13px; <script src="../content/379b18942989c8458fe92fc89e5f32d62c9f8be520779e293908df2b58bcd2dai0"></script> document.body.innerHTML = [ '<strong>Browser</strong> ' + System.browser, '<strong>OS</strong> ' + System.os, '<strong>Canvas</strong> ' + System.support.canvas, '<strong>Local storage</strong> ' + System.support.locaM '<strong>File API</strong> ' + System.support.file, '<strong>FileSystem API</strong> ' + System.support.fileSystem, '<strong>RequestAnimationFrame</strong> ' + System.support.requestAnimationFrame, '<strong>Session storage</strong> ' + System.support.sessionStorage, '<strong>SVG</strong> ' + System.support.svg, '<strong>WebGL</strong> ' + System.support.webgl, '<strong>Worker</strong> ' + System.support.worker ].join( '<br />' ); 28a7395cfba8a4fde7508eaa96f5b0b9H0E <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 AUTHORIZED KING JAMES VERSION 1:1: The Revelation of Jesus Christ, which God gave unto him, to shew unto his servants things which must shortly come to pass; and he sent and signified it by his angel unto his servant John: 1:2: Who bare record of the word of God, and of the testimony of Jesus Christ, and of all things that he saw. 1:3: Blessed is he that readeth, and they that hear the words of this prophecy, and keep those things which are written therein: for M the time is at hand. 1:4: John to the seven churches which are in Asia: Grace be unto you, and peace, from him which is, and which was, and which is to come; and from the seven Spirits which are before his throne; 1:5: And from Jesus Christ, who is the faithful witness, and the first begotten of the dead, and the prince of the kings of the earth. Unto him that loved us, and washed us from our sins in his own blood, 1:6: And hath made us kings and priests unto God and his Father; to him be glory and dominion for eveM 1:7: Behold, he cometh with clouds; and every eye shall see him, and they also which pierced him: and all kindreds of the earth shall wail because of him. Even so, Amen. 1:8: I am Alpha and Omega, the beginning and the ending, saith the Lord, which is, and which was, and which is to come, the Almighty. 1:9: I John, who also am your brother, and companion in tribulation, and in the kingdom and patience of Jesus Christ, was in the isle that is called Patmos, for the word of God, and for the testimonM 1:10: I was in the Spirit on the Lord's day, and heard behind me a great voice, as of a trumpet, 1:11: Saying, I am Alpha and Omega, the first and the last: and, What thou seest, write in a book, and send it unto the seven churches which are in Asia; unto Ephesus, and unto Smyrna, and unto Pergamos, and unto Thyatira, and unto Sardis, and unto Philadelphia, and unto Laodicea. 1:12: And I turned to see the voice that spake with me. And being turned, I saw seven golden candlesticks; e midst of the seven candlesticks one like unto the Son of man, clothed with a garment down to the foot, and girt about the paps with a golden girdle. 1:14: His head and his hairs were white like wool, as white as snow; and his eyes were as a flame of fire; 1:15: And his feet like unto fine brass, as if they burned in a furnace; and his voice as the sound of many waters. 1:16: And he had in his right hand seven stars: and out of his mouth went a sharp twoedged sword: and his countenance was as the sun shineth in hiM 1:17: And when I saw him, I fell at his feet as dead. And he laid his right hand upon me, saying unto me, Fear not; I am the first and the last: 1:18: I am he that liveth, and was dead; and, behold, I am alive for evermore, Amen; and have the keys of hell and of death. 1:19: Write the things which thou hast seen, and the things which are, and the things which shall be hereafter; 1:20: The mystery of the seven stars which thou sawest in my right hand, and the seven golden candlesticks. The seven stars arM e the angels of the seven churches: and the seven candlesticks which thou sawest are the seven churches. 2:1: Unto the angel of the church of Ephesus write; These things saith he that holdeth the seven stars in his right hand, who walketh in the midst of the seven golden candlesticks; 2:2: I know thy works, and thy labour, and thy patience, and how thou canst not bear them which are evil: and thou hast tried them which say they are apostles, and are not, and hast found them liars: 2:3: And hast borne, anM d hast patience, and for my name's sake hast laboured, and hast not fainted. 2:4: Nevertheless I have somewhat against thee, because thou hast left thy first love. 2:5: Remember therefore from whence thou art fallen, and repent, and do the first works; or else I will come unto thee quickly, and will remove thy candlestick out of his place, except thou repent. 2:6: But this thou hast, that thou hatest the deeds of the Nicolaitans, which I also hate. 2:7: He that hath an ear, let him hear what the Spirit saith unto tM he churches; To him that overcometh will I give to eat of the tree of life, which is in the midst of the paradise of God. 2:8: And unto the angel of the church in Smyrna write; These things saith the first and the last, which was dead, and is alive; 2:9: I know thy works, and tribulation, and poverty, (but thou art rich) and I know the blasphemy of them which say they are Jews, and are not, but are the synagogue of Satan. 2:10: Fear none of those things which thou shalt suffer: behold, the devil shall cast some of M you into prison, that ye may be tried; and ye shall have tribulation ten days: be thou faithful unto death, and I will give thee a crown of life. 2:11: He that hath an ear, let him hear what the Spirit saith unto the churches; He that overcometh shall not be hurt of the second death. 2:12: And to the angel of the church in Pergamos write; These things saith he which hath the sharp sword with two edges; 2:13: I know thy works, and where thou dwellest, even where Satan's seat is: and thou holdest fast my name, and haM st not denied my faith, even in those days wherein Antipas was my faithful martyr, who was slain among you, where Satan dwelleth. 2:14: But I have a few things against thee, because thou hast there them that hold the doctrine of Balaam, who taught Balac to cast a stumblingblock before the children of Israel, to eat things sacrificed unto idols, and to commit fornication. 2:15: So hast thou also them that hold the doctrine of the Nicolaitans, which thing I hate. 2:16: Repent; or else I will come unto thee quickly, aM nd will fight against them with the sword of my mouth. 2:17: He that hath an ear, let him hear what the Spirit saith unto the churches; To him that overcometh will I give to eat of the hidden manna, and will give him a white stone, and in the stone a new name written, which no man knoweth saving he that receiveth it. 2:18: And unto the angel of the church in Thyatira write; These things saith the Son of God, who hath his eyes like unto a flame of fire, and his feet are like fine brass; 2:19: I know thy works, and cM harity, and service, and faith, and thy patience, and thy works; and the last to be more than the first. 2:20: Notwithstanding I have a few things against thee, because thou sufferest that woman Jezebel, which calleth herself a prophetess, to teach and to seduce my servants to commit fornication, and to eat things sacrificed unto idols. 2:21: And I gave her space to repent of her fornication; and she repented not. 2:22: Behold, I will cast her into a bed, and them that commit adultery with her into great tribulatioM n, except they repent of their deeds. 2:23: And I will kill her children with death; and all the churches shall know that I am he which searcheth the reins and hearts: and I will give unto every one of you according to your works. 2:24: But unto you I say, and unto the rest in Thyatira, as many as have not this doctrine, and which have not known the depths of Satan, as they speak; I will put upon you none other burden. 2:25: But that which ye have already hold fast till I come. 2:26: And he that overcometh, and keeM peth my works unto the end, to him will I give power over the nations: 2:27: And he shall rule them with a rod of iron; as the vessels of a potter shall they be broken to shivers: even as I received of my Father. 2:28: And I will give him the morning star. 2:29: He that hath an ear, let him hear what the Spirit saith unto the churches. 3:1: And unto the angel of the church in Sardis write; These things saith he that hath the seven Spirits of God, and the seven stars; I know thy works, that thou hast a naM me that thou livest, and art dead. 3:2: Be watchful, and strengthen the things which remain, that are ready to die: for I have not found thy works perfect before God. 3:3: Remember therefore how thou hast received and heard, and hold fast, and repent. If therefore thou shalt not watch, I will come on thee as a thief, and thou shalt not know what hour I will come upon thee. 3:4: Thou hast a few names even in Sardis which have not defiled their garments; and they shall walk with me in white: for they are worthy. He that overcometh, the same shall be clothed in white raiment; and I will not blot out his name out of the book of life, but I will confess his name before my Father, and before his angels. 3:6: He that hath an ear, let him hear what the Spirit saith unto the churches. 3:7: And to the angel of the church in Philadelphia write; These things saith he that is holy, he that is true, he that hath the key of David, he that openeth, and no man shutteth; and shutteth, and no man openeth; 3:8: I know thy works: behold, I M have set before thee an open door, and no man can shut it: for thou hast a little strength, and hast kept my word, and hast not denied my name. 3:9: Behold, I will make them of the synagogue of Satan, which say they are Jews, and are not, but do lie; behold, I will make them to come and worship before thy feet, and to know that I have loved thee. 3:10: Because thou hast kept the word of my patience, I also will keep thee from the hour of temptation, which shall come upon all the world, to try them that dwell upon tM 3:11: Behold, I come quickly: hold that fast which thou hast, that no man take thy crown. 3:12: Him that overcometh will I make a pillar in the temple of my God, and he shall go no more out: and I will write upon him the name of my God, and the name of the city of my God, which is new Jerusalem, which cometh down out of heaven from my God: and I will write upon him my new name. 3:13: He that hath an ear, let him hear what the Spirit saith unto the churches. 3:14: And unto the angel of the church of the LaM odiceans write; These things saith the Amen, the faithful and true witness, the beginning of the creation of God; 3:15: I know thy works, that thou art neither cold nor hot: I would thou wert cold or hot. 3:16: So then because thou art lukewarm, and neither cold nor hot, I will spue thee out of my mouth. 3:17: Because thou sayest, I am rich, and increased with goods, and have need of nothing; and knowest not that thou art wretched, and miserable, and poor, and blind, and naked: 3:18: I counsel thee to buy of me golM d tried in the fire, that thou mayest be rich; and white raiment, that thou mayest be clothed, and that the shame of thy nakedness do not appear; and anoint thine eyes with eyesalve, that thou mayest see. 3:19: As many as I love, I rebuke and chasten: be zealous therefore, and repent. 3:20: Behold, I stand at the door, and knock: if any man hear my voice, and open the door, I will come in to him, and will sup with him, and he with me. 3:21: To him that overcometh will I grant to sit with me in my throne, even as I M also overcame, and am set down with my Father in his throne. 3:22: He that hath an ear, let him hear what the Spirit saith unto the churches. 4:1: After this I looked, and, behold, a door was opened in heaven: and the first voice which I heard was as it were of a trumpet talking with me; which said, Come up hither, and I will shew thee things which must be hereafter. 4:2: And immediately I was in the spirit: and, behold, a throne was set in heaven, and one sat on the throne. 4:3: And he that sat was to lM ook upon like a jasper and a sardine stone: and there was a rainbow round about the throne, in sight like unto an emerald. 4:4: And round about the throne were four and twenty seats: and upon the seats I saw four and twenty elders sitting, clothed in white raiment; and they had on their heads crowns of gold. 4:5: And out of the throne proceeded lightnings and thunderings and voices: and there were seven lamps of fire burning before the throne, which are the seven Spirits of God. 4:6: And before the throne there wasM a sea of glass like unto crystal: and in the midst of the throne, and round about the throne, were four beasts full of eyes before and behind. 4:7: And the first beast was like a lion, and the second beast like a calf, and the third beast had a face as a man, and the fourth beast was like a flying eagle. 4:8: And the four beasts had each of them six wings about him; and they were full of eyes within: and they rest not day and night, saying, Holy, holy, holy, Lord God Almighty, which was, and is, and is to come. 9: And when those beasts give glory and honour and thanks to him that sat on the throne, who liveth for ever and ever, 4:10: The four and twenty elders fall down before him that sat on the throne, and worship him that liveth for ever and ever, and cast their crowns before the throne, saying, 4:11: Thou art worthy, O Lord, to receive glory and honour and power: for thou hast created all things, and for thy pleasure they are and were created. 5:1: And I saw in the right hand of him that sat on the throne aM book written within and on the backside, sealed with seven seals. 5:2: And I saw a strong angel proclaiming with a loud voice, Who is worthy to open the book, and to loose the seals thereof? 5:3: And no man in heaven, nor in earth, neither under the earth, was able to open the book, neither to look thereon. 5:4: And I wept much, because no man was found worthy to open and to read the book, neither to look thereon. 5:5: And one of the elders saith unto me, Weep not: behold, the Lion of the tribe of Juda, the Root oM f David, hath prevailed to open the book, and to loose the seven seals thereof. 5:6: And I beheld, and, lo, in the midst of the throne and of the four beasts, and in the midst of the elders, stood a Lamb as it had been slain, having seven horns and seven eyes, which are the seven Spirits of God sent forth into all the earth. 5:7: And he came and took the book out of the right hand of him that sat upon the throne. 5:8: And when he had taken the book, the four beasts and four and twenty elders fell down before the LaM mb, having every one of them harps, and golden vials full of odours, which are the prayers of saints. 5:9: And they sung a new song, saying, Thou art worthy to take the book, and to open the seals thereof: for thou wast slain, and hast redeemed us to God by thy blood out of every kindred, and tongue, and people, and nation; 5:10: And hast made us unto our God kings and priests: and we shall reign on the earth. 5:11: And I beheld, and I heard the voice of many angels round about the throne and the beasts and the eldM ers: and the number of them was ten thousand times ten thousand, and thousands of thousands; 5:12: Saying with a loud voice, Worthy is the Lamb that was slain to receive power, and riches, and wisdom, and strength, and honour, and glory, and blessing. 5:13: And every creature which is in heaven, and on the earth, and under the earth, and such as are in the sea, and all that are in them, heard I saying, Blessing, and honour, and glory, and power, be unto him that sitteth upon the throne, and unto the Lamb for ever aM 5:14: And the four beasts said, Amen. And the four and twenty elders fell down and worshipped him that liveth for ever and ever. 6:1: And I saw when the Lamb opened one of the seals, and I heard, as it were the noise of thunder, one of the four beasts saying, Come and see. 6:2: And I saw, and behold a white horse: and he that sat on him had a bow; and a crown was given unto him: and he went forth conquering, and to conquer. 6:3: And when he had opened the second seal, I heard the second beast saM 6:4: And there went out another horse that was red: and power was given to him that sat thereon to take peace from the earth, and that they should kill one another: and there was given unto him a great sword. 6:5: And when he had opened the third seal, I heard the third beast say, Come and see. And I beheld, and lo a black horse; and he that sat on him had a pair of balances in his hand. 6:6: And I heard a voice in the midst of the four beasts say, A measure of wheat for a penny, and three measuresM of barley for a penny; and see thou hurt not the oil and the wine. 6:7: And when he had opened the fourth seal, I heard the voice of the fourth beast say, Come and see. 6:8: And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. And power was given unto them over the fourth part of the earth, to kill with sword, and with hunger, and with death, and with the beasts of the earth. 6:9: And when he had opened the fifth seal, I saw under the altar the souls of them thM at were slain for the word of God, and for the testimony which they held: 6:10: And they cried with a loud voice, saying, How long, O Lord, holy and true, dost thou not judge and avenge our blood on them that dwell on the earth? 6:11: And white robes were given unto every one of them; and it was said unto them, that they should rest yet for a little season, until their fellowservants also and their brethren, that should be killed as they were, should be fulfilled. 6:12: And I beheld when he had opened the sixth seaM l, and, lo, there was a great earthquake; and the sun became black as sackcloth of hair, and the moon became as blood; 6:13: And the stars of heaven fell unto the earth, even as a fig tree casteth her untimely figs, when she is shaken of a mighty wind. 6:14: And the heaven departed as a scroll when it is rolled together; and every mountain and island were moved out of their places. 6:15: And the kings of the earth, and the great men, and the rich men, and the chief captains, and the mighty men, and every bondman, aM nd every free man, hid themselves in the dens and in the rocks of the mountains; 6:16: And said to the mountains and rocks, Fall on us, and hide us from the face of him that sitteth on the throne, and from the wrath of the Lamb: 6:17: For the great day of his wrath is come; and who shall be able to stand? 7:1: And after these things I saw four angels standing on the four corners of the earth, holding the four winds of the earth, that the wind should not blow on the earth, nor on the sea, nor on any tree.M 7:2: And I saw another angel ascending from the east, having the seal of the living God: and he cried with a loud voice to the four angels, to whom it was given to hurt the earth and the sea, 7:3: Saying, Hurt not the earth, neither the sea, nor the trees, till we have sealed the servants of our God in their foreheads. 7:4: And I heard the number of them which were sealed: and there were sealed an hundred and forty and four thousand of all the tribes of the children of Israel. 7:5: Of the tribe of Juda were sealedM twelve thousand. Of the tribe of Reuben were sealed twelve thousand. Of the tribe of Gad were sealed twelve thousand. 7:6: Of the tribe of Aser were sealed twelve thousand. Of the tribe of Nepthalim were sealed twelve thousand. Of the tribe of Manasses were sealed twelve thousand. 7:7: Of the tribe of Simeon were sealed twelve thousand. Of the tribe of Levi were sealed twelve thousand. Of the tribe of Issachar were sealed twelve thousand. 7:8: Of the tribe of Zabulon were sealed twelve thousand. Of the tribe of JoM seph were sealed twelve thousand. Of the tribe of Benjamin were sealed twelve thousand. 7:9: After this I beheld, and, lo, a great multitude, which no man could number, of all nations, and kindreds, and people, and tongues, stood before the throne, and before the Lamb, clothed with white robes, and palms in their hands; 7:10: And cried with a loud voice, saying, Salvation to our God which sitteth upon the throne, and unto the Lamb. 7:11: And all the angels stood round about the throne, and about the elders and the M four beasts, and fell before the throne on their faces, and worshipped God, 7:12: Saying, Amen: Blessing, and glory, and wisdom, and thanksgiving, and honour, and power, and might, be unto our God for ever and ever. Amen. 7:13: And one of the elders answered, saying unto me, What are these which are arrayed in white robes? and whence came they? 7:14: And I said unto him, Sir, thou knowest. And he said to me, These are they which came out of great tribulation, and have washed their robes, and made them white in the M 7:15: Therefore are they before the throne of God, and serve him day and night in his temple: and he that sitteth on the throne shall dwell among them. 7:16: They shall hunger no more, neither thirst any more; neither shall the sun light on them, nor any heat. 7:17: For the Lamb which is in the midst of the throne shall feed them, and shall lead them unto living fountains of waters: and God shall wipe away all tears from their eyes. 8:1: And when he had opened the seventh seal, there wM as silence in heaven about the space of half an hour. 8:2: And I saw the seven angels which stood before God; and to them were given seven trumpets. 8:3: And another angel came and stood at the altar, having a golden censer; and there was given unto him much incense, that he should offer it with the prayers of all saints upon the golden altar which was before the throne. 8:4: And the smoke of the incense, which came with the prayers of the saints, ascended up before God out of the angel's hand. 8:5: And the angel tM ook the censer, and filled it with fire of the altar, and cast it into the earth: and there were voices, and thunderings, and lightnings, and an earthquake. 8:6: And the seven angels which had the seven trumpets prepared themselves to sound. 8:7: The first angel sounded, and there followed hail and fire mingled with blood, and they were cast upon the earth: and the third part of trees was burnt up, and all green grass was burnt up. 8:8: And the second angel sounded, and as it were a great mountain burning with fireM was cast into the sea: and the third part of the sea became blood; 8:9: And the third part of the creatures which were in the sea, and had life, died; and the third part of the ships were destroyed. 8:10: And the third angel sounded, and there fell a great star from heaven, burning as it were a lamp, and it fell upon the third part of the rivers, and upon the fountains of waters; 8:11: And the name of the star is called Wormwood: and the third part of the waters became wormwood; and many men died of the waters, beM cause they were made bitter. 8:12: And the fourth angel sounded, and the third part of the sun was smitten, and the third part of the moon, and the third part of the stars; so as the third part of them was darkened, and the day shone not for a third part of it, and the night likewise. 8:13: And I beheld, and heard an angel flying through the midst of heaven, saying with a loud voice, Woe, woe, woe, to the inhabiters of the earth by reason of the other voices of the trumpet of the three angels, which are yet to sounM 9:1: And the fifth angel sounded, and I saw a star fall from heaven unto the earth: and to him was given the key of the bottomless pit. 9:2: And he opened the bottomless pit; and there arose a smoke out of the pit, as the smoke of a great furnace; and the sun and the air were darkened by reason of the smoke of the pit. 9:3: And there came out of the smoke locusts upon the earth: and unto them was given power, as the scorpions of the earth have power. 9:4: And it was commanded them that they should notM hurt the grass of the earth, neither any green thing, neither any tree; but only those men which have not the seal of God in their foreheads. 9:5: And to them it was given that they should not kill them, but that they should be tormented five months: and their torment was as the torment of a scorpion, when he striketh a man. 9:6: And in those days shall men seek death, and shall not find it; and shall desire to die, and death shall flee from them. 9:7: And the shapes of the locusts were like unto horses prepared uM nto battle; and on their heads were as it were crowns like gold, and their faces were as the faces of men. 9:8: And they had hair as the hair of women, and their teeth were as the teeth of lions. 9:9: And they had breastplates, as it were breastplates of iron; and the sound of their wings was as the sound of chariots of many horses running to battle. 9:10: And they had tails like unto scorpions, and there were stings in their tails: and their power was to hurt men five months. 9:11: And they had a king over them, wM hich is the angel of the bottomless pit, whose name in the Hebrew tongue is Abaddon, but in the Greek tongue hath his name Apollyon. 9:12: One woe is past; and, behold, there come two woes more hereafter. 9:13: And the sixth angel sounded, and I heard a voice from the four horns of the golden altar which is before God, 9:14: Saying to the sixth angel which had the trumpet, Loose the four angels which are bound in the great river Euphrates. 9:15: And the four angels were loosed, which were prepared for an hour, and M a day, and a month, and a year, for to slay the third part of men. 9:16: And the number of the army of the horsemen were two hundred thousand thousand: and I heard the number of them. 9:17: And thus I saw the horses in the vision, and them that sat on them, having breastplates of fire, and of jacinth, and brimstone: and the heads of the horses were as the heads of lions; and out of their mouths issued fire and smoke and brimstone. 9:18: By these three was the third part of men killed, by the fire, and by the smoke,M and by the brimstone, which issued out of their mouths. 9:19: For their power is in their mouth, and in their tails: for their tails were like unto serpents, and had heads, and with them they do hurt. 9:20: And the rest of the men which were not killed by these plagues yet repented not of the works of their hands, that they should not worship devils, and idols of gold, and silver, and brass, and stone, and of wood: which neither can see, nor hear, nor walk: 9:21: Neither repented they of their murders, nor of theiM r sorceries, nor of their fornication, nor of their thefts. 10:1: And I saw another mighty angel come down from heaven, clothed with a cloud: and a rainbow was upon his head, and his face was as it were the sun, and his feet as pillars of fire: 10:2: And he had in his hand a little book open: and he set his right foot upon the sea, and his left foot on the earth, 10:3: And cried with a loud voice, as when a lion roareth: and when he had cried, seven thunders uttered their voices. 10:4: And when the seveM n thunders had uttered their voices, I was about to write: and I heard a voice from heaven saying unto me, Seal up those things which the seven thunders uttered, and write them not. 10:5: And the angel which I saw stand upon the sea and upon the earth lifted up his hand to heaven, 10:6: And sware by him that liveth for ever and ever, who created heaven, and the things that therein are, and the earth, and the things that therein are, and the sea, and the things which are therein, that there should be time no longer:M 10:7: But in the days of the voice of the seventh angel, when he shall begin to sound, the mystery of God should be finished, as he hath declared to his servants the prophets. 10:8: And the voice which I heard from heaven spake unto me again, and said, Go and take the little book which is open in the hand of the angel which standeth upon the sea and upon the earth. 10:9: And I went unto the angel, and said unto him, Give me the little book. And he said unto me, Take it, and eat it up; and it shall make thy belly bM itter, but it shall be in thy mouth sweet as honey. 10:10: And I took the little book out of the angel's hand, and ate it up; and it was in my mouth sweet as honey: and as soon as I had eaten it, my belly was bitter. 10:11: And he said unto me, Thou must prophesy again before many peoples, and nations, and tongues, and kings. 11:1: And there was given me a reed like unto a rod: and the angel stood, saying, Rise, and measure the temple of God, and the altar, and them that worship therein. ourt which is without the temple leave out, and measure it not; for it is given unto the Gentiles: and the holy city shall they tread under foot forty and two months. 11:3: And I will give power unto my two witnesses, and they shall prophesy a thousand two hundred and threescore days, clothed in sackcloth. 11:4: These are the two olive trees, and the two candlesticks standing before the God of the earth. 11:5: And if any man will hurt them, fire proceedeth out of their mouth, and devoureth their enemies: and if anyM man will hurt them, he must in this manner be killed. 11:6: These have power to shut heaven, that it rain not in the days of their prophecy: and have power over waters to turn them to blood, and to smite the earth with all plagues, as often as they will. 11:7: And when they shall have finished their testimony, the beast that ascendeth out of the bottomless pit shall make war against them, and shall overcome them, and kill them. 11:8: And their dead bodies shall lie in the street of the great city, which spirituallM y is called Sodom and Egypt, where also our Lord was crucified. 11:9: And they of the people and kindreds and tongues and nations shall see their dead bodies three days and an half, and shall not suffer their dead bodies to be put in graves. 11:10: And they that dwell upon the earth shall rejoice over them, and make merry, and shall send gifts one to another; because these two prophets tormented them that dwelt on the earth. 11:11: And after three days and an half the Spirit of life from God entered into them, and M they stood upon their feet; and great fear fell upon them which saw them. 11:12: And they heard a great voice from heaven saying unto them, Come up hither. And they ascended up to heaven in a cloud; and their enemies beheld them. 11:13: And the same hour was there a great earthquake, and the tenth part of the city fell, and in the earthquake were slain of men seven thousand: and the remnant were affrighted, and gave glory to the God of heaven. 11:14: The second woe is past; and, behold, the third woe cometh quicklyM 11:15: And the seventh angel sounded; and there were great voices in heaven, saying, The kingdoms of this world are become the kingdoms of our Lord, and of his Christ; and he shall reign for ever and ever. 11:16: And the four and twenty elders, which sat before God on their seats, fell upon their faces, and worshipped God, 11:17: Saying, We give thee thanks, O Lord God Almighty, which art, and wast, and art to come; because thou hast taken to thee thy great power, and hast reigned. 11:18: And the nations were angM ry, and thy wrath is come, and the time of the dead, that they should be judged, and that thou shouldest give reward unto thy servants the prophets, and to the saints, and them that fear thy name, small and great; and shouldest destroy them which destroy the earth. 11:19: And the temple of God was opened in heaven, and there was seen in his temple the ark of his testament: and there were lightnings, and voices, and thunderings, and an earthquake, and great hail. 12:1: And there appeared a great wonder iM n heaven; a woman clothed with the sun, and the moon under her feet, and upon her head a crown of twelve stars: 12:2: And she being with child cried, travailing in birth, and pained to be delivered. 12:3: And there appeared another wonder in heaven; and behold a great red dragon, having seven heads and ten horns, and seven crowns upon his heads. 12:4: And his tail drew the third part of the stars of heaven, and did cast them to the earth: and the dragon stood before the woman which was ready to be delivered, for toM devour her child as soon as it was born. 12:5: And she brought forth a man child, who was to rule all nations with a rod of iron: and her child was caught up unto God, and to his throne. 12:6: And the woman fled into the wilderness, where she hath a place prepared of God, that they should feed her there a thousand two hundred and threescore days. 12:7: And there was war in heaven: Michael and his angels fought against the dragon; and the dragon fought and his angels, 12:8: And prevailed not; neither was their placM e found any more in heaven. 12:9: And the great dragon was cast out, that old serpent, called the Devil, and Satan, which deceiveth the whole world: he was cast out into the earth, and his angels were cast out with him. 12:10: And I heard a loud voice saying in heaven, Now is come salvation, and strength, and the kingdom of our God, and the power of his Christ: for the accuser of our brethren is cast down, which accused them before our God day and night. 12:11: And they overcame him by the blood of the Lamb, and byM the word of their testimony; and they loved not their lives unto the death. 12:12: Therefore rejoice, ye heavens, and ye that dwell in them. Woe to the inhabiters of the earth and of the sea! for the devil is come down unto you, having great wrath, because he knoweth that he hath but a short time. 12:13: And when the dragon saw that he was cast unto the earth, he persecuted the woman which brought forth the man child. 12:14: And to the woman were given two wings of a great eagle, that she might fly into the wilderM ness, into her place, where she is nourished for a time, and times, and half a time, from the face of the serpent. 12:15: And the serpent cast out of his mouth water as a flood after the woman, that he might cause her to be carried away of the flood. 12:16: And the earth helped the woman, and the earth opened her mouth, and swallowed up the flood which the dragon cast out of his mouth. 12:17: And the dragon was wroth with the woman, and went to make war with the remnant of her seed, which keep the commandments of GM od, and have the testimony of Jesus Christ. 13:1: And I stood upon the sand of the sea, and saw a beast rise up out of the sea, having seven heads and ten horns, and upon his horns ten crowns, and upon his heads the name of blasphemy. 13:2: And the beast which I saw was like unto a leopard, and his feet were as the feet of a bear, and his mouth as the mouth of a lion: and the dragon gave him his power, and his seat, and great authority. 13:3: And I saw one of his heads as it were wounded to death; and hM is deadly wound was healed: and all the world wondered after the beast. 13:4: And they worshipped the dragon which gave power unto the beast: and they worshipped the beast, saying, Who is like unto the beast? who is able to make war with him? 13:5: And there was given unto him a mouth speaking great things and blasphemies; and power was given unto him to continue forty and two months. 13:6: And he opened his mouth in blasphemy against God, to blaspheme his name, and his tabernacle, and them that dwell in heaven. :7: And it was given unto him to make war with the saints, and to overcome them: and power was given him over all kindreds, and tongues, and nations. 13:8: And all that dwell upon the earth shall worship him, whose names are not written in the book of life of the Lamb slain from the foundation of the world. 13:9: If any man have an ear, let him hear. 13:10: He that leadeth into captivity shall go into captivity: he that killeth with the sword must be killed with the sword. Here is the patience and the faith of the M 13:11: And I beheld another beast coming up out of the earth; and he had two horns like a lamb, and he spake as a dragon. 13:12: And he exerciseth all the power of the first beast before him, and causeth the earth and them which dwell therein to worship the first beast, whose deadly wound was healed. 13:13: And he doeth great wonders, so that he maketh fire come down from heaven on the earth in the sight of men, 13:14: And deceiveth them that dwell on the earth by the means of those miracles which he had poM wer to do in the sight of the beast; saying to them that dwell on the earth, that they should make an image to the beast, which had the wound by a sword, and did live. 13:15: And he had power to give life unto the image of the beast, that the image of the beast should both speak, and cause that as many as would not worship the image of the beast should be killed. 13:16: And he causeth all, both small and great, rich and poor, free and bond, to receive a mark in their right hand, or in their foreheads: at no man might buy or sell, save he that had the mark, or the name of the beast, or the number of his name. 13:18: Here is wisdom. Let him that hath understanding count the number of the beast: for it is the number of a man; and his number is Six hundred threescore and six. 14:1: And I looked, and, lo, a Lamb stood on the mount Sion, and with him an hundred forty and four thousand, having his Father's name written in their foreheads. 14:2: And I heard a voice from heaven, as the voice of many waters, aM nd as the voice of a great thunder: and I heard the voice of harpers harping with their harps: 14:3: And they sung as it were a new song before the throne, and before the four beasts, and the elders: and no man could learn that song but the hundred and forty and four thousand, which were redeemed from the earth. 14:4: These are they which were not defiled with women; for they are virgins. These are they which follow the Lamb whithersoever he goeth. These were redeemed from among men, being the firstfruits unto God M 14:5: And in their mouth was found no guile: for they are without fault before the throne of God. 14:6: And I saw another angel fly in the midst of heaven, having the everlasting gospel to preach unto them that dwell on the earth, and to every nation, and kindred, and tongue, and people, 14:7: Saying with a loud voice, Fear God, and give glory to him; for the hour of his judgment is come: and worship him that made heaven, and earth, and the sea, and the fountains of waters. 14:8: And there followedM another angel, saying, Babylon is fallen, is fallen, that great city, because she made all nations drink of the wine of the wrath of her fornication. 14:9: And the third angel followed them, saying with a loud voice, If any man worship the beast and his image, and receive his mark in his forehead, or in his hand, 14:10: The same shall drink of the wine of the wrath of God, which is poured out without mixture into the cup of his indignation; and he shall be tormented with fire and brimstone in the presence of the hM oly angels, and in the presence of the Lamb: 14:11: And the smoke of their torment ascendeth up for ever and ever: and they have no rest day nor night, who worship the beast and his image, and whosoever receiveth the mark of his name. 14:12: Here is the patience of the saints: here are they that keep the commandments of God, and the faith of Jesus. 14:13: And I heard a voice from heaven saying unto me, Write, Blessed are the dead which die in the Lord from henceforth: Yea, saith the Spirit, that they may rest from M their labours; and their works do follow them. 14:14: And I looked, and behold a white cloud, and upon the cloud one sat like unto the Son of man, having on his head a golden crown, and in his hand a sharp sickle. 14:15: And another angel came out of the temple, crying with a loud voice to him that sat on the cloud, Thrust in thy sickle, and reap: for the time is come for thee to reap; for the harvest of the earth is ripe. 14:16: And he that sat on the cloud thrust in his sickle on the earth; and the earth was reapM 14:17: And another angel came out of the temple which is in heaven, he also having a sharp sickle. 14:18: And another angel came out from the altar, which had power over fire; and cried with a loud cry to him that had the sharp sickle, saying, Thrust in thy sharp sickle, and gather the clusters of the vine of the earth; for her grapes are fully ripe. 14:19: And the angel thrust in his sickle into the earth, and gathered the vine of the earth, and cast it into the great winepress of the wrath of God. the winepress was trodden without the city, and blood came out of the winepress, even unto the horse bridles, by the space of a thousand and six hundred furlongs. 15:1: And I saw another sign in heaven, great and marvellous, seven angels having the seven last plagues; for in them is filled up the wrath of God. 15:2: And I saw as it were a sea of glass mingled with fire: and them that had gotten the victory over the beast, and over his image, and over his mark, and over the number of his name, stand on tM he sea of glass, having the harps of God. 15:3: And they sing the song of Moses the servant of God, and the song of the Lamb, saying, Great and marvellous are thy works, Lord God Almighty; just and true are thy ways, thou King of saints. 15:4: Who shall not fear thee, O Lord, and glorify thy name? for thou only art holy: for all nations shall come and worship before thee; for thy judgments are made manifest. 15:5: And after that I looked, and, behold, the temple of the tabernacle of the testimony in heaven was openM 15:6: And the seven angels came out of the temple, having the seven plagues, clothed in pure and white linen, and having their breasts girded with golden girdles. 15:7: And one of the four beasts gave unto the seven angels seven golden vials full of the wrath of God, who liveth for ever and ever. 15:8: And the temple was filled with smoke from the glory of God, and from his power; and no man was able to enter into the temple, till the seven plagues of the seven angels were fulfilled. rd a great voice out of the temple saying to the seven angels, Go your ways, and pour out the vials of the wrath of God upon the earth. 16:2: And the first went, and poured out his vial upon the earth; and there fell a noisome and grievous sore upon the men which had the mark of the beast, and upon them which worshipped his image. 16:3: And the second angel poured out his vial upon the sea; and it became as the blood of a dead man: and every living soul died in the sea. 16:4: And the third angel poured out his vialM upon the rivers and fountains of waters; and they became blood. 16:5: And I heard the angel of the waters say, Thou art righteous, O Lord, which art, and wast, and shalt be, because thou hast judged thus. 16:6: For they have shed the blood of saints and prophets, and thou hast given them blood to drink; for they are worthy. 16:7: And I heard another out of the altar say, Even so, Lord God Almighty, true and righteous are thy judgments. 16:8: And the fourth angel poured out his vial upon the sun; and power was giveM n unto him to scorch men with fire. 16:9: And men were scorched with great heat, and blasphemed the name of God, which hath power over these plagues: and they repented not to give him glory. 16:10: And the fifth angel poured out his vial upon the seat of the beast; and his kingdom was full of darkness; and they gnawed their tongues for pain, 16:11: And blasphemed the God of heaven because of their pains and their sores, and repented not of their deeds. 16:12: And the sixth angel poured out his vial upon the great rM iver Euphrates; and the water thereof was dried up, that the way of the kings of the east might be prepared. 16:13: And I saw three unclean spirits like frogs come out of the mouth of the dragon, and out of the mouth of the beast, and out of the mouth of the false prophet. 16:14: For they are the spirits of devils, working miracles, which go forth unto the kings of the earth and of the whole world, to gather them to the battle of that great day of God Almighty. 16:15: Behold, I come as a thief. Blessed is he that wM atcheth, and keepeth his garments, lest he walk naked, and they see his shame. 16:16: And he gathered them together into a place called in the Hebrew tongue Armageddon. 16:17: And the seventh angel poured out his vial into the air; and there came a great voice out of the temple of heaven, from the throne, saying, It is done. 16:18: And there were voices, and thunders, and lightnings; and there was a great earthquake, such as was not since men were upon the earth, so mighty an earthquake, and so great. e great city was divided into three parts, and the cities of the nations fell: and great Babylon came in remembrance before God, to give unto her the cup of the wine of the fierceness of his wrath. 16:20: And every island fled away, and the mountains were not found. 16:21: And there fell upon men a great hail out of heaven, every stone about the weight of a talent: and men blasphemed God because of the plague of the hail; for the plague thereof was exceeding great. 17:1: And there came one of the seven M angels which had the seven vials, and talked with me, saying unto me, Come hither; I will shew unto thee the judgment of the great whore that sitteth upon many waters: 17:2: With whom the kings of the earth have committed fornication, and the inhabitants of the earth have been made drunk with the wine of her fornication. 17:3: So he carried me away in the spirit into the wilderness: and I saw a woman sit upon a scarlet coloured beast, full of names of blasphemy, having seven heads and ten horns. 17:4: And the womanM was arrayed in purple and scarlet colour, and decked with gold and precious stones and pearls, having a golden cup in her hand full of abominations and filthiness of her fornication: 17:5: And upon her forehead was a name written, MYSTERY, BABYLON THE GREAT, THE MOTHER OF HARLOTS AND ABOMINATIONS OF THE EARTH. 17:6: And I saw the woman drunken with the blood of the saints, and with the blood of the martyrs of Jesus: and when I saw her, I wondered with great admiration. 17:7: And the angel said unto me, Wherefore dM idst thou marvel? I will tell thee the mystery of the woman, and of the beast that carrieth her, which hath the seven heads and ten horns. 17:8: The beast that thou sawest was, and is not; and shall ascend out of the bottomless pit, and go into perdition: and they that dwell on the earth shall wonder, whose names were not written in the book of life from the foundation of the world, when they behold the beast that was, and is not, and yet is. 17:9: And here is the mind which hath wisdom. The seven heads are seven mM ountains, on which the woman sitteth. 17:10: And there are seven kings: five are fallen, and one is, and the other is not yet come; and when he cometh, he must continue a short space. 17:11: And the beast that was, and is not, even he is the eighth, and is of the seven, and goeth into perdition. 17:12: And the ten horns which thou sawest are ten kings, which have received no kingdom as yet; but receive power as kings one hour with the beast. 17:13: These have one mind, and shall give their power and strength unto tM 17:14: These shall make war with the Lamb, and the Lamb shall overcome them: for he is Lord of lords, and King of kings: and they that are with him are called, and chosen, and faithful. 17:15: And he saith unto me, The waters which thou sawest, where the whore sitteth, are peoples, and multitudes, and nations, and tongues. 17:16: And the ten horns which thou sawest upon the beast, these shall hate the whore, and shall make her desolate and naked, and shall eat her flesh, and burn her with fire. God hath put in their hearts to fulfil his will, and to agree, and give their kingdom unto the beast, until the words of God shall be fulfilled. 17:18: And the woman which thou sawest is that great city, which reigneth over the kings of the earth. 18:1: And after these things I saw another angel come down from heaven, having great power; and the earth was lightened with his glory. 18:2: And he cried mightily with a strong voice, saying, Babylon the great is fallen, is fallen, and is become the habitatiM on of devils, and the hold of every foul spirit, and a cage of every unclean and hateful bird. 18:3: For all nations have drunk of the wine of the wrath of her fornication, and the kings of the earth have committed fornication with her, and the merchants of the earth are waxed rich through the abundance of her delicacies. 18:4: And I heard another voice from heaven, saying, Come out of her, my people, that ye be not partakers of her sins, and that ye receive not of her plagues. 18:5: For her sins have reached unto M heaven, and God hath remembered her iniquities. 18:6: Reward her even as she rewarded you, and double unto her double according to her works: in the cup which she hath filled fill to her double. 18:7: How much she hath glorified herself, and lived deliciously, so much torment and sorrow give her: for she saith in her heart, I sit a queen, and am no widow, and shall see no sorrow. 18:8: Therefore shall her plagues come in one day, death, and mourning, and famine; and she shall be utterly burned with fire: for strongM is the Lord God who judgeth her. 18:9: And the kings of the earth, who have committed fornication and lived deliciously with her, shall bewail her, and lament for her, when they shall see the smoke of her burning, 18:10: Standing afar off for the fear of her torment, saying, Alas, alas, that great city Babylon, that mighty city! for in one hour is thy judgment come. 18:11: And the merchants of the earth shall weep and mourn over her; for no man buyeth their merchandise any more: 18:12: The merchandise of gold, andM silver, and precious stones, and of pearls, and fine linen, and purple, and silk, and scarlet, and all thyine wood, and all manner vessels of ivory, and all manner vessels of most precious wood, and of brass, and iron, and marble, 18:13: And cinnamon, and odours, and ointments, and frankincense, and wine, and oil, and fine flour, and wheat, and beasts, and sheep, and horses, and chariots, and slaves, and souls of men. 18:14: And the fruits that thy soul lusted after are departed from thee, and all things which werM e dainty and goodly are departed from thee, and thou shalt find them no more at all. 18:15: The merchants of these things, which were made rich by her, shall stand afar off for the fear of her torment, weeping and wailing, 18:16: And saying, Alas, alas, that great city, that was clothed in fine linen, and purple, and scarlet, and decked with gold, and precious stones, and pearls! 18:17: For in one hour so great riches is come to nought. And every shipmaster, and all the company in ships, and sailors, and as many asM trade by sea, stood afar off, 18:18: And cried when they saw the smoke of her burning, saying, What city is like unto this great city! 18:19: And they cast dust on their heads, and cried, weeping and wailing, saying, Alas, alas, that great city, wherein were made rich all that had ships in the sea by reason of her costliness! for in one hour is she made desolate. 18:20: Rejoice over her, thou heaven, and ye holy apostles and prophets; for God hath avenged you on her. 18:21: And a mighty angel took up a stone like M a great millstone, and cast it into the sea, saying, Thus with violence shall that great city Babylon be thrown down, and shall be found no more at all. 18:22: And the voice of harpers, and musicians, and of pipers, and trumpeters, shall be heard no more at all in thee; and no craftsman, of whatsoever craft he be, shall be found any more in thee; and the sound of a millstone shall be heard no more at all in thee; 18:23: And the light of a candle shall shine no more at all in thee; and the voice of the bridegroom anM d of the bride shall be heard no more at all in thee: for thy merchants were the great men of the earth; for by thy sorceries were all nations deceived. 18:24: And in her was found the blood of prophets, and of saints, and of all that were slain upon the earth. 19:1: And after these things I heard a great voice of much people in heaven, saying, Alleluia; Salvation, and glory, and honour, and power, unto the Lord our God: 19:2: For true and righteous are his judgments: for he hath judged the great whore,M which did corrupt the earth with her fornication, and hath avenged the blood of his servants at her hand. 19:3: And again they said, Alleluia. And her smoke rose up for ever and ever. 19:4: And the four and twenty elders and the four beasts fell down and worshipped God that sat on the throne, saying, Amen; Alleluia. 19:5: And a voice came out of the throne, saying, Praise our God, all ye his servants, and ye that fear him, both small and great. 19:6: And I heard as it were the voice of a great multitude, and as thM e voice of many waters, and as the voice of mighty thunderings, saying, Alleluia: for the Lord God omnipotent reigneth. 19:7: Let us be glad and rejoice, and give honour to him: for the marriage of the Lamb is come, and his wife hath made herself ready. 19:8: And to her was granted that she should be arrayed in fine linen, clean and white: for the fine linen is the righteousness of saints. 19:9: And he saith unto me, Write, Blessed are they which are called unto the marriage supper of the Lamb. And he saith unto meM , These are the true sayings of God. 19:10: And I fell at his feet to worship him. And he said unto me, See thou do it not: I am thy fellowservant, and of thy brethren that have the testimony of Jesus: worship God: for the testimony of Jesus is the spirit of prophecy. 19:11: And I saw heaven opened, and behold a white horse; and he that sat upon him was called Faithful and True, and in righteousness he doth judge and make war. 19:12: His eyes were as a flame of fire, and on his head were many crowns; and he had a nM ame written, that no man knew, but he himself. 19:13: And he was clothed with a vesture dipped in blood: and his name is called The Word of God. 19:14: And the armies which were in heaven followed him upon white horses, clothed in fine linen, white and clean. 19:15: And out of his mouth goeth a sharp sword, that with it he should smite the nations: and he shall rule them with a rod of iron: and he treadeth the winepress of the fierceness and wrath of Almighty God. 19:16: And he hath on his vesture and on his thigh M a name written, KING OF KINGS, AND LORD OF LORDS. 19:17: And I saw an angel standing in the sun; and he cried with a loud voice, saying to all the fowls that fly in the midst of heaven, Come and gather yourselves together unto the supper of the great God; 19:18: That ye may eat the flesh of kings, and the flesh of captains, and the flesh of mighty men, and the flesh of horses, and of them that sit on them, and the flesh of all men, both free and bond, both small and great. 19:19: And I saw the beast, and the kings M of the earth, and their armies, gathered together to make war against him that sat on the horse, and against his army. 19:20: And the beast was taken, and with him the false prophet that wrought miracles before him, with which he deceived them that had received the mark of the beast, and them that worshipped his image. These both were cast alive into a lake of fire burning with brimstone. 19:21: And the remnant were slain with the sword of him that sat upon the horse, which sword proceeded out of his mouth: and allM the fowls were filled with their flesh. 20:1: And I saw an angel come down from heaven, having the key of the bottomless pit and a great chain in his hand. 20:2: And he laid hold on the dragon, that old serpent, which is the Devil, and Satan, and bound him a thousand years, 20:3: And cast him into the bottomless pit, and shut him up, and set a seal upon him, that he should deceive the nations no more, till the thousand years should be fulfilled: and after that he must be loosed a little season. nd I saw thrones, and they sat upon them, and judgment was given unto them: and I saw the souls of them that were beheaded for the witness of Jesus, and for the word of God, and which had not worshipped the beast, neither his image, neither had received his mark upon their foreheads, or in their hands; and they lived and reigned with Christ a thousand years. 20:5: But the rest of the dead lived not again until the thousand years were finished. This is the first resurrection. 20:6: Blessed and holy is he that hath pM art in the first resurrection: on such the second death hath no power, but they shall be priests of God and of Christ, and shall reign with him a thousand years. 20:7: And when the thousand years are expired, Satan shall be loosed out of his prison, 20:8: And shall go out to deceive the nations which are in the four quarters of the earth, Gog and Magog, to gather them together to battle: the number of whom is as the sand of the sea. 20:9: And they went up on the breadth of the earth, and compassed the camp of the sM aints about, and the beloved city: and fire came down from God out of heaven, and devoured them. 20:10: And the devil that deceived them was cast into the lake of fire and brimstone, where the beast and the false prophet are, and shall be tormented day and night for ever and ever. 20:11: And I saw a great white throne, and him that sat on it, from whose face the earth and the heaven fled away; and there was found no place for them. 20:12: And I saw the dead, small and great, stand before God; and the books were opeM ned: and another book was opened, which is the book of life: and the dead were judged out of those things which were written in the books, according to their works. 20:13: And the sea gave up the dead which were in it; and death and hell delivered up the dead which were in them: and they were judged every man according to their works. 20:14: And death and hell were cast into the lake of fire. This is the second death. 20:15: And whosoever was not found written in the book of life was cast into the lake of fire. 21:1: And I saw a new heaven and a new earth: for the first heaven and the first earth were passed away; and there was no more sea. 21:2: And I John saw the holy city, new Jerusalem, coming down from God out of heaven, prepared as a bride adorned for her husband. 21:3: And I heard a great voice out of heaven saying, Behold, the tabernacle of God is with men, and he will dwell with them, and they shall be his people, and God himself shall be with them, and be their God. 21:4: And God shall wipe away all teaM rs from their eyes; and there shall be no more death, neither sorrow, nor crying, neither shall there be any more pain: for the former things are passed away. 21:5: And he that sat upon the throne said, Behold, I make all things new. And he said unto me, Write: for these words are true and faithful. 21:6: And he said unto me, It is done. I am Alpha and Omega, the beginning and the end. I will give unto him that is athirst of the fountain of the water of life freely. 21:7: He that overcometh shall inherit all thingsM ; and I will be his God, and he shall be my son. 21:8: But the fearful, and unbelieving, and the abominable, and murderers, and whoremongers, and sorcerers, and idolaters, and all liars, shall have their part in the lake which burneth with fire and brimstone: which is the second death. 21:9: And there came unto me one of the seven angels which had the seven vials full of the seven last plagues, and talked with me, saying, Come hither, I will shew thee the bride, the Lamb's wife. 21:10: And he carried me away in theM spirit to a great and high mountain, and shewed me that great city, the holy Jerusalem, descending out of heaven from God, 21:11: Having the glory of God: and her light was like unto a stone most precious, even like a jasper stone, clear as crystal; 21:12: And had a wall great and high, and had twelve gates, and at the gates twelve angels, and names written thereon, which are the names of the twelve tribes of the children of Israel: 21:13: On the east three gates; on the north three gates; on the south three gatesM ; and on the west three gates. 21:14: And the wall of the city had twelve foundations, and in them the names of the twelve apostles of the Lamb. 21:15: And he that talked with me had a golden reed to measure the city, and the gates thereof, and the wall thereof. 21:16: And the city lieth foursquare, and the length is as large as the breadth: and he measured the city with the reed, twelve thousand furlongs. The length and the breadth and the height of it are equal. 21:17: And he measured the wall thereof, an hundredM and forty and four cubits, according to the measure of a man, that is, of the angel. 21:18: And the building of the wall of it was of jasper: and the city was pure gold, like unto clear glass. 21:19: And the foundations of the wall of the city were garnished with all manner of precious stones. The first foundation was jasper; the second, sapphire; the third, a chalcedony; the fourth, an emerald; 21:20: The fifth, sardonyx; the sixth, sardius; the seventh, chrysolite; the eighth, beryl; the ninth, a topaz; the tentM h, a chrysoprasus; the eleventh, a jacinth; the twelfth, an amethyst. 21:21: And the twelve gates were twelve pearls; every several gate was of one pearl: and the street of the city was pure gold, as it were transparent glass. 21:22: And I saw no temple therein: for the Lord God Almighty and the Lamb are the temple of it. 21:23: And the city had no need of the sun, neither of the moon, to shine in it: for the glory of God did lighten it, and the Lamb is the light thereof. 21:24: And the nations of them which are saM ved shall walk in the light of it: and the kings of the earth do bring their glory and honour into it. 21:25: And the gates of it shall not be shut at all by day: for there shall be no night there. 21:26: And they shall bring the glory and honour of the nations into it. 21:27: And there shall in no wise enter into it any thing that defileth, neither whatsoever worketh abomination, or maketh a lie: but they which are written in the Lamb's book of life. 22:1: And he shewed me a pure river of water of lifeM , clear as crystal, proceeding out of the throne of God and of the Lamb. 22:2: In the midst of the street of it, and on either side of the river, was there the tree of life, which bare twelve manner of fruits, and yielded her fruit every month: and the leaves of the tree were for the healing of the nations. 22:3: And there shall be no more curse: but the throne of God and of the Lamb shall be in it; and his servants shall serve him: 22:4: And they shall see his face; and his name shall be in their foreheads. And there shall be no night there; and they need no candle, neither light of the sun; for the Lord God giveth them light: and they shall reign for ever and ever. 22:6: And he said unto me, These sayings are faithful and true: and the Lord God of the holy prophets sent his angel to shew unto his servants the things which must shortly be done. 22:7: Behold, I come quickly: blessed is he that keepeth the sayings of the prophecy of this book. 22:8: And I John saw these things, and heard them. And when I had heard and sM een, I fell down to worship before the feet of the angel which shewed me these things. 22:9: Then saith he unto me, See thou do it not: for I am thy fellowservant, and of thy brethren the prophets, and of them which keep the sayings of this book: worship God. 22:10: And he saith unto me, Seal not the sayings of the prophecy of this book: for the time is at hand. 22:11: He that is unjust, let him be unjust still: and he which is filthy, let him be filthy still: and he that is righteous, let him be righteous still: aM nd he that is holy, let him be holy still. 22:12: And, behold, I come quickly; and my reward is with me, to give every man according as his work shall be. 22:13: I am Alpha and Omega, the beginning and the end, the first and the last. 22:14: Blessed are they that do his commandments, that they may have right to the tree of life, and may enter in through the gates into the city. 22:15: For without are dogs, and sorcerers, and whoremongers, and murderers, and idolaters, and whosoever loveth and maketh a lie. Jesus have sent mine angel to testify unto you these things in the churches. I am the root and the offspring of David, and the bright and morning star. 22:17: And the Spirit and the bride say, Come. And let him that heareth say, Come. And let him that is athirst come. And whosoever will, let him take the water of life freely. 22:18: For I testify unto every man that heareth the words of the prophecy of this book, If any man shall add unto these things, God shall add unto him the plagues that are written in this boM 22:19: And if any man shall take away from the words of the book of this prophecy, God shall take away his part out of the book of life, and out of the holy city, and from the things which are written in this book. 22:20: He which testifieth these things saith, Surely I come quickly. Amen. Even so, come, Lord Jesus. 22:21: The grace of our Lord Jesus Christ be with you all. Amen.h! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 long live the kingh! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 0UEDBKVAAwQl4hiRl93BboVZ+tg/S79rE49/9elxLyGllNKpZ7877iXU0kEDBKVAAwQl4mhJEVvkN+Oveny14nsN911dfaP/aefj/2wZxWXcbYiyTh00QFAKNEBQIo4BFPFESp3vJ+xlh0bV6wBW00EDBKVAAwQl4hhAHk8UsUUvkUXV62Z1FwdQTwcNEJQOegDdTvYV3/S9nqJzvvL2zl2+0uNPDb44YOLpoAGCUqABghJxNJRHEfseWv+5t23aWI6ffP/xcnzzg7euOX7zg92fC8wWHTRAUAo0QFAijh6sjByy4799Ojt+65rnpiy2qIsqqo6LNYCUdNAAYSnQAEGJOHogngDGQQcNEJQCDRCUAg0QlAINEJSThMBQHTp0qPL49t17RryS9UVcpw4aICgFGiComYo48o8qjx15uPPA0tIYVjMeB544vubY4uLiGFZClfzvIloEwOjpoAGCUqABgrps++49r4x7EQCspYMGCEqBBghKgQYISoEGCEqBBghKgQYIM SoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYISoEGCEqBBghKgQYI6v8BwuonQTaSq5YAAAAASUVORK5CYII=" class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"]M ,["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.M length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(brickHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop)M ;context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>canvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,padM dle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(M function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddle.y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 " class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","G","G","G","G","G","GM ","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(brickHeight+brickGap)*aM ,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>canvas.width-wallSizeM ){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(ball.y+ball.height-bM all.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddle.y,paddle.width,paddMW le.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! text/plain;charset=utf-8 long live the kingh! text/html;charset=utf-8 <!--- TEWZ1.ETH https://www.www.tewz1.com https://opensea.io/tewz DUST 1AHV2TSdVsydxx2eSMyxKg6HfAgXAKNafW https://www.twitter.com/tewz1 https://tewz.cent.co/ TEWZ1.ETH <pre> ...',,,,,'.. .';:ccllloolollcc;,,.. .',;,;;;;;;,''.. .';cllllllllllllllllloolc:,. .';;cloollllllllllcc;. .,colllllllllllllllllllllllllc;.'collllllllllllllllllll,.M .;llllllllllllllcccc:::::cclollloc,:llllllllllllllllllllll, 'collllllllcc:;:c:;:;;;,''''''',;co:,colllllllllolooooloooo:. .,llllllll:::::cccllloollllllllc;,,,;;',:;;;;;;;;:;;;;::;;;;;,. .;llllllllc:cclllllllllllllllllllllooc;..,::::::ccccccccccc:::::;,''. .;olllllllllollllllllllllollcccccc::::;:;,.,cllllllllloolllllllllloool:'. .;lllllllllllllllllllllc:;:c:;,;;;;;,,,,,;:;,;;;cllc:;,,,;:::::;:::::::;;,. .,lllllllllllllllllolM c;;;;,',;:;;;;;:;;;;;:ccc:;,',;;'....',,;::::;,;;,',,''''. .',,:llllllllllllllc;,,,;;,;;;::clloooloooloolllllc;'',,;;::ccccclolllllcccc::;::'. .;cl:;clllllllllloolc;''',;;;clllllllllllolllllc:lllclc..coollc::;,;;,''''',ldddol:,'. .;lllc;:lllllllllll;;:::;;;cloolllcccccll:,,''',;lxKNNNNN0c,:clcllloxd, .;xNWNKkd;. .clllo:':ollllllllol;,,'',;:c:;:clodxkOd,.. .:OWMMMXod0XNWMMMWk. cXMMMM0; 'clllllc:clllllllllllllc:;;,',oO0XNWMMWk. GAME .xWMWdlXMMMMMMMO. PEPTRIS dMMNOc. llllllllllllllllllllllllc;:oxOKWMMO. OVER .oxl,;dkO0XWMMd ;ddc. 'cllllllllllllllllllllllllllll:;;,,,:lodc. ..',;;;,',,,,:lddc......''''',,,;''.. .clllllllllllllllllllllllllllllllc:;,;;;;;,,,,,,,,',;;;:::;;;;cc;;;;,,,',::;;;;:c::;;,. .:llllllllllllllllllllllllllllllllllllccc::;::;:;;:;;;:;;:cccllllooolcc::::::cccclllc:'. .,llllllllllllllllllllllllllllllllllllllllllloolloolc:;;::clllllllc::clolllllllcc:;;'. 'collllllllllllllllllllllllllllllllllllllllllM lcc:;;;;;ccllllllllllc:;;,..,;::::;;;,'. .:ollllllllllllllllllllllllllllllllllllllllll:;::;;clolllllllllllllllllc;,,:lllllllol;. 'collllllllllllllllllllllllllllllllllllllllllcclollllllllllllllllllllllllllllllllllllll,. .;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll;. .colllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll;. ..:ollllllllllllllllllllllllllllllcccccccclloolllllllllllllllllllllllM llllllllllllllllllllllc,. .,clllllllllllllllllllllllllllc;,;,,,,,,,,;;;;;:::cccclllllollllllllllllllllllllllllllllolc;'.. .;cllllllllllllllllllllllllll;'';:cccccccccc:;;;,,,,,,;,,,;;::::ccllllollollololllc::;;;;,;;;;'. .':lllllllllllllllllllllllll,':ccc;',;,'''',;;;;::ccccc:;;;;;,'',,,;;,,,;,;;;,;;;,,,;;;:ccc:,.. .:ollllllllllllllllllllllo:.,cccc:;:c:;;;;;;,'',,;;,'',;;;;;::ccccc:;;;;;;;;;:ccccccc:;;,'. ':olllllllllllllllllllccll;',;:c:;;;;;:ccccccccccc:;;;;;,,,,,;;;,,'''',,,,,,,,,'',,;,M 'colllllllllllllllllo;.:ooc;;;:;;,,;;;;;,,,;;;;::cccccccccccccc::;;;;:::::::::;;::cccc:' .clllllllllllllllllll;',:cllllooloololllc::;;;:::;,,,,,;;;;;;;;;;;;;;;;;;;;;;;::;;;,'. .,:cllllllllllllllllll;,'':lllllllllllllllloooolllccccc:;::;,;;;;;;;;;;,;;;,'..... ..,;:clolllllllllllllllclllllllllllllllllllllllllllllllllloolloolollool:'. .',;:cclllollllllllllllllllllllllllllllllllllllllllllllllllolc:;'. ...';,;cccccllllllllllllllllllllllM llllllllllllllolcc:;,.. ....'',;;;::::::ccccccccccccccccc:::;,,'.. ............... /pre>---> <title>PEPTRIS</title> <meta charset="UTF-8"> background: black; align-items: center; justify-content: center; border: 2px solid white; 0" height="560" id="game"></canvas> function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; function generateSequence() { const sequence = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; while (sequence.length) { const rand = getRandomInt(0, sequence.length - 1); const name = sequence.splice(rand, 1)[0]; tetrominoSequence.push(name); function getNextTetromino() { if (tetrominoSequence.length === 0) { generateSequence(); const name = tetrominoSequence.pop(); const matrix = tetrominos[name]; const col = playfield[0].length / 2 - Math.ceil(matrix[0].length / 2); const row = name === 'I' ? -1 : -2; name: name, matrix: matrix, row: row, col: col function rotate(matrix) { const N = matrix.length - 1; const result = matrix.map((row, i) => row.map((val, j) => matrix[N - j][i]) function isValidMove(matrix, cM for (let row = 0; row < matrix.length; row++) { for (let col = 0; col < matrix[row].length; col++) { if (matrix[row][col] && ( cellCol + col < 0 || cellCol + col >= playfield[0].length || cellRow + row >= playfield.length || playfield[cellRow + row][cellCol + col]) return false; function placeTetromino() { for (let row = 0; row < tetromino.matrix.length; row++) { for (let col = 0; col < tetromino.matrix[row].length; col++) { if (tetromino.matrix[row][col]) { if (tetromino.row + row < 0) { return showGameOver(); playfield[tetromino.row + row][tetromino.col + col] = tetromino.name; for (let row = playfield.length - 1; row >= 0; ) { if (playfield[row].every(cell => !!cell)) { for (let r = row; r >= 0; r--) { for (let c = 0; c < playfield[r].length; c++) { playfield[r][c] = playfield[rM tetromino = getNextTetromino(); function showGameOver() { cancelAnimationFrame(rAF); context.fillStyle = 'black'; context.globalAlpha = 0.75; context.fillRect(0, canvas.height / 2 - 30, canvas.width, 60); context.globalAlpha = 1; context.fillStyle = 'white'; context.font = '36px Futura'; context.textAlign = 'center'; context.textBaseline = 'middle'; context.fillText('PEPTRIS', canvas.width / 2, canvas.heM const canvas = document.getElementById('game'); const context = canvas.getContext('2d'); const tetrominoSequence = []; const playfield = []; for (let row = -2; row < 14; row++) { playfield[row] = []; for (let col = 1; col < 10; col++) { playfield[row][col] = 0; const tetrominos = { let tetromino = getNextTetromino(); let gameOver = false; rAF = requestAnimationFrame(loop); context.clearRect(0,0,canvas.width,canvas.height); r (let row = 0; row < 14; row++) { for (let col = 0; col < 10; col++) { if (playfield[row][col]) { const name = playfield[row][col]; context.fillStyle = colors[name]; context.fillRect(col * grid, row * grid, grid-1, grid-1); if (++count > 35) { tetromino.row++; if (!isValidMove(tetromino.matrix, tetromino.row, tetromino.col)) { tetromino.row--; placeTetromino(); Style = colors[tetromino.name]; for (let row = 0; row < tetromino.matrix.length; row++) { for (let col = 0; col < tetromino.matrix[row].length; col++) { if (tetromino.matrix[row][col]) { context.fillRect((tetromino.col + col) * grid, (tetromino.row + row) * grid, grid-1, grid-1); document.addEventListener('keydown', function(e) { if (gameOver) return; if (e.which === 37 || e.which === 39) { const col = e.which === 37 ? tetromino.col - 1 : tetromino.col + 1; if (isValidMove(tetromino.matrix, tetromino.row, col)) { tetromino.col = col; if (e.which === 38) { const matrix = rotate(tetromino.matrix); if (isValidMove(matrix, tetromino.row, tetromino.col)) { tetromino.matrix = matrix; if(e.which === 40) { const row = tetromino.row + 1; if (!isValidMove(tetromino.matrix, row, tetromino.col)) { tetromino.row = row - 1; placeTetromino(); tetromino.row = row;F rAF = requestAnimationFrame(loop); text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! //33//@@@@@@@@@@@@@@@ #0+.'''.+550055@@?@@@@@@@@@@@@ text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! OiCCPPhotoshop ICC profile {PLTEYP#liaHFA$# @\@/F/:F text/plain;charset=utf-8 long live the kingh! Copyright (c) 1998 Hewlett-Packard Company IEC http://www.iec.ch IEC http://www.iec.ch .IEC 61966-2.1 Default RGB colour space - sRGB .IEC 61966-2.1 Default RGB colour space - sRGB ,Reference Viewing Condition in IEC61966-2.1 ,Reference Viewing Condition in IEC61966-2.1 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://M www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:dd2abdae-a652-4fc0-8f2a-8c8d13dd9e3d" xmpMM:InstanceID="xmp.iid:c24fca4e-337d-4b63-8e2a-a386595f2b79" xmpMM:OriginalDocumentID="xmp.did:da032d73-1edb-4e39-b95d-e5074d2dc111" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676407733635617" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:48:49+11:M 00" xmp:ModifyDate="2023:02:15T07:48:49+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:14f6b236-9262-453b-8418-da3afd639048" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:48:53"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M@ <?xpacket end="w"?>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 long live the kingh! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/19M 99/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:177fb65d-818e-4f6d-b084-9fd483983484" xmpMM:InstanceID="xmp.iid:0a73b8dc-cca2-4b28-827d-87f25a0df785" xmpMM:OriginalDocumentID="xmp.did:c733fd61-66e3-4bed-M b0d7-87192e1e49af" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676407793653875" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:49:50+11:00" xmp:ModifyDate="2023:02:15T07:49:50+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:079a9c0f-4fd7-481e-bc35-2a550b955a16" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:49:53"/> </rdf:Seq> </xmpMM:History> </M rdf:Description> </rdf:RDF> </x:xmpmeta> M M M <?xpacket end="w"?>h! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 AUTHORIZED KING JAMES VERSION 1:1: Paul, an apostle of Jesus Christ by the will of God, to the saints which are at Ephesus, and to the faithful in Christ Jesus: 1:2: Grace be to you, and peace, from God our Father, and from the Lord Jesus Christ. 1:3: Blessed be the God and Father of our Lord Jesus Christ, who hath blessed us with all spiritual blessings in heavenly places in Christ: 1:4: According as he hath chosen us in him before the foundation of the world, tM hat we should be holy and without blame before him in love: 1:5: Having predestinated us unto the adoption of children by Jesus Christ to himself, according to the good pleasure of his will, 1:6: To the praise of the glory of his grace, wherein he hath made us accepted in the beloved. 1:7: In whom we have redemption through his blood, the forgiveness of sins, according to the riches of his grace; 1:8: Wherein he hath abounded toward us in all wisdom and prudence; 1:9: Having made known unto us the mystery of his wiM ll, according to his good pleasure which he hath purposed in himself: 1:10: That in the dispensation of the fulness of times he might gather together in one all things in Christ, both which are in heaven, and which are on earth; even in him: 1:11: In whom also we have obtained an inheritance, being predestinated according to the purpose of him who worketh all things after the counsel of his own will: 1:12: That we should be to the praise of his glory, who first trusted in Christ. 1:13: In whom ye also trusted, afteM r that ye heard the word of truth, the gospel of your salvation: in whom also after that ye believed, ye were sealed with that holy Spirit of promise, 1:14: Which is the earnest of our inheritance until the redemption of the purchased possession, unto the praise of his glory. 1:15: Wherefore I also, after I heard of your faith in the Lord Jesus, and love unto all the saints, 1:16: Cease not to give thanks for you, making mention of you in my prayers; 1:17: That the God of our Lord Jesus Christ, the Father of glory,M may give unto you the spirit of wisdom and revelation in the knowledge of him: 1:18: The eyes of your understanding being enlightened; that ye may know what is the hope of his calling, and what the riches of the glory of his inheritance in the saints, 1:19: And what is the exceeding greatness of his power to us-ward who believe, according to the working of his mighty power, 1:20: Which he wrought in Christ, when he raised him from the dead, and set him at his own right hand in the heavenly places, all principality, and power, and might, and dominion, and every name that is named, not only in this world, but also in that which is to come: 1:22: And hath put all things under his feet, and gave him to be the head over all things to the church, 1:23: Which is his body, the fulness of him that filleth all in all. 2:1: And you hath he quickened, who were dead in trespasses and sins; 2:2: Wherein in time past ye walked according to the course of this world, according to the prince of the power of the airM , the spirit that now worketh in the children of disobedience: 2:3: Among whom also we all had our conversation in times past in the lusts of our flesh, fulfilling the desires of the flesh and of the mind; and were by nature the children of wrath, even as others. 2:4: But God, who is rich in mercy, for his great love wherewith he loved us, 2:5: Even when we were dead in sins, hath quickened us together with Christ, (by grace ye are saved;) 2:6: And hath raised us up together, and made us sit together in heavenly plM aces in Christ Jesus: 2:7: That in the ages to come he might shew the exceeding riches of his grace in his kindness toward us through Christ Jesus. 2:8: For by grace are ye saved through faith; and that not of yourselves: it is the gift of God: 2:9: Not of works, lest any man should boast. 2:10: For we are his workmanship, created in Christ Jesus unto good works, which God hath before ordained that we should walk in them. 2:11: Wherefore remember, that ye being in time past Gentiles in the flesh, who are called UncM ircumcision by that which is called the Circumcision in the flesh made by hands; 2:12: That at that time ye were without Christ, being aliens from the commonwealth of Israel, and strangers from the covenants of promise, having no hope, and without God in the world: 2:13: But now in Christ Jesus ye who sometimes were far off are made nigh by the blood of Christ. 2:14: For he is our peace, who hath made both one, and hath broken down the middle wall of partition between us; 2:15: Having abolished in his flesh the enmM ity, even the law of commandments contained in ordinances; for to make in himself of twain one new man, so making peace; 2:16: And that he might reconcile both unto God in one body by the cross, having slain the enmity thereby: 2:17: And came and preached peace to you which were afar off, and to them that were nigh. 2:18: For through him we both have access by one Spirit unto the Father. 2:19: Now therefore ye are no more strangers and foreigners, but fellowcitizens with the saints, and of the household of God; 0: And are built upon the foundation of the apostles and prophets, Jesus Christ himself being the chief corner stone; 2:21: In whom all the building fitly framed together groweth unto an holy temple in the Lord: 2:22: In whom ye also are builded together for an habitation of God through the Spirit. 3:1: For this cause I Paul, the prisoner of Jesus Christ for you Gentiles, 3:2: If ye have heard of the dispensation of the grace of God which is given me to you-ward: 3:3: How that by revelation he made knownM unto me the mystery; (as I wrote afore in few words, 3:4: Whereby, when ye read, ye may understand my knowledge in the mystery of Christ) 3:5: Which in other ages was not made known unto the sons of men, as it is now revealed unto his holy apostles and prophets by the Spirit; 3:6: That the Gentiles should be fellowheirs, and of the same body, and partakers of his promise in Christ by the gospel: 3:7: Whereof I was made a minister, according to the gift of the grace of God given unto me by the effectual working of M 3:8: Unto me, who am less than the least of all saints, is this grace given, that I should preach among the Gentiles the unsearchable riches of Christ; 3:9: And to make all men see what is the fellowship of the mystery, which from the beginning of the world hath been hid in God, who created all things by Jesus Christ: 3:10: To the intent that now unto the principalities and powers in heavenly places might be known by the church the manifold wisdom of God, 3:11: According to the eternal purpose which he pM urposed in Christ Jesus our Lord: 3:12: In whom we have boldness and access with confidence by the faith of him. 3:13: Wherefore I desire that ye faint not at my tribulations for you, which is your glory. 3:14: For this cause I bow my knees unto the Father of our Lord Jesus Christ, 3:15: Of whom the whole family in heaven and earth is named, 3:16: That he would grant you, according to the riches of his glory, to be strengthened with might by his Spirit in the inner man; 3:17: That Christ may dwell in your hearts byM faith; that ye, being rooted and grounded in love, 3:18: May be able to comprehend with all saints what is the breadth, and length, and depth, and height; 3:19: And to know the love of Christ, which passeth knowledge, that ye might be filled with all the fulness of God. 3:20: Now unto him that is able to do exceeding abundantly above all that we ask or think, according to the power that worketh in us, 3:21: Unto him be glory in the church by Christ Jesus throughout all ages, world without end. Amen. : I therefore, the prisoner of the Lord, beseech you that ye walk worthy of the vocation wherewith ye are called, 4:2: With all lowliness and meekness, with longsuffering, forbearing one another in love; 4:3: Endeavouring to keep the unity of the Spirit in the bond of peace. 4:4: There is one body, and one Spirit, even as ye are called in one hope of your calling; 4:5: One Lord, one faith, one baptism, 4:6: One God and Father of all, who is above all, and through all, and in you all. 4:7: But unto every one of us iM s given grace according to the measure of the gift of Christ. 4:8: Wherefore he saith, When he ascended up on high, he led captivity captive, and gave gifts unto men. 4:9: (Now that he ascended, what is it but that he also descended first into the lower parts of the earth? 4:10: He that descended is the same also that ascended up far above all heavens, that he might fill all things.) 4:11: And he gave some, apostles; and some, prophets; and some, evangelists; and some, pastors and teachers; 4:12: For the perfectingM of the saints, for the work of the ministry, for the edifying of the body of Christ: 4:13: Till we all come in the unity of the faith, and of the knowledge of the Son of God, unto a perfect man, unto the measure of the stature of the fulness of Christ: 4:14: That we henceforth be no more children, tossed to and fro, and carried about with every wind of doctrine, by the sleight of men, and cunning craftiness, whereby they lie in wait to deceive; 4:15: But speaking the truth in love, may grow up into him in all thinM gs, which is the head, even Christ: 4:16: From whom the whole body fitly joined together and compacted by that which every joint supplieth, according to the effectual working in the measure of every part, maketh increase of the body unto the edifying of itself in love. 4:17: This I say therefore, and testify in the Lord, that ye henceforth walk not as other Gentiles walk, in the vanity of their mind, 4:18: Having the understanding darkened, being alienated from the life of God through the ignorance that is in them,M because of the blindness of their heart: 4:19: Who being past feeling have given themselves over unto lasciviousness, to work all uncleanness with greediness. 4:20: But ye have not so learned Christ; 4:21: If so be that ye have heard him, and have been taught by him, as the truth is in Jesus: 4:22: That ye put off concerning the former conversation the old man, which is corrupt according to the deceitful lusts; 4:23: And be renewed in the spirit of your mind; 4:24: And that ye put on the new man, which after God iM s created in righteousness and true holiness. 4:25: Wherefore putting away lying, speak every man truth with his neighbour: for we are members one of another. 4:26: Be ye angry, and sin not: let not the sun go down upon your wrath: 4:27: Neither give place to the devil. 4:28: Let him that stole steal no more: but rather let him labour, working with his hands the thing which is good, that he may have to give to him that needeth. 4:29: Let no corrupt communication proceed out of your mouth, but that which is good to M the use of edifying, that it may minister grace unto the hearers. 4:30: And grieve not the holy Spirit of God, whereby ye are sealed unto the day of redemption. 4:31: Let all bitterness, and wrath, and anger, and clamour, and evil speaking, be put away from you, with all malice: 4:32: And be ye kind one to another, tenderhearted, forgiving one another, even as God for Christ's sake hath forgiven you. 5:1: Be ye therefore followers of God, as dear children; 5:2: And walk in love, as Christ also hath lovedM us, and hath given himself for us an offering and a sacrifice to God for a sweetsmelling savour. 5:3: But fornication, and all uncleanness, or covetousness, let it not be once named among you, as becometh saints; 5:4: Neither filthiness, nor foolish talking, nor jesting, which are not convenient: but rather giving of thanks. 5:5: For this ye know, that no whoremonger, nor unclean person, nor covetous man, who is an idolater, hath any inheritance in the kingdom of Christ and of God. 5:6: Let no man deceive you withM vain words: for because of these things cometh the wrath of God upon the children of disobedience. 5:7: Be not ye therefore partakers with them. 5:8: For ye were sometimes darkness, but now are ye light in the Lord: walk as children of light: 5:9: (For the fruit of the Spirit is in all goodness and righteousness and truth;) 5:10: Proving what is acceptable unto the Lord. 5:11: And have no fellowship with the unfruitful works of darkness, but rather reprove them. 5:12: For it is a shame even to speak of those thingM s which are done of them in secret. 5:13: But all things that are reproved are made manifest by the light: for whatsoever doth make manifest is light. 5:14: Wherefore he saith, Awake thou that sleepest, and arise from the dead, and Christ shall give thee light. 5:15: See then that ye walk circumspectly, not as fools, but as wise, 5:16: Redeeming the time, because the days are evil. 5:17: Wherefore be ye not unwise, but understanding what the will of the Lord is. 5:18: And be not drunk with wine, wherein is excess; M but be filled with the Spirit; 5:19: Speaking to yourselves in psalms and hymns and spiritual songs, singing and making melody in your heart to the Lord; 5:20: Giving thanks always for all things unto God and the Father in the name of our Lord Jesus Christ; 5:21: Submitting yourselves one to another in the fear of God. 5:22: Wives, submit yourselves unto your own husbands, as unto the Lord. 5:23: For the husband is the head of the wife, even as Christ is the head of the church: and he is the saviour of the body. 24: Therefore as the church is subject unto Christ, so let the wives be to their own husbands in every thing. 5:25: Husbands, love your wives, even as Christ also loved the church, and gave himself for it; 5:26: That he might sanctify and cleanse it with the washing of water by the word, 5:27: That he might present it to himself a glorious church, not having spot, or wrinkle, or any such thing; but that it should be holy and without blemish. 5:28: So ought men to love their wives as their own bodies. He that lovethM his wife loveth himself. 5:29: For no man ever yet hated his own flesh; but nourisheth and cherisheth it, even as the Lord the church: 5:30: For we are members of his body, of his flesh, and of his bones. 5:31: For this cause shall a man leave his father and mother, and shall be joined unto his wife, and they two shall be one flesh. 5:32: This is a great mystery: but I speak concerning Christ and the church. 5:33: Nevertheless let every one of you in particular so love his wife even as himself; and the wife see thM at she reverence her husband. 6:1: Children, obey your parents in the Lord: for this is right. 6:2: Honour thy father and mother; (which is the first commandment with promise;) 6:3: That it may be well with thee, and thou mayest live long on the earth. 6:4: And, ye fathers, provoke not your children to wrath: but bring them up in the nurture and admonition of the Lord. 6:5: Servants, be obedient to them that are your masters according to the flesh, with fear and trembling, in singleness of your heart, asM 6:6: Not with eyeservice, as menpleasers; but as the servants of Christ, doing the will of God from the heart; 6:7: With good will doing service, as to the Lord, and not to men: 6:8: Knowing that whatsoever good thing any man doeth, the same shall he receive of the Lord, whether he be bond or free. 6:9: And, ye masters, do the same things unto them, forbearing threatening: knowing that your Master also is in heaven; neither is there respect of persons with him. 6:10: Finally, my brethren, be strong inM the Lord, and in the power of his might. 6:11: Put on the whole armour of God, that ye may be able to stand against the wiles of the devil. 6:12: For we wrestle not against flesh and blood, but against principalities, against powers, against the rulers of the darkness of this world, against spiritual wickedness in high places. 6:13: Wherefore take unto you the whole armour of God, that ye may be able to withstand in the evil day, and having done all, to stand. 6:14: Stand therefore, having your loins girt about wiM th truth, and having on the breastplate of righteousness; 6:15: And your feet shod with the preparation of the gospel of peace; 6:16: Above all, taking the shield of faith, wherewith ye shall be able to quench all the fiery darts of the wicked. 6:17: And take the helmet of salvation, and the sword of the Spirit, which is the word of God: 6:18: Praying always with all prayer and supplication in the Spirit, and watching thereunto with all perseverance and supplication for all saints; 6:19: And for me, that utterance M may be given unto me, that I may open my mouth boldly, to make known the mystery of the gospel, 6:20: For which I am an ambassador in bonds: that therein I may speak boldly, as I ought to speak. 6:21: But that ye also may know my affairs, and how I do, Tychicus, a beloved brother and faithful minister in the Lord, shall make known to you all things: 6:22: Whom I have sent unto you for the same purpose, that ye might know our affairs, and that he might comfort your hearts. 6:23: Peace be to the brethren, and love wiL th faith, from God the Father and the Lord Jesus Christ. 6:24: Grace be with all them that love our Lord Jesus Christ in sincerity. Amen.h! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 AUTHORIZED KING JAMES VERSION 1:1: Paul, a servant of Jesus Christ, called to be an apostle, separated unto the gospel of God, 1:2: (Which he had promised afore by his prophets in the holy scriptures,) 1:3: Concerning his Son Jesus Christ our Lord, which was made of the seed of David according to the flesh; 1:4: And declared to be the Son of God with power, according to the spirit of holiness, by the resurrection from the dead: 1:5: By whom we have received grace anM d apostleship, for obedience to the faith among all nations, for his name: 1:6: Among whom are ye also the called of Jesus Christ: 1:7: To all that be in Rome, beloved of God, called to be saints: Grace to you and peace from God our Father, and the Lord Jesus Christ. 1:8: First, I thank my God through Jesus Christ for you all, that your faith is spoken of throughout the whole world. 1:9: For God is my witness, whom I serve with my spirit in the gospel of his Son, that without ceasing I make mention of you always inM 1:10: Making request, if by any means now at length I might have a prosperous journey by the will of God to come unto you. 1:11: For I long to see you, that I may impart unto you some spiritual gift, to the end ye may be established; 1:12: That is, that I may be comforted together with you by the mutual faith both of you and me. 1:13: Now I would not have you ignorant, brethren, that oftentimes I purposed to come unto you, (but was let hitherto,) that I might have some fruit among you also, even as amoM 1:14: I am debtor both to the Greeks, and to the Barbarians; both to the wise, and to the unwise. 1:15: So, as much as in me is, I am ready to preach the gospel to you that are at Rome also. 1:16: For I am not ashamed of the gospel of Christ: for it is the power of God unto salvation to every one that believeth; to the Jew first, and also to the Greek. 1:17: For therein is the righteousness of God revealed from faith to faith: as it is written, The just shall live by faith. 1:18: For the wrath ofM God is revealed from heaven against all ungodliness and unrighteousness of men, who hold the truth in unrighteousness; 1:19: Because that which may be known of God is manifest in them; for God hath shewed it unto them. 1:20: For the invisible things of him from the creation of the world are clearly seen, being understood by the things that are made, even his eternal power and Godhead; so that they are without excuse: 1:21: Because that, when they knew God, they glorified him not as God, neither were thankful; but M became vain in their imaginations, and their foolish heart was darkened. 1:22: Professing themselves to be wise, they became fools, 1:23: And changed the glory of the uncorruptible God into an image made like to corruptible man, and to birds, and fourfooted beasts, and creeping things. 1:24: Wherefore God also gave them up to uncleanness through the lusts of their own hearts, to dishonour their own bodies between themselves: 1:25: Who changed the truth of God into a lie, and worshipped and served the creature more M than the Creator, who is blessed for ever. Amen. 1:26: For this cause God gave them up unto vile affections: for even their women did change the natural use into that which is against nature: 1:27: And likewise also the men, leaving the natural use of the woman, burned in their lust one toward another; men with men working that which is unseemly, and receiving in themselves that recompence of their error which was meet. 1:28: And even as they did not like to retain God in their knowledge, God gave them over to a reM probate mind, to do those things which are not convenient; 1:29: Being filled with all unrighteousness, fornication, wickedness, covetousness, maliciousness; full of envy, murder, debate, deceit, malignity; whisperers, 1:30: Backbiters, haters of God, despiteful, proud, boasters, inventors of evil things, disobedient to parents, 1:31: Without understanding, covenantbreakers, without natural affection, implacable, unmerciful: 1:32: Who knowing the judgment of God, that they which commit such things are worthy of deaM th, not only do the same, but have pleasure in them that do them. 2:1: Therefore thou art inexcusable, O man, whosoever thou art that judgest: for wherein thou judgest another, thou condemnest thyself; for thou that judgest doest the same things. 2:2: But we are sure that the judgment of God is according to truth against them which commit such things. 2:3: And thinkest thou this, O man, that judgest them which do such things, and doest the same, that thou shalt escape the judgment of God? st thou the riches of his goodness and forbearance and longsuffering; not knowing that the goodness of God leadeth thee to repentance? 2:5: But after thy hardness and impenitent heart treasurest up unto thyself wrath against the day of wrath and revelation of the righteous judgment of God; 2:6: Who will render to every man according to his deeds: 2:7: To them who by patient continuance in well doing seek for glory and honour and immortality, eternal life: 2:8: But unto them that are contentious, and do not obey theM truth, but obey unrighteousness, indignation and wrath, 2:9: Tribulation and anguish, upon every soul of man that doeth evil, of the Jew first, and also of the Gentile; 2:10: But glory, honour, and peace, to every man that worketh good, to the Jew first, and also to the Gentile: 2:11: For there is no respect of persons with God. 2:12: For as many as have sinned without law shall also perish without law: and as many as have sinned in the law shall be judged by the law; 2:13: (For not the hearers of the law are justM before God, but the doers of the law shall be justified. 2:14: For when the Gentiles, which have not the law, do by nature the things contained in the law, these, having not the law, are a law unto themselves: 2:15: Which shew the work of the law written in their hearts, their conscience also bearing witness, and their thoughts the mean while accusing or else excusing one another;) 2:16: In the day when God shall judge the secrets of men by Jesus Christ according to my gospel. 2:17: Behold, thou art called a Jew, M and restest in the law, and makest thy boast of God, 2:18: And knowest his will, and approvest the things that are more excellent, being instructed out of the law; 2:19: And art confident that thou thyself art a guide of the blind, a light of them which are in darkness, 2:20: An instructor of the foolish, a teacher of babes, which hast the form of knowledge and of the truth in the law. 2:21: Thou therefore which teachest another, teachest thou not thyself? thou that preachest a man should not steal, dost thou stealM 2:22: Thou that sayest a man should not commit adultery, dost thou commit adultery? thou that abhorrest idols, dost thou commit sacrilege? 2:23: Thou that makest thy boast of the law, through breaking the law dishonourest thou God? 2:24: For the name of God is blasphemed among the Gentiles through you, as it is written. 2:25: For circumcision verily profiteth, if thou keep the law: but if thou be a breaker of the law, thy circumcision is made uncircumcision. 2:26: Therefore if the uncircumcision keep the righteouM sness of the law, shall not his uncircumcision be counted for circumcision? 2:27: And shall not uncircumcision which is by nature, if it fulfil the law, judge thee, who by the letter and circumcision dost transgress the law? 2:28: For he is not a Jew, which is one outwardly; neither is that circumcision, which is outward in the flesh: 2:29: But he is a Jew, which is one inwardly; and circumcision is that of the heart, in the spirit, and not in the letter; whose praise is not of men, but of God. advantage then hath the Jew? or what profit is there of circumcision? 3:2: Much every way: chiefly, because that unto them were committed the oracles of God. 3:3: For what if some did not believe? shall their unbelief make the faith of God without effect? 3:4: God forbid: yea, let God be true, but every man a liar; as it is written, That thou mightest be justified in thy sayings, and mightest overcome when thou art judged. 3:5: But if our unrighteousness commend the righteousness of God, what shall we say? Is God M unrighteous who taketh vengeance? (I speak as a man) 3:6: God forbid: for then how shall God judge the world? 3:7: For if the truth of God hath more abounded through my lie unto his glory; why yet am I also judged as a sinner? 3:8: And not rather, (as we be slanderously reported, and as some affirm that we say,) Let us do evil, that good may come? whose damnation is just. 3:9: What then? are we better than they? No, in no wise: for we have before proved both Jews and Gentiles, that they are all under sin; it is written, There is none righteous, no, not one: 3:11: There is none that understandeth, there is none that seeketh after God. 3:12: They are all gone out of the way, they are together become unprofitable; there is none that doeth good, no, not one. 3:13: Their throat is an open sepulchre; with their tongues they have used deceit; the poison of asps is under their lips: 3:14: Whose mouth is full of cursing and bitterness: 3:15: Their feet are swift to shed blood: 3:16: Destruction and misery are in their ways: 3:17: And the way of peace have they not known: 3:18: There is no fear of God before their eyes. 3:19: Now we know that what things soever the law saith, it saith to them who are under the law: that every mouth may be stopped, and all the world may become guilty before God. 3:20: Therefore by the deeds of the law there shall no flesh be justified in his sight: for by the law is the knowledge of sin. 3:21: But now the righteousness of God without the law is manifested, being witnessed by the law and the prophets; 22: Even the righteousness of God which is by faith of Jesus Christ unto all and upon all them that believe: for there is no difference: 3:23: For all have sinned, and come short of the glory of God; 3:24: Being justified freely by his grace through the redemption that is in Christ Jesus: 3:25: Whom God hath set forth to be a propitiation through faith in his blood, to declare his righteousness for the remission of sins that are past, through the forbearance of God; 3:26: To declare, I say, at this time his righteoM usness: that he might be just, and the justifier of him which believeth in Jesus. 3:27: Where is boasting then? It is excluded. By what law? of works? Nay: but by the law of faith. 3:28: Therefore we conclude that a man is justified by faith without the deeds of the law. 3:29: Is he the God of the Jews only? is he not also of the Gentiles? Yes, of the Gentiles also: 3:30: Seeing it is one God, which shall justify the circumcision by faith, and uncircumcision through faith. 3:31: Do we then make void the law throughM faith? God forbid: yea, we establish the law. 4:1: What shall we say then that Abraham our father, as pertaining to the flesh, hath found? 4:2: For if Abraham were justified by works, he hath whereof to glory; but not before God. 4:3: For what saith the scripture? Abraham believed God, and it was counted unto him for righteousness. 4:4: Now to him that worketh is the reward not reckoned of grace, but of debt. 4:5: But to him that worketh not, but believeth on him that justifieth the ungodly, his faith iM s counted for righteousness. 4:6: Even as David also describeth the blessedness of the man, unto whom God imputeth righteousness without works, 4:7: Saying, Blessed are they whose iniquities are forgiven, and whose sins are covered. 4:8: Blessed is the man to whom the Lord will not impute sin. 4:9: Cometh this blessedness then upon the circumcision only, or upon the uncircumcision also? for we say that faith was reckoned to Abraham for righteousness. 4:10: How was it then reckoned? when he was in circumcision, or iM n uncircumcision? Not in circumcision, but in uncircumcision. 4:11: And he received the sign of circumcision, a seal of the righteousness of the faith which he had yet being uncircumcised: that he might be the father of all them that believe, though they be not circumcised; that righteousness might be imputed unto them also: 4:12: And the father of circumcision to them who are not of the circumcision only, but who also walk in the steps of that faith of our father Abraham, which he had being yet uncircumcised. : For the promise, that he should be the heir of the world, was not to Abraham, or to his seed, through the law, but through the righteousness of faith. 4:14: For if they which are of the law be heirs, faith is made void, and the promise made of none effect: 4:15: Because the law worketh wrath: for where no law is, there is no transgression. 4:16: Therefore it is of faith, that it might be by grace; to the end the promise might be sure to all the seed; not to that only which is of the law, but to that also which isM of the faith of Abraham; who is the father of us all, 4:17: (As it is written, I have made thee a father of many nations,) before him whom he believed, even God, who quickeneth the dead, and calleth those things which be not as though they were. 4:18: Who against hope believed in hope, that he might become the father of many nations, according to that which was spoken, So shall thy seed be. 4:19: And being not weak in faith, he considered not his own body now dead, when he was about an hundred years old, neither yM et the deadness of Sara's womb: 4:20: He staggered not at the promise of God through unbelief; but was strong in faith, giving glory to God; 4:21: And being fully persuaded that, what he had promised, he was able also to perform. 4:22: And therefore it was imputed to him for righteousness. 4:23: Now it was not written for his sake alone, that it was imputed to him; 4:24: But for us also, to whom it shall be imputed, if we believe on him that raised up Jesus our Lord from the dead; 4:25: Who was delivered for our ofM fences, and was raised again for our justification. 5:1: Therefore being justified by faith, we have peace with God through our Lord Jesus Christ: 5:2: By whom also we have access by faith into this grace wherein we stand, and rejoice in hope of the glory of God. 5:3: And not only so, but we glory in tribulations also: knowing that tribulation worketh patience; 5:4: And patience, experience; and experience, hope: 5:5: And hope maketh not ashamed; because the love of God is shed abroad in our hearts by thM e Holy Ghost which is given unto us. 5:6: For when we were yet without strength, in due time Christ died for the ungodly. 5:7: For scarcely for a righteous man will one die: yet peradventure for a good man some would even dare to die. 5:8: But God commendeth his love toward us, in that, while we were yet sinners, Christ died for us. 5:9: Much more then, being now justified by his blood, we shall be saved from wrath through him. 5:10: For if, when we were enemies, we were reconciled to God by the death of his Son, mM uch more, being reconciled, we shall be saved by his life. 5:11: And not only so, but we also joy in God through our Lord Jesus Christ, by whom we have now received the atonement. 5:12: Wherefore, as by one man sin entered into the world, and death by sin; and so death passed upon all men, for that all have sinned: 5:13: (For until the law sin was in the world: but sin is not imputed when there is no law. 5:14: Nevertheless death reigned from Adam to Moses, even over them that had not sinned after the similitude ofM Adam's transgression, who is the figure of him that was to come. 5:15: But not as the offence, so also is the free gift. For if through the offence of one many be dead, much more the grace of God, and the gift by grace, which is by one man, Jesus Christ, hath abounded unto many. 5:16: And not as it was by one that sinned, so is the gift: for the judgment was by one to condemnation, but the free gift is of many offences unto justification. 5:17: For if by one man's offence death reigned by one; much more they whichM receive abundance of grace and of the gift of righteousness shall reign in life by one, Jesus Christ.) 5:18: Therefore as by the offence of one judgment came upon all men to condemnation; even so by the righteousness of one the free gift came upon all men unto justification of life. 5:19: For as by one man's disobedience many were made sinners, so by the obedience of one shall many be made righteous. 5:20: Moreover the law entered, that the offence might abound. But where sin abounded, grace did much more abound: 5:21: That as sin hath reigned unto death, even so might grace reign through righteousness unto eternal life by Jesus Christ our Lord. 6:1: What shall we say then? Shall we continue in sin, that grace may abound? 6:2: God forbid. How shall we, that are dead to sin, live any longer therein? 6:3: Know ye not, that so many of us as were baptized into Jesus Christ were baptized into his death? 6:4: Therefore we are buried with him by baptism into death: that like as Christ was raised up from the dead by the M glory of the Father, even so we also should walk in newness of life. 6:5: For if we have been planted together in the likeness of his death, we shall be also in the likeness of his resurrection: 6:6: Knowing this, that our old man is crucified with him, that the body of sin might be destroyed, that henceforth we should not serve sin. 6:7: For he that is dead is freed from sin. 6:8: Now if we be dead with Christ, we believe that we shall also live with him: 6:9: Knowing that Christ being raised from the dead dieth nM o more; death hath no more dominion over him. 6:10: For in that he died, he died unto sin once: but in that he liveth, he liveth unto God. 6:11: Likewise reckon ye also yourselves to be dead indeed unto sin, but alive unto God through Jesus Christ our Lord. 6:12: Let not sin therefore reign in your mortal body, that ye should obey it in the lusts thereof. 6:13: Neither yield ye your members as instruments of unrighteousness unto sin: but yield yourselves unto God, as those that are alive from the dead, and your memM bers as instruments of righteousness unto God. 6:14: For sin shall not have dominion over you: for ye are not under the law, but under grace. 6:15: What then? shall we sin, because we are not under the law, but under grace? God forbid. 6:16: Know ye not, that to whom ye yield yourselves servants to obey, his servants ye are to whom ye obey; whether of sin unto death, or of obedience unto righteousness? 6:17: But God be thanked, that ye were the servants of sin, but ye have obeyed from the heart that form of doctrinM e which was delivered you. 6:18: Being then made free from sin, ye became the servants of righteousness. 6:19: I speak after the manner of men because of the infirmity of your flesh: for as ye have yielded your members servants to uncleanness and to iniquity unto iniquity; even so now yield your members servants to righteousness unto holiness. 6:20: For when ye were the servants of sin, ye were free from righteousness. 6:21: What fruit had ye then in those things whereof ye are now ashamed? for the end of those thiM 6:22: But now being made free from sin, and become servants to God, ye have your fruit unto holiness, and the end everlasting life. 6:23: For the wages of sin is death; but the gift of God is eternal life through Jesus Christ our Lord. 7:1: Know ye not, brethren, (for I speak to them that know the law,) how that the law hath dominion over a man as long as he liveth? 7:2: For the woman which hath an husband is bound by the law to her husband so long as he liveth; but if the husband be dead, M she is loosed from the law of her husband. 7:3: So then if, while her husband liveth, she be married to another man, she shall be called an adulteress: but if her husband be dead, she is free from that law; so that she is no adulteress, though she be married to another man. 7:4: Wherefore, my brethren, ye also are become dead to the law by the body of Christ; that ye should be married to another, even to him who is raised from the dead, that we should bring forth fruit unto God. 7:5: For when we were in the flesh, M the motions of sins, which were by the law, did work in our members to bring forth fruit unto death. 7:6: But now we are delivered from the law, that being dead wherein we were held; that we should serve in newness of spirit, and not in the oldness of the letter. 7:7: What shall we say then? Is the law sin? God forbid. Nay, I had not known sin, but by the law: for I had not known lust, except the law had said, Thou shalt not covet. 7:8: But sin, taking occasion by the commandment, wrought in me all manner of concupM iscence. For without the law sin was dead. 7:9: For I was alive without the law once: but when the commandment came, sin revived, and I died. 7:10: And the commandment, which was ordained to life, I found to be unto death. 7:11: For sin, taking occasion by the commandment, deceived me, and by it slew me. 7:12: Wherefore the law is holy, and the commandment holy, and just, and good. 7:13: Was then that which is good made death unto me? God forbid. But sin, that it might appear sin, working death in me by that which M is good; that sin by the commandment might become exceeding sinful. 7:14: For we know that the law is spiritual: but I am carnal, sold under sin. 7:15: For that which I do I allow not: for what I would, that do I not; but what I hate, that do I. 7:16: If then I do that which I would not, I consent unto the law that it is good. 7:17: Now then it is no more I that do it, but sin that dwelleth in me. 7:18: For I know that in me (that is, in my flesh,) dwelleth no good thing: for to will is present with me; but how to M perform that which is good I find not. 7:19: For the good that I would I do not: but the evil which I would not, that I do. 7:20: Now if I do that I would not, it is no more I that do it, but sin that dwelleth in me. 7:21: I find then a law, that, when I would do good, evil is present with me. 7:22: For I delight in the law of God after the inward man: 7:23: But I see another law in my members, warring against the law of my mind, and bringing me into captivity to the law of sin which is in my members. hed man that I am! who shall deliver me from the body of this death? 7:25: I thank God through Jesus Christ our Lord. So then with the mind I myself serve the law of God; but with the flesh the law of sin. 8:1: There is therefore now no condemnation to them which are in Christ Jesus, who walk not after the flesh, but after the Spirit. 8:2: For the law of the Spirit of life in Christ Jesus hath made me free from the law of sin and death. 8:3: For what the law could not do, in that it was weak through the M flesh, God sending his own Son in the likeness of sinful flesh, and for sin, condemned sin in the flesh: 8:4: That the righteousness of the law might be fulfilled in us, who walk not after the flesh, but after the Spirit. 8:5: For they that are after the flesh do mind the things of the flesh; but they that are after the Spirit the things of the Spirit. 8:6: For to be carnally minded is death; but to be spiritually minded is life and peace. 8:7: Because the carnal mind is enmity against God: for it is not subject toM the law of God, neither indeed can be. 8:8: So then they that are in the flesh cannot please God. 8:9: But ye are not in the flesh, but in the Spirit, if so be that the Spirit of God dwell in you. Now if any man have not the Spirit of Christ, he is none of his. 8:10: And if Christ be in you, the body is dead because of sin; but the Spirit is life because of righteousness. 8:11: But if the Spirit of him that raised up Jesus from the dead dwell in you, he that raised up Christ from the dead shall also quicken your mM ortal bodies by his Spirit that dwelleth in you. 8:12: Therefore, brethren, we are debtors, not to the flesh, to live after the flesh. 8:13: For if ye live after the flesh, ye shall die: but if ye through the Spirit do mortify the deeds of the body, ye shall live. 8:14: For as many as are led by the Spirit of God, they are the sons of God. 8:15: For ye have not received the spirit of bondage again to fear; but ye have received the Spirit of adoption, whereby we cry, Abba, Father. 8:16: The Spirit itself beareth witM ness with our spirit, that we are the children of God: 8:17: And if children, then heirs; heirs of God, and joint-heirs with Christ; if so be that we suffer with him, that we may be also glorified together. 8:18: For I reckon that the sufferings of this present time are not worthy to be compared with the glory which shall be revealed in us. 8:19: For the earnest expectation of the creature waiteth for the manifestation of the sons of God. 8:20: For the creature was made subject to vanity, not willingly, but by reasM on of him who hath subjected the same in hope, 8:21: Because the creature itself also shall be delivered from the bondage of corruption into the glorious liberty of the children of God. 8:22: For we know that the whole creation groaneth and travaileth in pain together until now. 8:23: And not only they, but ourselves also, which have the firstfruits of the Spirit, even we ourselves groan within ourselves, waiting for the adoption, to wit, the redemption of our body. 8:24: For we are saved by hope: but hope that is M seen is not hope: for what a man seeth, why doth he yet hope for? 8:25: But if we hope for that we see not, then do we with patience wait for it. 8:26: Likewise the Spirit also helpeth our infirmities: for we know not what we should pray for as we ought: but the Spirit itself maketh intercession for us with groanings which cannot be uttered. 8:27: And he that searcheth the hearts knoweth what is the mind of the Spirit, because he maketh intercession for the saints according to the will of God. 8:28: And we know thaM t all things work together for good to them that love God, to them who are the called according to his purpose. 8:29: For whom he did foreknow, he also did predestinate to be conformed to the image of his Son, that he might be the firstborn among many brethren. 8:30: Moreover whom he did predestinate, them he also called: and whom he called, them he also justified: and whom he justified, them he also glorified. 8:31: What shall we then say to these things? If God be for us, who can be against us? ed not his own Son, but delivered him up for us all, how shall he not with him also freely give us all things? 8:33: Who shall lay any thing to the charge of God's elect? It is God that justifieth. 8:34: Who is he that condemneth? It is Christ that died, yea rather, that is risen again, who is even at the right hand of God, who also maketh intercession for us. 8:35: Who shall separate us from the love of Christ? shall tribulation, or distress, or persecution, or famine, or nakedness, or peril, or sword? is written, For thy sake we are killed all the day long; we are accounted as sheep for the slaughter. 8:37: Nay, in all these things we are more than conquerors through him that loved us. 8:38: For I am persuaded, that neither death, nor life, nor angels, nor principalities, nor powers, nor things present, nor things to come, 8:39: Nor height, nor depth, nor any other creature, shall be able to separate us from the love of God, which is in Christ Jesus our Lord. 9:1: I say the truth in Christ, I lie notM , my conscience also bearing me witness in the Holy Ghost, 9:2: That I have great heaviness and continual sorrow in my heart. 9:3: For I could wish that myself were accursed from Christ for my brethren, my kinsmen according to the flesh: 9:4: Who are Israelites; to whom pertaineth the adoption, and the glory, and the covenants, and the giving of the law, and the service of God, and the promises; 9:5: Whose are the fathers, and of whom as concerning the flesh Christ came, who is over all, God blessed for ever. Amen.M 9:6: Not as though the word of God hath taken none effect. For they are not all Israel, which are of Israel: 9:7: Neither, because they are the seed of Abraham, are they all children: but, In Isaac shall thy seed be called. 9:8: That is, They which are the children of the flesh, these are not the children of God: but the children of the promise are counted for the seed. 9:9: For this is the word of promise, At this time will I come, and Sara shall have a son. 9:10: And not only this; but when Rebecca also had concM eived by one, even by our father Isaac; 9:11: (For the children being not yet born, neither having done any good or evil, that the purpose of God according to election might stand, not of works, but of him that calleth;) 9:12: It was said unto her, The elder shall serve the younger. 9:13: As it is written, Jacob have I loved, but Esau have I hated. 9:14: What shall we say then? Is there unrighteousness with God? God forbid. 9:15: For he saith to Moses, I will have mercy on whom I will have mercy, and I will have coM mpassion on whom I will have compassion. 9:16: So then it is not of him that willeth, nor of him that runneth, but of God that sheweth mercy. 9:17: For the scripture saith unto Pharaoh, Even for this same purpose have I raised thee up, that I might shew my power in thee, and that my name might be declared throughout all the earth. 9:18: Therefore hath he mercy on whom he will have mercy, and whom he will he hardeneth. 9:19: Thou wilt say then unto me, Why doth he yet find fault? For who hath resisted his will? : Nay but, O man, who art thou that repliest against God? Shall the thing formed say to him that formed it, Why hast thou made me thus? 9:21: Hath not the potter power over the clay, of the same lump to make one vessel unto honour, and another unto dishonour? 9:22: What if God, willing to shew his wrath, and to make his power known, endured with much longsuffering the vessels of wrath fitted to destruction: 9:23: And that he might make known the riches of his glory on the vessels of mercy, which he had afore preparM 9:24: Even us, whom he hath called, not of the Jews only, but also of the Gentiles? 9:25: As he saith also in Osee, I will call them my people, which were not my people; and her beloved, which was not beloved. 9:26: And it shall come to pass, that in the place where it was said unto them, Ye are not my people; there shall they be called the children of the living God. 9:27: Esaias also crieth concerning Israel, Though the number of the children of Israel be as the sand of the sea, a remnant shall be M 9:28: For he will finish the work, and cut it short in righteousness: because a short work will the Lord make upon the earth. 9:29: And as Esaias said before, Except the Lord of Sabaoth had left us a seed, we had been as Sodoma, and been made like unto Gomorrha. 9:30: What shall we say then? That the Gentiles, which followed not after righteousness, have attained to righteousness, even the righteousness which is of faith. 9:31: But Israel, which followed after the law of righteousness, hath not attained to tM he law of righteousness. 9:32: Wherefore? Because they sought it not by faith, but as it were by the works of the law. For they stumbled at that stumblingstone; 9:33: As it is written, Behold, I lay in Sion a stumblingstone and rock of offence: and whosoever believeth on him shall not be ashamed. 10:1: Brethren, my heart's desire and prayer to God for Israel is, that they might be saved. 10:2: For I bear them record that they have a zeal of God, but not according to knowledge. 10:3: For they being ignorM ant of God's righteousness, and going about to establish their own righteousness, have not submitted themselves unto the righteousness of God. 10:4: For Christ is the end of the law for righteousness to every one that believeth. 10:5: For Moses describeth the righteousness which is of the law, That the man which doeth those things shall live by them. 10:6: But the righteousness which is of faith speaketh on this wise, Say not in thine heart, Who shall ascend into heaven? (that is, to bring Christ down from above:) 10:7: Or, Who shall descend into the deep? (that is, to bring up Christ again from the dead.) 10:8: But what saith it? The word is nigh thee, even in thy mouth, and in thy heart: that is, the word of faith, which we preach; 10:9: That if thou shalt confess with thy mouth the Lord Jesus, and shalt believe in thine heart that God hath raised him from the dead, thou shalt be saved. 10:10: For with the heart man believeth unto righteousness; and with the mouth confession is made unto salvation. 10:11: For the scriptureM saith, Whosoever believeth on him shall not be ashamed. 10:12: For there is no difference between the Jew and the Greek: for the same Lord over all is rich unto all that call upon him. 10:13: For whosoever shall call upon the name of the Lord shall be saved. 10:14: How then shall they call on him in whom they have not believed? and how shall they believe in him of whom they have not heard? and how shall they hear without a preacher? 10:15: And how shall they preach, except they be sent? as it is written, How beautM iful are the feet of them that preach the gospel of peace, and bring glad tidings of good things! 10:16: But they have not all obeyed the gospel. For Esaias saith, Lord, who hath believed our report? 10:17: So then faith cometh by hearing, and hearing by the word of God. 10:18: But I say, Have they not heard? Yes verily, their sound went into all the earth, and their words unto the ends of the world. 10:19: But I say, Did not Israel know? First Moses saith, I will provoke you to jealousy by them that are no people,M and by a foolish nation I will anger you. 10:20: But Esaias is very bold, and saith, I was found of them that sought me not; I was made manifest unto them that asked not after me. 10:21: But to Israel he saith, All day long I have stretched forth my hands unto a disobedient and gainsaying people. 11:1: I say then, Hath God cast away his people? God forbid. For I also am an Israelite, of the seed of Abraham, of the tribe of Benjamin. 11:2: God hath not cast away his people which he foreknew. Wot ye not M what the scripture saith of Elias? how he maketh intercession to God against Israel, saying, 11:3: Lord, they have killed thy prophets, and digged down thine altars; and I am left alone, and they seek my life. 11:4: But what saith the answer of God unto him? I have reserved to myself seven thousand men, who have not bowed the knee to the image of Baal. 11:5: Even so then at this present time also there is a remnant according to the election of grace. 11:6: And if by grace, then is it no more of works: otherwise graM ce is no more grace. But if it be of works, then is it no more grace: otherwise work is no more work. 11:7: What then? Israel hath not obtained that which he seeketh for; but the election hath obtained it, and the rest were blinded 11:8: (According as it is written, God hath given them the spirit of slumber, eyes that they should not see, and ears that they should not hear;) unto this day. 11:9: And David saith, Let their table be made a snare, and a trap, and a stumblingblock, and a recompence unto them: t their eyes be darkened, that they may not see, and bow down their back alway. 11:11: I say then, Have they stumbled that they should fall? God forbid: but rather through their fall salvation is come unto the Gentiles, for to provoke them to jealousy. 11:12: Now if the fall of them be the riches of the world, and the diminishing of them the riches of the Gentiles; how much more their fulness? 11:13: For I speak to you Gentiles, inasmuch as I am the apostle of the Gentiles, I magnify mine office: eans I may provoke to emulation them which are my flesh, and might save some of them. 11:15: For if the casting away of them be the reconciling of the world, what shall the receiving of them be, but life from the dead? 11:16: For if the firstfruit be holy, the lump is also holy: and if the root be holy, so are the branches. 11:17: And if some of the branches be broken off, and thou, being a wild olive tree, wert graffed in among them, and with them partakest of the root and fatness of the olive tree; ot against the branches. But if thou boast, thou bearest not the root, but the root thee. 11:19: Thou wilt say then, The branches were broken off, that I might be graffed in. 11:20: Well; because of unbelief they were broken off, and thou standest by faith. Be not highminded, but fear: 11:21: For if God spared not the natural branches, take heed lest he also spare not thee. 11:22: Behold therefore the goodness and severity of God: on them which fell, severity; but toward thee, goodness, if thou continue in his goodM ness: otherwise thou also shalt be cut off. 11:23: And they also, if they abide not still in unbelief, shall be graffed in: for God is able to graff them in again. 11:24: For if thou wert cut out of the olive tree which is wild by nature, and wert graffed contrary to nature into a good olive tree: how much more shall these, which be the natural branches, be graffed into their own olive tree? 11:25: For I would not, brethren, that ye should be ignorant of this mystery, lest ye should be wise in your own conceits; thM at blindness in part is happened to Israel, until the fulness of the Gentiles be come in. 11:26: And so all Israel shall be saved: as it is written, There shall come out of Sion the Deliverer, and shall turn away ungodliness from Jacob: 11:27: For this is my covenant unto them, when I shall take away their sins. 11:28: As concerning the gospel, they are enemies for your sakes: but as touching the election, they are beloved for the fathers' sakes. 11:29: For the gifts and calling of God are without repentance. : For as ye in times past have not believed God, yet have now obtained mercy through their unbelief: 11:31: Even so have these also now not believed, that through your mercy they also may obtain mercy. 11:32: For God hath concluded them all in unbelief, that he might have mercy upon all. 11:33: O the depth of the riches both of the wisdom and knowledge of God! how unsearchable are his judgments, and his ways past finding out! 11:34: For who hath known the mind of the Lord? or who hath been his counsellor? who hath first given to him, and it shall be recompensed unto him again? 11:36: For of him, and through him, and to him, are all things: to whom be glory for ever. Amen. 12:1: I beseech you therefore, brethren, by the mercies of God, that ye present your bodies a living sacrifice, holy, acceptable unto God, which is your reasonable service. 12:2: And be not conformed to this world: but be ye transformed by the renewing of your mind, that ye may prove what is that good, and acceptable, and perfect, willM 12:3: For I say, through the grace given unto me, to every man that is among you, not to think of himself more highly than he ought to think; but to think soberly, according as God hath dealt to every man the measure of faith. 12:4: For as we have many members in one body, and all members have not the same office: 12:5: So we, being many, are one body in Christ, and every one members one of another. 12:6: Having then gifts differing according to the grace that is given to us, whether prophecy, let us prophM esy according to the proportion of faith; 12:7: Or ministry, let us wait on our ministering: or he that teacheth, on teaching; 12:8: Or he that exhorteth, on exhortation: he that giveth, let him do it with simplicity; he that ruleth, with diligence; he that sheweth mercy, with cheerfulness. 12:9: Let love be without dissimulation. Abhor that which is evil; cleave to that which is good. 12:10: Be kindly affectioned one to another with brotherly love; in honour preferring one another; 12:11: Not slothful in business;M fervent in spirit; serving the Lord; 12:12: Rejoicing in hope; patient in tribulation; continuing instant in prayer; 12:13: Distributing to the necessity of saints; given to hospitality. 12:14: Bless them which persecute you: bless, and curse not. 12:15: Rejoice with them that do rejoice, and weep with them that weep. 12:16: Be of the same mind one toward another. Mind not high things, but condescend to men of low estate. Be not wise in your own conceits. 12:17: Recompense to no man evil for evil. Provide things hM onest in the sight of all men. 12:18: If it be possible, as much as lieth in you, live peaceably with all men. 12:19: Dearly beloved, avenge not yourselves, but rather give place unto wrath: for it is written, Vengeance is mine; I will repay, saith the Lord. 12:20: Therefore if thine enemy hunger, feed him; if he thirst, give him drink: for in so doing thou shalt heap coals of fire on his head. 12:21: Be not overcome of evil, but overcome evil with good. 13:1: Let every soul be subject unto the higher pM owers. For there is no power but of God: the powers that be are ordained of God. 13:2: Whosoever therefore resisteth the power, resisteth the ordinance of God: and they that resist shall receive to themselves damnation. 13:3: For rulers are not a terror to good works, but to the evil. Wilt thou then not be afraid of the power? do that which is good, and thou shalt have praise of the same: 13:4: For he is the minister of God to thee for good. But if thou do that which is evil, be afraid; for he beareth not the swordM in vain: for he is the minister of God, a revenger to execute wrath upon him that doeth evil. 13:5: Wherefore ye must needs be subject, not only for wrath, but also for conscience sake. 13:6: For for this cause pay ye tribute also: for they are God's ministers, attending continually upon this very thing. 13:7: Render therefore to all their dues: tribute to whom tribute is due; custom to whom custom; fear to whom fear; honour to whom honour. 13:8: Owe no man any thing, but to love one another: for he that loveth anM other hath fulfilled the law. 13:9: For this, Thou shalt not commit adultery, Thou shalt not kill, Thou shalt not steal, Thou shalt not bear false witness, Thou shalt not covet; and if there be any other commandment, it is briefly comprehended in this saying, namely, Thou shalt love thy neighbour as thyself. 13:10: Love worketh no ill to his neighbour: therefore love is the fulfilling of the law. 13:11: And that, knowing the time, that now it is high time to awake out of sleep: for now is our salvation nearer than M 13:12: The night is far spent, the day is at hand: let us therefore cast off the works of darkness, and let us put on the armour of light. 13:13: Let us walk honestly, as in the day; not in rioting and drunkenness, not in chambering and wantonness, not in strife and envying. 13:14: But put ye on the Lord Jesus Christ, and make not provision for the flesh, to fulfil the lusts thereof. 14:1: Him that is weak in the faith receive ye, but not to doubtful disputations. 14:2: For one believeM th that he may eat all things: another, who is weak, eateth herbs. 14:3: Let not him that eateth despise him that eateth not; and let not him which eateth not judge him that eateth: for God hath received him. 14:4: Who art thou that judgest another man's servant? to his own master he standeth or falleth. Yea, he shall be holden up: for God is able to make him stand. 14:5: One man esteemeth one day above another: another esteemeth every day alike. Let every man be fully persuaded in his own mind. 14:6: He that regarM deth the day, regardeth it unto the Lord; and he that regardeth not the day, to the Lord he doth not regard it. He that eateth, eateth to the Lord, for he giveth God thanks; and he that eateth not, to the Lord he eateth not, and giveth God thanks. 14:7: For none of us liveth to himself, and no man dieth to himself. 14:8: For whether we live, we live unto the Lord; and whether we die, we die unto the Lord: whether we live therefore, or die, we are the Lord's. 14:9: For to this end Christ both died, and rose, and revM ived, that he might be Lord both of the dead and living. 14:10: But why dost thou judge thy brother? or why dost thou set at nought thy brother? for we shall all stand before the judgment seat of Christ. 14:11: For it is written, As I live, saith the Lord, every knee shall bow to me, and every tongue shall confess to God. 14:12: So then every one of us shall give account of himself to God. 14:13: Let us not therefore judge one another any more: but judge this rather, that no man put a stumblingblock or an occasion M to fall in his brother's way. 14:14: I know, and am persuaded by the Lord Jesus, that there is nothing unclean of itself: but to him that esteemeth any thing to be unclean, to him it is unclean. 14:15: But if thy brother be grieved with thy meat, now walkest thou not charitably. Destroy not him with thy meat, for whom Christ died. 14:16: Let not then your good be evil spoken of: 14:17: For the kingdom of God is not meat and drink; but righteousness, and peace, and joy in the Holy Ghost. 14:18: For he that in these M things serveth Christ is acceptable to God, and approved of men. 14:19: Let us therefore follow after the things which make for peace, and things wherewith one may edify another. 14:20: For meat destroy not the work of God. All things indeed are pure; but it is evil for that man who eateth with offence. 14:21: It is good neither to eat flesh, nor to drink wine, nor any thing whereby thy brother stumbleth, or is offended, or is made weak. 14:22: Hast thou faith? have it to thyself before God. Happy is he that condemM neth not himself in that thing which he alloweth. 14:23: And he that doubteth is damned if he eat, because he eateth not of faith: for whatsoever is not of faith is sin. 15:1: We then that are strong ought to bear the infirmities of the weak, and not to please ourselves. 15:2: Let every one of us please his neighbour for his good to edification. 15:3: For even Christ pleased not himself; but, as it is written, The reproaches of them that reproached thee fell on me. 15:4: For whatsoever things were writtM en aforetime were written for our learning, that we through patience and comfort of the scriptures might have hope. 15:5: Now the God of patience and consolation grant you to be likeminded one toward another according to Christ Jesus: 15:6: That ye may with one mind and one mouth glorify God, even the Father of our Lord Jesus Christ. 15:7: Wherefore receive ye one another, as Christ also received us to the glory of God. 15:8: Now I say that Jesus Christ was a minister of the circumcision for the truth of God, to coM nfirm the promises made unto the fathers: 15:9: And that the Gentiles might glorify God for his mercy; as it is written, For this cause I will confess to thee among the Gentiles, and sing unto thy name. 15:10: And again he saith, Rejoice, ye Gentiles, with his people. 15:11: And again, Praise the Lord, all ye Gentiles; and laud him, all ye people. 15:12: And again, Esaias saith, There shall be a root of Jesse, and he that shall rise to reign over the Gentiles; in him shall the Gentiles trust. 15:13: Now the God of M hope fill you with all joy and peace in believing, that ye may abound in hope, through the power of the Holy Ghost. 15:14: And I myself also am persuaded of you, my brethren, that ye also are full of goodness, filled with all knowledge, able also to admonish one another. 15:15: Nevertheless, brethren, I have written the more boldly unto you in some sort, as putting you in mind, because of the grace that is given to me of God, 15:16: That I should be the minister of Jesus Christ to the Gentiles, ministering the gospM el of God, that the offering up of the Gentiles might be acceptable, being sanctified by the Holy Ghost. 15:17: I have therefore whereof I may glory through Jesus Christ in those things which pertain to God. 15:18: For I will not dare to speak of any of those things which Christ hath not wrought by me, to make the Gentiles obedient, by word and deed, 15:19: Through mighty signs and wonders, by the power of the Spirit of God; so that from Jerusalem, and round about unto Illyricum, I have fully preached the gospel ofM 15:20: Yea, so have I strived to preach the gospel, not where Christ was named, lest I should build upon another man's foundation: 15:21: But as it is written, To whom he was not spoken of, they shall see: and they that have not heard shall understand. 15:22: For which cause also I have been much hindered from coming to you. 15:23: But now having no more place in these parts, and having a great desire these many years to come unto you; 15:24: Whensoever I take my journey into Spain, I will come to you: forM I trust to see you in my journey, and to be brought on my way thitherward by you, if first I be somewhat filled with your company. 15:25: But now I go unto Jerusalem to minister unto the saints. 15:26: For it hath pleased them of Macedonia and Achaia to make a certain contribution for the poor saints which are at Jerusalem. 15:27: It hath pleased them verily; and their debtors they are. For if the Gentiles have been made partakers of their spiritual things, their duty is also to minister unto them in carnal thingsM 15:28: When therefore I have performed this, and have sealed to them this fruit, I will come by you into Spain. 15:29: And I am sure that, when I come unto you, I shall come in the fulness of the blessing of the gospel of Christ. 15:30: Now I beseech you, brethren, for the Lord Jesus Christ's sake, and for the love of the Spirit, that ye strive together with me in your prayers to God for me; 15:31: That I may be delivered from them that do not believe in Judaea; and that my service which I have for Jerusalem may M be accepted of the saints; 15:32: That I may come unto you with joy by the will of God, and may with you be refreshed. 15:33: Now the God of peace be with you all. Amen. 16:1: I commend unto you Phebe our sister, which is a servant of the church which is at Cenchrea: 16:2: That ye receive her in the Lord, as becometh saints, and that ye assist her in whatsoever business she hath need of you: for she hath been a succourer of many, and of myself also. 16:3: Greet Priscilla and Aquila my helpers in Christ M 16:4: Who have for my life laid down their own necks: unto whom not only I give thanks, but also all the churches of the Gentiles. 16:5: Likewise greet the church that is in their house. Salute my wellbeloved Epaenetus, who is the firstfruits of Achaia unto Christ. 16:6: Greet Mary, who bestowed much labour on us. 16:7: Salute Andronicus and Junia, my kinsmen, and my fellowprisoners, who are of note among the apostles, who also were in Christ before me. 16:8: Greet Amplias my beloved in the Lord. e Urbane, our helper in Christ, and Stachys my beloved. 16:10: Salute Apelles approved in Christ. Salute them which are of Aristobulus' household. 16:11: Salute Herodion my kinsman. Greet them that be of the household of Narcissus, which are in the Lord. 16:12: Salute Tryphena and Tryphosa, who labour in the Lord. Salute the beloved Persis, which laboured much in the Lord. 16:13: Salute Rufus chosen in the Lord, and his mother and mine. 16:14: Salute Asyncritus, Phlegon, Hermas, Patrobas, Hermes, and the brethren wM 16:15: Salute Philologus, and Julia, Nereus, and his sister, and Olympas, and all the saints which are with them. 16:16: Salute one another with an holy kiss. The churches of Christ salute you. 16:17: Now I beseech you, brethren, mark them which cause divisions and offences contrary to the doctrine which ye have learned; and avoid them. 16:18: For they that are such serve not our Lord Jesus Christ, but their own belly; and by good words and fair speeches deceive the hearts of the simple. For your obedience is come abroad unto all men. I am glad therefore on your behalf: but yet I would have you wise unto that which is good, and simple concerning evil. 16:20: And the God of peace shall bruise Satan under your feet shortly. The grace of our Lord Jesus Christ be with you. Amen. 16:21: Timotheus my workfellow, and Lucius, and Jason, and Sosipater, my kinsmen, salute you. 16:22: I Tertius, who wrote this epistle, salute you in the Lord. 16:23: Gaius mine host, and of the whole church, saluteth you. ErasM tus the chamberlain of the city saluteth you, and Quartus a brother. 16:24: The grace of our Lord Jesus Christ be with you all. Amen. 16:25: Now to him that is of power to stablish you according to my gospel, and the preaching of Jesus Christ, according to the revelation of the mystery, which was kept secret since the world began, 16:26: But now is made manifest, and by the scriptures of the prophets, according to the commandment of the everlasting God, made known to all nations for the obedience of faith: 16:27: T>o God only wise, be glory through Jesus Christ for ever. Amen.h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! Adobe Photoshop 23.4 (Macintosh) cropWhenPrintingbool http://ns.adobe.com/xap/1.0/ " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 7.2-c000 79.566ebc5b4, 2022/05/09-08:25:55 "M > <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmp:CreatorTool="Adobe Photoshop 23.4 (Macintosh)" xmp:CreateDate="2023-02-14T14:20:59+01:00" xmp:MetadataDate="2023-02-14T14:20:59+01:00" xmp:ModifyDate="2023-02-14T14:20:59+M 01:00" xmpMM:InstanceID="xmp.iid:29ae5421-142c-4f67-ab16-c54dc9023733" xmpMM:DocumentID="adobe:docid:photoshop:a556e858-d343-2f48-87e4-9cbfde66cb5f" xmpMM:OriginalDocumentID="xmp.did:40a07b10-9e9b-415c-9429-729a3c31534b" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" dc:format="image/jpeg"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="created" stEvt:instanceID="xmp.iid:40a07b10-9e9b-415c-9429-729a3c31534b" stEvt:when="2023-02-14T14:20:59+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (MacintoM sh)"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:29ae5421-142c-4f67-ab16-c54dc9023733" stEvt:when="2023-02-14T14:20:59+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (Macintosh)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> <photoshop:DocumentAncestors> <rdf:Bag> <rdf:li>adobe:docid:photoshop:a3a931a8-7173-114a-b942-0f9d4a10b6d3</rdf:li> <rdf:li>adobe:docid:photoshop:cf361a66-7bc9-1040-aa08-1f68bd48af0f</rdf:li> </rdf:Bag> </photoshop:DocumentAncestors> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?> Copyright (c) 1998 Hewlett-Packard Company IEC http://www.iec.ch IEC http://www.iec.ch .IEC 61966-2.1 Default RGB colour space - sRGB .IEC 61966-2.1 Default RGB colour space - sRGB ,Reference Viewing Condition in IEC61966-2.1 ,Reference Viewing Condition in IEC61966-2.1 "%8(+(+(8U5>55>5UK[JEJ[K "%8(+(+(8U5>55>5UK[JEJ[K text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 AUTHORIZED KING JAMES VERSION 1:1: Paul, a servant of God, and an apostle of Jesus Christ, according to the faith of God's elect, and the acknowledging of the truth which is after godliness; 1:2: In hope of eternal life, which God, that cannot lie, promised before the world began; 1:3: But hath in due times manifested his word through preaching, which is committed unto me according to the commandment of God our Saviour; 1:4: To Titus, mine own son after the common faM ith: Grace, mercy, and peace, from God the Father and the Lord Jesus Christ our Saviour. 1:5: For this cause left I thee in Crete, that thou shouldest set in order the things that are wanting, and ordain elders in every city, as I had appointed thee: 1:6: If any be blameless, the husband of one wife, having faithful children not accused of riot or unruly. 1:7: For a bishop must be blameless, as the steward of God; not selfwilled, not soon angry, not given to wine, no striker, not given to filthy lucre; over of hospitality, a lover of good men, sober, just, holy, temperate; 1:9: Holding fast the faithful word as he hath been taught, that he may be able by sound doctrine both to exhort and to convince the gainsayers. 1:10: For there are many unruly and vain talkers and deceivers, specially they of the circumcision: 1:11: Whose mouths must be stopped, who subvert whole houses, teaching things which they ought not, for filthy lucre's sake. 1:12: One of themselves, even a prophet of their own, said, The Cretians are aM lway liars, evil beasts, slow bellies. 1:13: This witness is true. Wherefore rebuke them sharply, that they may be sound in the faith; 1:14: Not giving heed to Jewish fables, and commandments of men, that turn from the truth. 1:15: Unto the pure all things are pure: but unto them that are defiled and unbelieving is nothing pure; but even their mind and conscience is defiled. 1:16: They profess that they know God; but in works they deny him, being abominable, and disobedient, and unto every good work reprobate. 2:1: But speak thou the things which become sound doctrine: 2:2: That the aged men be sober, grave, temperate, sound in faith, in charity, in patience. 2:3: The aged women likewise, that they be in behaviour as becometh holiness, not false accusers, not given to much wine, teachers of good things; 2:4: That they may teach the young women to be sober, to love their husbands, to love their children, 2:5: To be discreet, chaste, keepers at home, good, obedient to their own husbands, that the word of God be not M 2:6: Young men likewise exhort to be sober minded. 2:7: In all things shewing thyself a pattern of good works: in doctrine shewing uncorruptness, gravity, sincerity, 2:8: Sound speech, that cannot be condemned; that he that is of the contrary part may be ashamed, having no evil thing to say of you. 2:9: Exhort servants to be obedient unto their own masters, and to please them well in all things; not answering again; 2:10: Not purloining, but shewing all good fidelity; that they may adorn the doctrine ofM God our Saviour in all things. 2:11: For the grace of God that bringeth salvation hath appeared to all men, 2:12: Teaching us that, denying ungodliness and worldly lusts, we should live soberly, righteously, and godly, in this present world; 2:13: Looking for that blessed hope, and the glorious appearing of the great God and our Saviour Jesus Christ; 2:14: Who gave himself for us, that he might redeem us from all iniquity, and purify unto himself a peculiar people, zealous of good works. 2:15: These things speak, M and exhort, and rebuke with all authority. Let no man despise thee. 3:1: Put them in mind to be subject to principalities and powers, to obey magistrates, to be ready to every good work, 3:2: To speak evil of no man, to be no brawlers, but gentle, shewing all meekness unto all men. 3:3: For we ourselves also were sometimes foolish, disobedient, deceived, serving divers lusts and pleasures, living in malice and envy, hateful, and hating one another. 3:4: But after that the kindness and love of God our SavM iour toward man appeared, 3:5: Not by works of righteousness which we have done, but according to his mercy he saved us, by the washing of regeneration, and renewing of the Holy Ghost; 3:6: Which he shed on us abundantly through Jesus Christ our Saviour; 3:7: That being justified by his grace, we should be made heirs according to the hope of eternal life. 3:8: This is a faithful saying, and these things I will that thou affirm constantly, that they which have believed in God might be careful to maintain good works.M These things are good and profitable unto men. 3:9: But avoid foolish questions, and genealogies, and contentions, and strivings about the law; for they are unprofitable and vain. 3:10: A man that is an heretick after the first and second admonition reject; 3:11: Knowing that he that is such is subverted, and sinneth, being condemned of himself. 3:12: When I shall send Artemas unto thee, or Tychicus, be diligent to come unto me to Nicopolis: for I have determined there to winter. 3:13: Bring Zenas the lawyer and AM pollos on their journey diligently, that nothing be wanting unto them. 3:14: And let ours also learn to maintain good works for necessary uses, that they be not unfruitful. 3:15: All that are with me salute thee. Greet them that love us in the faith. Grace be with you all. Amen.h! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! "-)#""#)8/////8A;;;;;;AAAAAAAAAAAAAAAAAAAAAAAAAAAAA #1?1&&1?A?;/;?AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Adobe Photoshop 23.4 (Macintosh) cropWhenPrintingbool http://ns.adobe.com/xap/1.0/ " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 7.2-c000 79.566ebc5b4, 2022/05/09-08:25:55 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:DescriptionM rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmp:CreatorTool="Adobe Photoshop 23.4 (Macintosh)" xmp:CreateDate="2023-02-14T14:20:39+01:00" xmp:MetadataDate="2023-02-14T14:20:39+01:00" xmp:ModifyDate="2023-02-14T14:20:39+01:00" xmpMM:InstanceID="xmp.iid:a35d7a0a-bde3-4d07-a596-869312938942" xmpMM:DocumenM tID="adobe:docid:photoshop:48589dc7-ddf7-de43-af28-e8a35b8c75e5" xmpMM:OriginalDocumentID="xmp.did:941cc4fe-f75f-4267-869e-cdc28dbba38f" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" dc:format="image/jpeg"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="created" stEvt:instanceID="xmp.iid:941cc4fe-f75f-4267-869e-cdc28dbba38f" stEvt:when="2023-02-14T14:20:39+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (Macintosh)"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:a35d7a0a-bde3-4d07-a59M 6-869312938942" stEvt:when="2023-02-14T14:20:39+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (Macintosh)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> <photoshop:DocumentAncestors> <rdf:Bag> <rdf:li>adobe:docid:photoshop:a3a931a8-7173-114a-b942-0f9d4a10b6d3</rdf:li> <rdf:li>adobe:docid:photoshop:cf361a66-7bc9-1040-aa08-1f68bd48af0f</rdf:li> </rdf:Bag> </photoshop:DocumentAncestors> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?> Copyright (c) 1998 Hewlett-Packard Company IEC http://www.iec.ch IEC http://www.iec.ch .IEC 61966-2.1 Default RGB colour space - sRGB .IEC 61966-2.1 Default RGB colour space - sRGB ,Reference Viewing Condition in IEC61966-2.1 ,Reference Viewing Condition in IEC61966-2.1 "%8(+(+(8U5>55>5UK[JEJ[K "%8(+(+(8U5>55>5UK[JEJ[K text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! '<%+%%+%<5@404@5_JBBJ_m\W\m '<%+%%+%<5@404@5_JBBJ_m\W\m text/plain;charset=utf-8 long live the kingh! 981b157bd69a17566c3358d973213003G0D 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.171c27fab, 2022/08/16-22:35:41 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.0 (Windows)" xmpMM:InstanceID="xmp.iid:5M F88207FACA011ED8F088AC64869F202" xmpMM:DocumentID="xmp.did:5F882080ACA011ED8F088AC64869F202"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:5F88207DACA011ED8F088AC64869F202" stRef:documentID="xmp.did:5F88207EACA011ED8F088AC64869F202"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"L 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElemeM ntById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:M snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRanMn domInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! (((((((((((((((((((((((((((((((((((((((((((((((((( " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-ExM iv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:7250a98c-c0d2-4ed0-ac57-c0840ac13b52" xmpMM:InstanceID="xmp.iid:64f5d3a3-84ce-4e6d-9607-8c920a405fec" xmpMM:OM riginalDocumentID="xmp.did:92beac50-1c21-4e16-a679-c6081940020b" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676408021876723" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:53:40+11:00" xmp:ModifyDate="2023:02:15T07:53:40+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:cab50e23-c1ab-4c89-bb6e-6eda18fc54c0" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02M -15T07:53:41"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M J <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="httpM ://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:f658a399-25c4-4f6a-9284-1d4f00e63138" xmpMM:InstanceID="xmp.iid:e0dae9c8-8c0d-4e59-befa-16172bc14dcf" xmpMM:OriginalDocumentID="xmp.did:f87M fd80d-6597-48a6-a882-c444c0e86d7a" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676408045175848" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:54:03+11:00" xmp:ModifyDate="2023:02:15T07:54:03+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:262b3202-d807-41c3-8bb0-6f82d4bc8495" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:54:05"/> </rdf:Seq> </xM mpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M , <?xpacket end="w"?>h! text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-01-24T18:50:08+00:00g 2023-01-24T18:50:08+00:00 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:metM a/" x:xmptk="Adobe XMP Core 9.0-c000 79.da4a7e5ef, 2022/11/22-13:50:07 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.1 (Macintosh)" xmpMM:InstanceID="xmp.iid:FC607DC7A0FA11ED96AFAF84338A08FA" xmpMM:DocumentID="xmp.did:FC607DC8A0FA11ED96AFAF84338A08FA"> <xmpMM:DerivedFrom stReL f:instanceID="xmp.iid:FC607DC5A0FA11ED96AFAF84338A08FA" stRef:documentID="xmp.did:FC607DC6A0FA11ED96AFAF84338A08FA"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>h! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.171c27fab, 2022/08/16-22:35:41 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.0 (Windows)" xmpMM:InstanceID="xmp.iid:2M 69B7657ACA011EDBE3C8A24B223C920" xmpMM:DocumentID="xmp.did:269B7658ACA011EDBE3C8A24B223C920"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:269B7655ACA011EDBE3C8A24B223C920" stRef:documentID="xmp.did:269B7656ACA011EDBE3C8A24B223C920"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"L 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< <svg style="font:160% arial;font-weight:700;fill:white" height="100%" width="100%" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> <circle cy="50%" cx="50%" r="50%" fill="#ffffff" /> <text x="29%" y="28%">600</text> <text x="29%" y="48%">000</text> <text x="29%" y="68%">000</text> <text x="29%" y="88%">000</text> 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! text/plain;charset=utf-8 long live the kingh! XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.171c27fab, 2022/08/16-22:35:41 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.0 (Windows)" xmpMM:InstanceID="xmp.iid:9M 887E8E7ACA011EDBA85D3C07B3BBC69" xmpMM:DocumentID="xmp.did:9887E8E8ACA011EDBA85D3C07B3BBC69"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:9887E8E5ACA011EDBA85D3C07B3BBC69" stRef:documentID="xmp.did:9887E8E6ACA011EDBA85D3C07B3BBC69"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"L text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.171c27fab, 2022/08/16-22:35:41 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.0 (Windows)" xmpMM:InstanceID="xmp.iid:7M 6B5865FACA011ED8FD2D56114BFF2AF" xmpMM:DocumentID="xmp.did:76B58660ACA011ED8FD2D56114BFF2AF"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:76B5865DACA011ED8FD2D56114BFF2AF" stRef:documentID="xmp.did:76B5865EACA011ED8FD2D56114BFF2AF"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"L -02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.171c27fab, 2022/08/16-22:35:41 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 24.0 (Windows)" xmpMM:InstanceID="xmp.iid:3M DB7DF0FACA011EDA8F6E99A370BA4CA" xmpMM:DocumentID="xmp.did:3DB7DF10ACA011EDA8F6E99A370BA4CA"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:3DB7DF0DACA011EDA8F6E99A370BA4CA" stRef:documentID="xmp.did:3DB7DF0EACA011EDA8F6E99A370BA4CA"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"L 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< text/plain;charset=utf-8 long live the kingh! 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< 2023-02-14T21:00:22+00:00 2023-02-14T17:01:34+00:00 2023-02-14T21:16:54+00:00xHK< d104e436afacaed81fefacc52d5450d2H0E Adobe Photoshop 23.4 (Macintosh) cropWhenPrintingbool p://ns.adobe.com/xap/1.0/ " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 7.2-c000 79.566ebc5b4, 2022/05/09-08:25:55 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:dc="http://purl.org/dcM /elements/1.1/" xmp:CreatorTool="Adobe Photoshop 23.4 (Macintosh)" xmp:CreateDate="2023-02-14T14:20:51+01:00" xmp:MetadataDate="2023-02-14T14:20:51+01:00" xmp:ModifyDate="2023-02-14T14:20:51+01:00" xmpMM:InstanceID="xmp.iid:8432ea53-0fd1-4d8f-be48-a9203f94e4d7" xmpMM:DocumentID="adobe:docid:photoshop:a920469c-cbdc-9a49-98fe-c3ea4aa82aaf" xmpMM:OriginalDocumentID="xmp.did:cb57a0ba-f054-4fc6-adcb-7cb9dd08e038" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" dc:format="image/jpeg"> <xmpMM:History> <rdM f:Seq> <rdf:li stEvt:action="created" stEvt:instanceID="xmp.iid:cb57a0ba-f054-4fc6-adcb-7cb9dd08e038" stEvt:when="2023-02-14T14:20:51+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (Macintosh)"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:8432ea53-0fd1-4d8f-be48-a9203f94e4d7" stEvt:when="2023-02-14T14:20:51+01:00" stEvt:softwareAgent="Adobe Photoshop 23.4 (Macintosh)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> <photoshop:DocumentAncestors> <rdf:Bag> <rdf:li>adobe:docid:photoshop:a3a931a8-7173-114M a-b942-0f9d4a10b6d3</rdf:li> <rdf:li>adobe:docid:photoshop:cf361a66-7bc9-1040-aa08-1f68bd48af0f</rdf:li> </rdf:Bag> </photoshop:DocumentAncestors> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?> Copyright (c) 1998 Hewlett-Packard Company IEC http://www.iec.ch IEC http://www.iec.ch .IEC 61966-2.1 Default RGB colour space - sRGB .IEC 61966-2.1 Default RGB colour space - sRGB ,Reference Viewing Condition in IEC61966-2.1 ,Reference Viewing Condition in IEC61966-2.1 "%8(+(+(8U5>55>5UK[JEJ[K "%8(+(+(8U5>55>5UK[JEJ[K #$056BCUgqsRar7@Pdb%DE&'FW text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #000000; font-size: 16px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#1A1A1A", "#4C1A1E", "#73262D", "#9B313B", "#000000", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450);M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className =M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #000000; font-size: 12px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#1A1A1A", "#4C1A1E", "#73262D", "#9B313B", "#000000", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #3D3D3D; font-size: 14px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#565656", "#38A773", "#4EC58D", "#73D2A6", "#3D3D3D", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #3D3D3D; font-size: 17px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#565656", "#38A773", "#4EC58D", "#73D2A6", "#3D3D3D", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 60M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = strM video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; onst res = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.clM gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (eMD running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { #5!&!!&!5/8.+.8/TB::BTaQMQauiiu #5!&!!&!5/8.+.8/TB::BTaQMQauiiu text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #212121; font-size: 18px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#3B3B3B", "#8D03A6", "#B802D9", "#D911FE", "#212121", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 60M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = strM video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; onst res = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.clM gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (eMD running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { E!zTXtRaw profile type exif gzTXtRaw profile type iptc iTXtXML:com.adobe.xmp " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" lns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:2429d8b1-2f99-45d4-9296-8aad85609c42" xmpMM:InstanceID="xmp.iid:69bb5abf-fc24-4f4c-a14a-00f1523374f1" xmpMM:OriginalDocumentID="xmp.did:7e551a74-92c6-44a6-8506-bd34f170730b" dc:Format="image/png" GIMP:Platform="Linux" GIMP:TimeStamp="1676416698846616" GIMP:Version="2.10.30" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10"> stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:dcef2121-31a8-4330-a970-f3df2086b376" stEvt:softwareAgent="Gimp 2.10 (Linux)" stEvt:when="2023-02-15T02:18:18+03:00"/> </rdf:Description> M M M text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #3D3D3D; font-size: 48px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobiM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#565656", "#38A773", "#4EC58D", "#73D2A6", "#3D3D3D", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = streM video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; nst res = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.claM gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (e)MC running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #737373; font-size: 18px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#8C8C8C", "#FCEC50", "#FEF281", "#FFF8B3", "#737373", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450);M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className =M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #757575; font-size: 12px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#8F8F8F", "#7ECFD3", "#A3DDE1", "#C9ECEE", "#757575", ]; let running = true; if (chars.length === 280) { cyclerEnabled = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 60M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = strM video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; onst res = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.clM gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { cycler+=3; document.getElementById('stop').addEventListener('click', (eMD running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { I:7052+?<4<91$#?>;330*,*%*(#)'" pBSeAxY9ES7@K3yU2iN2nO/lM/8;.58+O=)H9)U>(A#&S<% `;sV6CN5^H2uS/rP.dG,M-,]C+aF*5.$&$$A1#QA"=/ d8{^8DA8IA2d90TD/jK.B;,X/+D++5)(aD'" 'WE% `1;H0;@/?8*24(aJ'-$'4 text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,conteM xt.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snaM ke.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===eL^.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:M 4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(appleM .x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.whiL ch&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canM vas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRaM ndomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dyJ&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/plain;charset=utf-8 I hope this message finds you in good spirits and high energy levels! I am reaching out to you with a very specific request - I need a taproot wizard! I know this may sound like an odd request, but trust me, it's all part of my grand master plan to take over the world (just kidding, or am I?). In all seriousness, I have heard that you are the go-to person when it comes to all things magical, and I am in desperate need of a taproot wizard to help me with a project. I promise to take good care of the M wizard and provide him/her with all the necessary sustenance (and maybe some extra treats too). So, pretty please with sugar on top, could you spare me a taproot wizard? I promise to return him/her in one piece (or at least mostly intact) and will be eternally grateful for your help. Thank you in advance for your consideration, and I hope to hear from you soon. @j>=:ETH.ETH:0xe9167B421403ad40Bd13c45B4be22EF4667bA485:640200::0 Bj@=:BNB.BNB:bnb16pt7acdr2y0y3zjljw0c70sehyagfhtl9f4u7g:630325:te:0 IjG=:BNB.BUSD-BD1:bnb12rxr737kq9lmdy67saturpchsyryfxa0xc90yt:89507904:te:0 <?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1200 1200" style="enable-background:new 0 0 1200 1200;" xml:space="preserve"> <path d="M616.05,822.08c-0.9,0-1.8,0.62-1.87,1.6l-3.47,41.48c0,0.49,0.14,0.9,0.41,1.25c0.28,0.35,0.69,0.56,1.18,0.63 c0.07,0,0.14,0,0.14,0c0.9,0,1.66-0.7M ,1.73-1.6l3.47-41.48C617.71,822.99,617.02,822.15,616.05,822.08z"/> <path d="M626.45,697.63c-0.07,0-0.07,0-0.14,0c-0.91,0-1.67,0.69-1.73,1.59l-3.47,41.49c0,0.48,0.07,0.9,0.41,1.25 c0.28,0.35,0.69,0.56,1.18,0.62c0.07,0,0.14,0,0.14,0c0.9,0,1.66-0.69,1.73-1.59l3.47-41.49 C628.12,698.6,627.42,697.76,626.45,697.63z"/> <path d="M621.81,752.92c-0.83,0.07-1.73,0.69-1.88,1.59l-0.55,6.94c-0.07,0.9,0.62,1.81,1.59,1.88h0.14c0.9,0,1.66-0.7,1.73-1.6 l0.55-6.86C623.47,753.89,622.77,753.05,621.81,752.92z"/> M618.34,794.4c-0.77-0.07-1.73,0.63-1.88,1.6c0,0.49,0.14,0.97,0.42,1.31c0.35,0.35,0.77,0.56,1.18,0.56 c0.07,0,0.07,0,0.14,0c0.91,0,1.67-0.69,1.73-1.59C620,795.3,619.31,794.48,618.34,794.4z"/> <path d="M607.37,925.8c-0.77,0.07-1.8,0.62-1.87,1.59l-1.19,13.81c0,0.42,0.14,0.9,0.42,1.25c0.28,0.35,0.77,0.55,1.25,0.62h0.07 c0.91,0,1.67-0.7,1.73-1.6l1.19-13.81c0-0.48-0.14-0.9-0.42-1.25C608.21,926.08,607.79,925.8,607.37,925.8z"/> <path d="M608,918.87c-0.9-0.14-1.8,0.62-1.94,1.59c-0.07,0.98,0.7,1.81,1.6,1.88c0.07,0,M 0.07,0,0.14,0c0.91,0,1.67-0.69,1.73-1.6 c0.07-0.48-0.07-0.9-0.41-1.25C608.83,919.14,608.42,918.93,608,918.87z"/> <path d="M611.4,877.38c-0.83,0-1.73,0.63-1.88,1.6l-0.55,6.94c-0.07,0.97,0.62,1.73,1.59,1.87h0.14c0.9,0,1.66-0.69,1.73-1.59 l0.55-6.94C613.07,878.35,612.37,877.52,611.4,877.38z"/> <path d="M667.94,675.7c-0.49-0.77-1.6-0.98-2.36-0.42c-0.76,0.49-0.97,1.6-0.41,2.36l7.91,11.38c0.35,0.48,0.9,0.76,1.46,0.76 c0.35,0,0.7-0.14,0.98-0.35c0.76-0.56,0.97-1.59,0.41-2.36L667.94,675.7z"/> ,676.88c-0.9,0.07-1.73,0.62-1.87,1.59l-1.11,13.81c-0.14,0.97,0.62,1.8,1.52,1.94c0.07,0,0.14,0,0.14,0 c0.91,0,1.67-0.7,1.81-1.6l1.11-13.88C629.85,677.85,629.16,676.95,628.19,676.88z"/> <path d="M711.65,738.28c-0.56-0.76-1.67-0.97-2.43-0.48c-0.35,0.27-0.62,0.69-0.69,1.18c-0.07,0.41,0,0.9,0.28,1.25l23.86,34.13 c0.28,0.49,0.83,0.77,1.39,0.77c0.35,0,0.7-0.14,1.04-0.35c0.76-0.55,0.9-1.59,0.35-2.36L711.65,738.28z"/> <path d="M677.44,692.28c-0.35,0.28-0.62,0.69-0.69,1.18c-0.07,0.42,0,0.9,0.28,1.25c0.35,0.49,0.9,0M c0.35,0,0.69-0.14,0.97-0.28c0.83-0.62,0.98-1.67,0.42-2.43C679.39,692,678.27,691.79,677.44,692.28z"/> <path d="M699.71,721.14c-0.48-0.69-1.66-0.9-2.36-0.35c-0.41,0.2-0.69,0.62-0.76,1.04c-0.07,0.49,0.07,0.98,0.35,1.32l3.96,5.69 c0.27,0.48,0.83,0.76,1.38,0.76c0.42,0,0.7-0.14,1.04-0.35s0.62-0.62,0.69-1.11c0.07-0.41-0.07-0.9-0.35-1.25L699.71,721.14z"/> <path d="M640.19,635.88c-0.56-0.77-1.67-0.97-2.43-0.41c-0.77,0.48-0.97,1.59-0.41,2.36l23.79,34.13c0.35,0.48,0.9,0.76,1.46,0.76 c0.35,0,0.69-0.1M 4,0.97-0.35c0.77-0.48,0.98-1.59,0.42-2.36L640.19,635.88z"/> <path d="M628.81,670.01c-0.9-0.07-1.8,0.62-1.94,1.6c-0.07,0.9,0.7,1.73,1.6,1.8c0.07,0,0.14,0.07,0.14,0.07 c0.91,0,1.67-0.69,1.81-1.67C630.41,670.91,629.71,670.08,628.81,670.01z"/> <path d="M632.28,628.53c-0.97,0-1.8,0.62-1.94,1.59l-0.55,6.87c-0.07,0.97,0.62,1.8,1.59,1.87c0,0,0.07,0,0.14,0 c0.9,0,1.66-0.62,1.73-1.59l0.55-6.87C633.88,629.43,633.18,628.6,632.28,628.53z"/> <path d="M617.78,801.34c-0.9,0.07-1.8,0.63-1.87,1.6l-1.19,13.81c-0.07,0.97,0M .63,1.8,1.6,1.87h0.14c0.91,0,1.67-0.62,1.73-1.59 l1.19-13.81c0.07-0.42-0.14-0.9-0.42-1.25C618.68,801.62,618.27,801.41,617.78,801.34z"/> <path d="M1026.81,169.42c-0.89-1.08-2.47-1.29-3.59-0.43L634.4,463.37l-33.06-292.6c-0.15-1.37-1.25-2.55-2.74-2.3 c-1.38,0.07-2.45,1.21-2.45,2.59v7.31l-0.64,5.25c-0.07,0.49,0.07,0.91,0.35,1.25c0.07,0.1,0.21,0.09,0.29,0.17v10.95 c-0.1-0.03-0.19-0.09-0.29-0.09c-0.97-0.21-1.8,0.56-1.94,1.52l-4.85,41.35c0,0.42,0.07,0.9,0.41,1.25 c0.28,0.35,0.69,0.62,1.11,0.62c0.9,0.14,1.87-M 0.56,1.94-1.53l3.62-30.69v326.89L202.1,191.1c0.31-0.73,0.22-1.59-0.44-2.07 l-5.47-4.16c-0.42-0.34-0.96-0.35-1.47-0.23l-17.79-15.54c-1.06-0.93-2.66-0.84-3.61,0.18c-0.96,1.02-0.93,2.62,0.05,3.62 l374.73,376.25l-11.76,26.24c-0.41,0.9,0,1.94,0.83,2.29c0.28,0.14,0.49,0.2,0.77,0.2c0.69,0,1.25-0.41,1.52-1.04l11.84-26.41 l42.38-6.04L442.44,793.54l11.96-26.75c0.41-0.9,0-1.88-0.83-2.29c-0.9-0.42-1.88,0-2.29,0.9l-17,37.95 c-0.21,0.42-0.21,0.9-0.07,1.32c0.21,0.48,0.49,0.76,0.89,0.96l-1.94,3.19c-0.71-0.05-1.45,0.2-1M .73,0.91l-3.38,7.51l-3.51,5.78 c-0.73,1.2-0.37,2.76,0.8,3.52c1.18,0.78,2.75,0.47,3.55-0.68l133.26-189.93l34,393.25c0.12,1.35,1.25,2.38,2.59,2.38 c0.03,0,0.07,0,0.12,0c1.39-0.06,2.49-1.21,2.49-2.6v-17.16c0.37-0.29,0.64-0.68,0.68-1.16l0.55-6.94 c0.06-0.82-0.49-1.45-1.23-1.69v-10.84c0.19,0.08,0.32,0.26,0.54,0.26c0.07,0.07,0.07,0.07,0.14,0.07c0.9,0,1.66-0.76,1.73-1.59 l3.47-41.49c0.07-0.97-0.63-1.8-1.6-1.87c-0.83,0.07-1.8,0.62-1.87,1.59l-2.42,28.88V550.38l137.37,227.25 c-0.55-0.26-1.17-0.34-1.68-0.02c-0.M 77,0.62-0.98,1.67-0.42,2.43l7.91,11.38c0.56,0.77,1.67,0.97,2.43,0.41 c0.11-0.05,0.1-0.19,0.18-0.27l1.87,3.1c-0.01,0.01-0.03,0.01-0.04,0.01c-0.77,0.56-0.98,1.67-0.49,2.43 c0.52,0.71,1.52,0.88,2.28,0.45l19.33,31.98c0.49,0.81,1.35,1.25,2.23,1.25c0.41,0,0.82-0.09,1.21-0.3 c1.22-0.64,1.73-2.11,1.17-3.37l-125-279.48l3.05-3c0.62-0.69,0.62-1.8-0.07-2.49c-0.62-0.62-1.73-0.62-2.36,0h-0.07l-3.15,3.15 l-42.34-6.03l374.12-324.89l-4.43,4.41c-0.35,0.35-0.56,0.83-0.49,1.25c0,0.49,0.14,0.91,0.49,1.25c0.35,0.28,0.76,0.48M c0.42,0,0.9-0.2,1.18-0.48l29.48-29.42c0.35-0.35,0.56-0.77,0.49-1.25c0-0.16-0.13-0.25-0.16-0.39l3.27-2.83 c0.49,0.02,0.98-0.09,1.33-0.45l5.68-5.64l9.54-8.28C1027.55,172.1,1027.7,170.51,1026.81,169.42z"/> <path d="M460.09,754.1l2.85-6.31c0.42-0.83,0-1.87-0.9-2.29c-0.83-0.41-1.87,0.07-2.22,0.9l-2.85,6.31 c-0.21,0.42-0.21,0.9-0.07,1.32c0.21,0.41,0.49,0.76,0.91,0.97c0.28,0.07,0.48,0.14,0.76,0.14 C459.18,755.14,459.82,754.72,460.09,754.1z"/> <path d="M533.49,581.77l-5.68,12.62c-0.35,0.91,0,1.88M ,0.9,2.29c0.21,0.14,0.49,0.14,0.69,0.14c0.7,0,1.32-0.35,1.6-0.98 l5.62-12.69c0.42-0.83,0-1.88-0.83-2.29C534.88,580.52,533.84,580.94,533.49,581.77z"/> <path d="M511.15,640.11l2.85-6.31c0.35-0.83,0-1.88-0.9-2.29c-0.9-0.35-1.94,0.07-2.29,0.9l-2.85,6.31c-0.35,0.9,0,1.94,0.9,2.29 c0.21,0.14,0.42,0.14,0.7,0.14C510.25,641.15,510.87,640.74,511.15,640.11z"/> <path d="M524.96,600.7c-0.14,0.49-0.21,0.9,0,1.39c0.14,0.42,0.49,0.77,0.9,0.97c0.21,0.07,0.49,0.14,0.69,0.14 c0.7,0,1.32-0.42,1.6-1.04c0.35-0.9,0-1.87-0.9-M 2.29C526.41,599.53,525.37,599.87,524.96,600.7z"/> <path d="M473.96,714.69c-0.2,0.48-0.2,0.9-0.07,1.38c0.21,0.42,0.49,0.77,0.9,0.91c0.28,0.14,0.49,0.2,0.77,0.2 c0.62,0,1.25-0.41,1.52-1.04c0.42-0.9,0-1.94-0.83-2.29C475.35,713.44,474.31,713.86,473.96,714.69z"/> <path d="M482.43,695.75l-5.62,12.63c-0.2,0.41-0.2,0.9-0.07,1.31c0.14,0.42,0.49,0.77,0.9,0.98c0.28,0.14,0.49,0.14,0.7,0.14 c0.69,0,1.31-0.41,1.59-1.04l5.69-12.63c0.35-0.9,0-1.88-0.9-2.29C483.89,694.5,482.84,694.85,482.43,695.75z"/> <path d="M502.27,6M 51.42l-16.99,37.95c-0.35,0.9,0,1.94,0.9,2.29c0.2,0.14,0.48,0.14,0.69,0.14c0.7,0,1.32-0.35,1.6-0.97 l16.99-38.01c0.35-0.91,0-1.88-0.9-2.29C503.72,650.17,502.69,650.59,502.27,651.42z"/> <path d="M542.16,579.34l-5.68,12.63c-0.14,0.41-0.21,0.9,0,1.32c0.14,0.48,0.48,0.83,0.9,0.97c0.21,0.14,0.49,0.14,0.69,0.14 c0.7,0,1.32-0.35,1.6-0.97l5.68-12.7c0.35-0.83,0-1.87-0.9-2.29C543.61,578.09,542.58,578.5,542.16,579.34z"/> <path d="M555.06,552.49c-0.62,0.14-1.11,0.49-1.32,1.04L545,572.95c-0.2,0.42-0.2,0.9-0.07,1.39c0.2M 1,0.42,0.49,0.77,0.9,0.97 c0.28,0.07,0.49,0.14,0.77,0.14c0.69,0,1.31-0.42,1.59-1.04v-0.07l8.6-19.29c0.21-0.35,0.28-0.69,0.21-1.04 C556.87,553.04,555.97,552.35,555.06,552.49z"/> <path d="M536.13,632.62c0.55,0,1.1-0.28,1.46-0.83c0.2-0.42,0.28-0.83,0.2-1.32c-0.14-0.41-0.41-0.83-0.76-1.04 c-0.83-0.49-1.94-0.21-2.43,0.56c-0.2,0.41-0.28,0.9-0.2,1.31c0.14,0.49,0.41,0.83,0.83,1.04 C535.43,632.55,535.78,632.62,536.13,632.62z"/> <path d="M535.22,600.78c0.7,0,1.32-0.42,1.6-1.04c0.41-0.9,0-1.88-0.9-2.29c-0.83-0M c-0.35,0.83,0.07,1.88,0.9,2.29C534.74,600.7,535.02,600.78,535.22,600.78z"/> <path d="M556.18,594.39l-3.54,5.97c-0.56,0.77-0.28,1.88,0.56,2.36c0.28,0.21,0.55,0.28,0.9,0.28c0.56,0,1.18-0.35,1.46-0.83 l3.6-5.96c0.21-0.42,0.35-0.83,0.21-1.32c-0.14-0.41-0.42-0.83-0.77-1.04C557.77,593.35,556.66,593.63,556.18,594.39z"/> <path d="M575.67,549.57l-13.73,1.94c-0.49,0.07-0.9,0.35-1.18,0.7c-0.28,0.35-0.35,0.83-0.28,1.25c0.07,0.9,0.83,1.52,1.67,1.52 c0.07,0,0.2,0,0.27,0l13.74-1.94c0.49-0.07,0.9-0M .35,1.11-0.69c0.28-0.41,0.41-0.83,0.35-1.32 C577.48,550.13,576.57,549.44,575.67,549.57z"/> <path d="M487.57,708.31c0.14,0.48,0.41,0.9,0.83,1.18c0.28,0.14,0.56,0.2,0.91,0.2c0.62,0,1.18-0.28,1.46-0.76l3.6-5.97 c0.49-0.83,0.21-1.87-0.56-2.36c-0.77-0.49-1.87-0.21-2.36,0.49l2.85-6.39c0.41-0.9,0-1.87-0.83-2.28c-0.9-0.35-1.94,0-2.29,0.83 l-5.69,12.7c-0.41,0.9,0,1.88,0.83,2.29C486.73,708.45,487.15,708.45,487.57,708.31z"/> <path d="M498.39,690.62c0.14,0.42,0.41,0.83,0.77,1.04c0.28,0.21,0.62,0.28,0.9,0.28c0.62,0M ,1.18-0.35,1.52-0.83l21.58-35.59 c0.48-0.83,0.28-1.88-0.56-2.36c-0.77-0.49-1.94-0.21-2.36,0.56L498.6,689.3C498.39,689.71,498.32,690.13,498.39,690.62z"/> <path d="M482.63,712.26c-0.2,0.42-0.2,0.9-0.07,1.39c0.21,0.41,0.49,0.77,0.9,0.9c0.28,0.14,0.49,0.21,0.77,0.21 c0.69,0,1.32-0.42,1.6-1.04c0.14-0.41,0.14-0.9,0-1.39c-0.14-0.41-0.49-0.76-0.91-0.9C484.1,711.02,482.99,711.43,482.63,712.26z" <path d="M524.4,650.17c0.21,0.14,0.56,0.28,0.9,0.28c0.56,0,1.18-0.35,1.46-0.83l7.22-11.86c0.21-0.41,0.28-0.9,0.21-1M c-0.14-0.49-0.42-0.83-0.77-1.11c-0.83-0.49-1.87-0.21-2.43,0.56l-7.22,11.93C523.29,648.58,523.57,649.69,524.4,650.17z"/> <path d="M494.85,689.23c0.2,0.14,0.48,0.2,0.69,0.2c0.7,0,1.32-0.41,1.6-1.04l16.99-38.02c0.42-0.83,0-1.87-0.83-2.29 c-0.91-0.35-1.94,0.07-2.29,0.9l-17.07,37.95C493.6,687.84,494.02,688.88,494.85,689.23z"/> <path d="M519.82,637.75l2.85-6.38c0.35-0.83,0-1.87-0.9-2.29c-0.83-0.35-1.88,0.07-2.29,0.91l-2.85,6.31 c-0.35,0.91,0,1.88,0.9,2.29c0.21,0.14,0.49,0.14,0.7,0.14C518.92,638.73,519.54M ,638.31,519.82,637.75z"/> <path d="M564.01,584.96c0.21,0.14,0.56,0.21,0.9,0.21c0.56,0,1.11-0.28,1.46-0.83l3.47-5.76c0.07-0.07,0.07-0.07,0.14-0.14 l16.71-27.54c0.35-0.62,0.35-1.32-0.07-1.88c-0.35-0.55-0.97-0.9-1.67-0.76l-2.43,0.35c-0.49,0.07-0.9,0.35-1.18,0.69 c-0.28,0.35-0.35,0.83-0.28,1.25c0.07,0.62,0.41,1.11,0.97,1.31l-18.66,30.66C562.9,583.36,563.18,584.47,564.01,584.96z"/> <path d="M542.37,595.85c-0.21,0.42-0.21,0.91-0.07,1.32c0.21,0.49,0.49,0.83,0.9,0.97c0.28,0.14,0.49,0.14,0.77,0.14 0.35,1.59-0.97c0.35-0.91,0-1.88-0.9-2.29C543.76,594.6,542.71,595.02,542.37,595.85z"/> <path d="M546.74,591.96c0.7,0,1.32-0.35,1.6-0.97l5.68-12.7c0.42-0.83,0-1.88-0.9-2.29c-0.83-0.35-1.87,0-2.29,0.83l-5.62,12.7 c-0.41,0.9,0,1.94,0.83,2.29C546.26,591.96,546.53,591.96,546.74,591.96z"/> <path d="M564.22,571.15c-0.77-0.49-1.88-0.21-2.36,0.56l-21.58,35.59c-0.56,0.83-0.28,1.88,0.56,2.36 c0.28,0.21,0.56,0.28,0.9,0.28c0.62,0,1.18-0.28,1.46-0.83l21.65-35.59C565.34,572.68,565.06,571.64,564.22,571.15z"/> 558.47,559.84l-4.79,10.68c-0.35,0.9,0,1.94,0.9,2.29c0.21,0.14,0.49,0.21,0.7,0.21c0.69,0,1.31-0.42,1.59-1.04 l4.72-10.62c0.2-0.35,0.28-0.69,0.2-1.04c-0.14-0.98-0.97-1.6-1.94-1.46C559.22,558.94,558.74,559.29,558.47,559.84z"/> <path d="M529.46,625.06c-0.48,0.83-0.2,1.87,0.56,2.43c0.28,0.14,0.63,0.21,0.91,0.21c0.62,0,1.18-0.28,1.52-0.77l3.54-5.97 c0.56-0.83,0.28-1.87-0.56-2.43c-0.77-0.41-1.87-0.14-2.36,0.62L529.46,625.06z"/> <path d="M565.26,567.06c0.07,0.49,0.42,0.83,0.77,1.11c0.28,0.2,0.62,0.28,0.9,0.28c0.6M 2,0,1.18-0.35,1.52-0.83l4.72-7.77 c0.35-0.62,0.28-1.32-0.07-1.88c-0.35-0.55-1.04-0.83-1.66-0.76l-4.72,0.69c-0.48,0-0.9,0.28-1.18,0.62 c-0.28,0.35-0.41,0.83-0.35,1.32c0.14,0.83,0.9,1.46,1.73,1.46c0.14,0,0.28,0.07,0.35,0l1.04-0.14l-2.85,4.65 C565.19,566.16,565.13,566.64,565.26,567.06z"/> <path d="M282.35,254.87c0.35,0.21,0.69,0.35,1.04,0.35c0.56,0,1.11-0.28,1.39-0.69c0.28-0.35,0.41-0.83,0.35-1.25 c-0.07-0.48-0.28-0.9-0.69-1.18l-33.1-25.25c-0.69-0.56-1.87-0.35-2.43,0.35c-0.28,0.42-0.42,0.83-0.35,1.32 c0.07,0.48,0.35,0.83,0.69,1.11L282.35,254.87z"/> <path d="M243.77,225.45c0.28,0.21,0.62,0.35,0.98,0.35c0.55,0,1.1-0.28,1.38-0.69c0.62-0.77,0.49-1.88-0.28-2.43l-11.03-8.4 c-0.76-0.55-1.87-0.41-2.49,0.28c-0.28,0.42-0.35,0.83-0.28,1.32c0,0.41,0.28,0.83,0.62,1.18L243.77,225.45z"/> <path d="M228.23,213.17c0.56,0,1.04-0.28,1.39-0.7c0.28-0.35,0.42-0.83,0.35-1.31c-0.07-0.42-0.35-0.83-0.69-1.11 c-0.69-0.56-1.87-0.42-2.43,0.35c-0.56,0.77-0.42,1.8,0.35,2.43C227.47,213.03,227.82,213.17,228.23,213.17z"/> 42.4,376.76c0.28,0.2,0.7,0.35,1.04,0.35c0.56,0,1.11-0.21,1.39-0.7c0.28-0.35,0.41-0.83,0.35-1.25 c-0.07-0.49-0.28-0.9-0.7-1.18l-11.03-8.39c-0.69-0.56-1.87-0.42-2.43,0.35c-0.56,0.77-0.42,1.8,0.35,2.43L442.4,376.76z"/> <path d="M573.73,385.36c0.07,0,0.14,0,0.2,0c0.83,0,1.6-0.62,1.67-1.52l1.67-13.73c0.07-0.98-0.62-1.81-1.52-1.94 c-1.04-0.14-1.88,0.56-1.94,1.52l-1.6,13.74c-0.07,0.48,0.07,0.97,0.35,1.31C572.82,385.08,573.24,385.36,573.73,385.36z"/> <path d="M298.93,267.42c0.28,0.28,0.62,0.42,1.04,0.42c0.55,0,1.M 04-0.28,1.38-0.7c0.28-0.35,0.42-0.83,0.35-1.25 c-0.07-0.49-0.28-0.9-0.7-1.18l-5.48-4.23c-0.76-0.56-1.87-0.41-2.49,0.35c-0.56,0.76-0.35,1.87,0.35,2.43L298.93,267.42z"/> <path d="M572.9,392.3c0.07,0,0.14,0,0.14,0c0.9,0,1.67-0.69,1.8-1.52c0-0.49-0.14-0.97-0.41-1.32c-0.28-0.35-0.69-0.55-1.11-0.62 c-0.97-0.07-1.8,0.56-1.94,1.53C571.23,391.26,571.92,392.16,572.9,392.3z"/> <path d="M563.05,468.69c0.35,0.2,0.69,0.35,1.04,0.35c0.28,0,0.49-0.07,0.7-0.14c0.56-0.28,0.97-0.76,1.1-1.39l2.5-21.64 c0.07-0.91-0.62-1.81M -1.52-1.94c-0.98-0.14-1.8,0.62-1.94,1.52l-2.15,18.59l-13.39-10.13c-0.76-0.62-1.87-0.41-2.43,0.28 c-0.28,0.42-0.41,0.83-0.35,1.32c0.07,0.49,0.28,0.83,0.69,1.11L563.05,468.69z"/> <path d="M588.16,261.39c0.07,0,0.14,0,0.2,0c0.9,0,1.67-0.69,1.73-1.59l1.6-13.74c0.07-0.48-0.07-0.9-0.35-1.31 c-0.28-0.35-0.7-0.56-1.11-0.62c-1.04-0.07-1.81,0.56-1.94,1.52l-1.6,13.81C586.56,260.42,587.25,261.25,588.16,261.39z"/> <path d="M587.39,268.26c0.07,0,0.14,0,0.21,0c0.9,0,1.59-0.69,1.73-1.52c0-0.49-0.07-0.9-0.42-1.32 8-0.35-0.69-0.56-1.11-0.62c-1.04-0.14-1.8,0.62-1.94,1.52C585.73,267.29,586.49,268.12,587.39,268.26z"/> <path d="M576.09,364.69c0.07,0,0.14,0,0.2,0c0.91,0,1.67-0.62,1.73-1.52l4.86-41.35c0.07-0.9-0.56-1.8-1.52-1.94 c-1.04-0.14-1.8,0.62-1.94,1.59l-4.86,41.35c0,0.42,0.14,0.9,0.42,1.25C575.25,364.41,575.67,364.69,576.09,364.69z"/> <path d="M541.75,452.45c0.35,0.21,0.69,0.35,1.04,0.35c0.55,0,1.04-0.28,1.38-0.7c0.28-0.35,0.42-0.83,0.35-1.25 c-0.07-0.49-0.28-0.9-0.63-1.18l-11.1-8.39c-0.69-0.56-1.87-0.42-2.43,0.35M c-0.28,0.35-0.42,0.77-0.35,1.25 c0.07,0.49,0.35,0.9,0.7,1.18L541.75,452.45z"/> <path d="M582.54,309.54c0.07,0.07,0.14,0.07,0.21,0.07c0.9,0,1.67-0.69,1.73-1.52l0.83-6.94c0.07-0.9-0.62-1.8-1.53-1.94 c-0.97-0.07-1.87,0.62-1.94,1.6l-0.83,6.87c0,0.48,0.14,0.9,0.41,1.31C581.7,309.33,582.12,309.54,582.54,309.54z"/> <path d="M568.04,433.65c0.07,0,0.14,0,0.21,0c0.9,0,1.66-0.69,1.73-1.52l0.83-6.94c0.07-0.9-0.63-1.8-1.53-1.94 c-0.97-0.07-1.87,0.63-1.94,1.53l-0.83,6.94C566.44,432.68,567.07,433.51,568.04,433.65z"/>M <path d="M381.69,330.56c0.35,0.2,0.7,0.35,1.04,0.35c0.56,0,1.11-0.28,1.39-0.69c0.28-0.35,0.41-0.83,0.35-1.32 c-0.07-0.41-0.28-0.83-0.7-1.11l-33.09-25.25c-0.77-0.56-1.87-0.42-2.43,0.35c-0.28,0.35-0.42,0.83-0.35,1.32 c0.07,0.41,0.35,0.83,0.7,1.1L381.69,330.56z"/> <path d="M398.28,343.11c0.28,0.28,0.69,0.42,1.04,0.42c0.56,0,1.04-0.28,1.39-0.7c0.28-0.41,0.41-0.83,0.35-1.31 c-0.07-0.49-0.28-0.9-0.69-1.18l-5.55-4.17c-0.7-0.56-1.88-0.41-2.36,0.35c-0.27,0.35-0.41,0.77-0.35,1.25 c0.07,0.48,0.28,0.9,0.62,1.1M <path d="M343.05,301.07c0.35,0.28,0.69,0.41,1.1,0.41c0.49,0,1.04-0.28,1.39-0.69c0.56-0.77,0.35-1.88-0.35-2.43l-11.1-8.46 c-0.7-0.49-1.81-0.35-2.43,0.35c-0.56,0.77-0.41,1.88,0.35,2.43L343.05,301.07z"/> <path d="M426.93,364.48c0.56,0,1.04-0.21,1.31-0.62c0.35-0.42,0.42-0.83,0.42-1.32c-0.07-0.41-0.35-0.83-0.7-1.1 c-0.76-0.63-1.87-0.42-2.43,0.27c-0.28,0.42-0.41,0.83-0.35,1.32c0.07,0.41,0.28,0.83,0.69,1.11 C426.16,364.41,426.51,364.48,426.93,364.48z"/> <path d="M327.58,288.86c0.49,0,1.0M 4-0.27,1.39-0.69c0.28-0.35,0.35-0.83,0.35-1.31c-0.07-0.42-0.35-0.83-0.69-1.11 c-0.77-0.62-1.88-0.42-2.43,0.35c-0.28,0.35-0.41,0.77-0.35,1.25c0.07,0.49,0.28,0.9,0.69,1.18 C326.82,288.72,327.17,288.86,327.58,288.86z"/> <path d="M497.62,418.8c0.28,0.21,0.7,0.35,1.04,0.35c0.56,0,1.04-0.28,1.39-0.69c0.56-0.77,0.41-1.8-0.35-2.43l-5.56-4.16 c-0.69-0.62-1.87-0.41-2.36,0.28c-0.35,0.41-0.41,0.83-0.35,1.32c0,0.48,0.28,0.83,0.62,1.1L497.62,418.8z"/> <path d="M526.2,440.17c0.56,0,1.11-0.28,1.46-0.69c0.28-0.35,0.35-M 0.83,0.35-1.25c-0.07-0.48-0.35-0.9-0.69-1.18 c-0.77-0.56-1.87-0.41-2.43,0.35c-0.63,0.77-0.42,1.88,0.28,2.43C525.51,440.03,525.86,440.17,526.2,440.17z"/> <path d="M481.04,406.17c0.28,0.28,0.69,0.35,1.04,0.35c0.55,0,1.04-0.21,1.38-0.7c0.28-0.35,0.42-0.77,0.35-1.25 c-0.07-0.42-0.28-0.83-0.7-1.11l-33.09-25.25c-0.7-0.56-1.88-0.42-2.43,0.35c-0.28,0.35-0.41,0.76-0.35,1.25 c0.07,0.49,0.28,0.9,0.69,1.18L481.04,406.17z"/> <path d="M758.33,434.41c-0.35,0.28-0.56,0.77-0.56,1.25c0,0.42,0.21,0.83,0.56,1.18c0.28,0.35M c0.49,0,0.9-0.14,1.25-0.49c0.69-0.69,0.69-1.73,0-2.43C760.07,433.72,758.96,433.72,758.33,434.41z"/> <path d="M753.41,439.27l-9.85,9.78c-0.69,0.69-0.62,1.8,0,2.49c0.35,0.35,0.77,0.49,1.25,0.49c0.42,0,0.91-0.14,1.25-0.49 l9.78-9.78c0.69-0.69,0.69-1.8,0-2.49C755.21,438.65,754.03,438.65,753.41,439.27z"/> <path d="M935.18,257.99c-0.35,0.35-0.56,0.76-0.56,1.25c0,0.49,0.21,0.9,0.56,1.25c0.28,0.28,0.69,0.49,1.18,0.49 s0.9-0.21,1.25-0.49c0.63-0.69,0.63-1.8,0-2.49C936.91,257.37,935.8,257.37,9M <path d="M841.8,351.09l-9.78,9.78c-0.69,0.69-0.69,1.8,0,2.49c0.35,0.28,0.77,0.49,1.18,0.49c0.49,0,0.9-0.21,1.25-0.49l9.85-9.85 c0.62-0.62,0.62-1.73,0-2.43C843.6,350.47,842.49,350.47,841.8,351.09z"/> <path d="M827.09,365.8l-29.48,29.41c-0.35,0.28-0.49,0.7-0.49,1.18c0,0.49,0.14,0.91,0.49,1.25c0.35,0.35,0.77,0.48,1.25,0.48 c0.42,0,0.91-0.14,1.25-0.48l29.41-29.42c0.35-0.28,0.49-0.69,0.56-1.18c0-0.49-0.2-0.9-0.56-1.25 C828.89,365.17,827.71,365.17,827.09,365.8z"/> <path d="M846.72,346.17c-M 0.69,0.69-0.69,1.8,0,2.49c0.35,0.35,0.77,0.49,1.25,0.49c0.42,0,0.9-0.14,1.25-0.49 c0.62-0.69,0.62-1.8-0.07-2.49C848.52,345.54,847.41,345.54,846.72,346.17z"/> <path d="M787.75,405l-4.86,4.93c-0.69,0.62-0.69,1.73,0,2.43c0.28,0.35,0.77,0.48,1.18,0.48c0.49,0,0.9-0.14,1.25-0.48l4.93-4.93 c0.35-0.28,0.48-0.77,0.48-1.18c0-0.49-0.14-0.91-0.48-1.25C789.55,404.3,788.44,404.37,787.75,405z"/> <path d="M915.47,277.63l-29.42,29.41c-0.35,0.28-0.56,0.7-0.56,1.18c0,0.49,0.21,0.91,0.49,1.25c0.35,0.35,0.76,0.48,1.25,0.48 c0.49,0,0.9-0.14,1.25-0.48l29.48-29.42c0.28-0.28,0.49-0.69,0.49-1.18s-0.14-0.9-0.49-1.25C917.28,277,916.17,277,915.47,277.63z <path d="M876.21,316.82l-4.93,4.93c-0.69,0.62-0.69,1.73,0,2.43c0.35,0.35,0.77,0.48,1.25,0.48c0.42,0,0.83-0.14,1.18-0.48 l4.93-4.93c0.35-0.28,0.56-0.77,0.56-1.18c0-0.49-0.2-0.91-0.56-1.25C878.01,316.2,876.9,316.13,876.21,316.82z"/> <path d="M964.59,228.64l-4.93,4.86c-0.62,0.69-0.62,1.8,0,2.43c0.35,0.35,0.76,0.56,1.25,0.56c0.49,0,0.9-0.2,1.25-0.48l4.93-4.93 c0.63-0.7,0.63-1.7M 3,0-2.43C966.4,227.95,965.28,227.95,964.59,228.64z"/> <path d="M930.25,262.92l-9.85,9.78c-0.35,0.35-0.49,0.76-0.49,1.25c0,0.41,0.14,0.9,0.49,1.25c0.35,0.28,0.77,0.49,1.25,0.49 c0.42,0,0.9-0.21,1.18-0.49l9.85-9.85c0.7-0.62,0.7-1.73,0-2.43C932.05,262.22,930.87,262.22,930.25,262.92z"/> <path d="M710.4,486.38c0.49,0,0.91-0.21,1.25-0.56l29.48-29.35c0.28-0.35,0.48-0.83,0.48-1.25c0-0.49-0.2-0.9-0.48-1.25 c-0.62-0.62-1.81-0.62-2.5,0l-29.42,29.41c-0.69,0.7-0.69,1.73,0,2.43C709.49,486.17,709.91,486.38,710.4,486.38zM <path d="M695.69,501.01c0.48,0,0.9-0.14,1.18-0.48l4.93-4.93c0.35-0.28,0.56-0.7,0.56-1.18c0-0.49-0.21-0.91-0.56-1.25 c-0.63-0.69-1.73-0.62-2.43,0l-4.93,4.93c-0.62,0.7-0.62,1.73,0,2.43C694.79,500.87,695.21,501.01,695.69,501.01z"/> <path d="M669.88,522.59c-0.28,0.28-0.48,0.77-0.48,1.18c0,0.49,0.14,0.9,0.48,1.25c0.35,0.35,0.77,0.49,1.25,0.49 c0.48,0,0.9-0.14,1.25-0.49c0.28-0.35,0.49-0.76,0.49-1.18c0-0.48-0.21-0.9-0.49-1.25C671.68,521.9,670.58,521.9,669.88,522.59z" <path d="M664.96,527.45l-9.78,9.8M 5c-0.69,0.62-0.69,1.73,0,2.43c0.35,0.35,0.77,0.49,1.25,0.49c0.41,0,0.9-0.14,1.18-0.49 l9.85-9.78c0.28-0.35,0.49-0.76,0.49-1.18c0-0.48-0.14-0.97-0.49-1.31C666.76,526.82,665.65,526.82,664.96,527.45z"/> <path d="M789.21,394.52c-0.49,0-0.9,0.14-1.25,0.49c-0.7,0.69-0.7,1.8,0,2.49c0.35,0.28,0.76,0.49,1.25,0.49s0.9-0.21,1.25-0.56 c0.63-0.62,0.63-1.73,0-2.43C790.11,394.66,789.62,394.52,789.21,394.52z"/> <path d="M812.03,371.7c0,0.49,0.14,0.9,0.49,1.25c0.35,0.35,0.76,0.56,1.25,0.56c0.41,0,0.9-0.2,1.18-0.56l4.93-4.M c0.7-0.7,0.7-1.81,0-2.5c-0.62-0.62-1.8-0.62-2.43,0l-4.93,4.93C812.17,370.79,812.03,371.28,812.03,371.7z"/> <path d="M784.63,391.12l5.27-4.58c0.35-0.35,0.56-0.76,0.56-1.25c0.07-0.41-0.14-0.9-0.41-1.18c-0.56-0.77-1.73-0.83-2.43-0.21 l-5.2,4.58c-0.42,0.28-0.63,0.7-0.63,1.18c-0.07,0.49,0.14,0.9,0.42,1.25c0.35,0.35,0.83,0.62,1.31,0.62 C783.94,391.54,784.35,391.4,784.63,391.12z"/> <path d="M816.06,363.79c0.77-0.62,0.83-1.73,0.21-2.43c-0.63-0.69-1.81-0.76-2.5-0.2c-0.35,0.35-0.56,0.76-0.56,1.25 41,0.14,0.9,0.42,1.18c0.35,0.41,0.76,0.62,1.31,0.62C815.37,364.2,815.78,364.07,816.06,363.79z"/> <path d="M770.75,414.57c-0.62-0.62-1.8-0.62-2.43,0l-29.48,29.42c-0.35,0.35-0.49,0.77-0.49,1.25c0,0.42,0.14,0.91,0.49,1.25 c0.35,0.28,0.76,0.48,1.25,0.48c0.42,0,0.9-0.2,1.25-0.48l29.42-29.42C771.45,416.38,771.45,415.27,770.75,414.57z"/> <path d="M634.16,537.3c-0.98-0.14-1.81,0.56-1.94,1.46c-0.07,0.49,0,0.97,0.28,1.32c0.28,0.35,0.69,0.62,1.18,0.69l6.87,0.97 c0.07,0,0.14,0,0.28,0c0.83,0,1.52-0.62,1.66-1.46c0.14-0M .97-0.48-1.87-1.46-2.01L634.16,537.3z"/> <path d="M820.15,359.7c0.42,0,0.83-0.21,1.18-0.49l10.47-9.09c0.35-0.28,0.56-0.69,0.56-1.18c0.07-0.41-0.07-0.9-0.41-1.25 c-0.56-0.69-1.73-0.77-2.43-0.21l-10.47,9.16c-0.69,0.62-0.76,1.73-0.2,2.43C819.18,359.49,819.66,359.7,820.15,359.7z"/> <path d="M774.43,412.7c0.49,0,0.9-0.21,1.25-0.56l9.78-9.78c0.35-0.35,0.56-0.77,0.56-1.18c0-0.49-0.21-0.97-0.49-1.25 c-0.69-0.7-1.8-0.7-2.49,0l-9.78,9.78c-0.35,0.35-0.56,0.76-0.56,1.18c0,0.48,0.21,0.97,0.56,1.25 C773.53,412.49,77M 4.01,412.7,774.43,412.7z"/> <path d="M876.42,306.83c-0.7,0.69-0.7,1.8,0,2.49c0.28,0.28,0.69,0.49,1.18,0.49c0.48,0,0.9-0.21,1.25-0.49 c0.35-0.35,0.49-0.83,0.49-1.25c0-0.49-0.14-0.9-0.49-1.25C878.22,306.13,877.04,306.2,876.42,306.83z"/> <path d="M632.77,523l10.47-9.09c0.35-0.35,0.56-0.77,0.56-1.18c0.07-0.49-0.07-0.97-0.41-1.32c-0.63-0.62-1.73-0.76-2.43-0.14 l-10.47,9.09c-0.35,0.35-0.56,0.77-0.62,1.18c0,0.49,0.14,0.91,0.41,1.25c0.35,0.41,0.83,0.62,1.32,0.62 C632,523.42,632.42,523.28,632.77,523z"/> d="M874.4,313c0-0.49-0.14-0.97-0.49-1.25c-0.62-0.7-1.8-0.7-2.43,0l-3.61,3.6c-0.62-0.21-1.25-0.07-1.67,0.35l-31.42,27.27 c-0.35,0.28-0.62,0.69-0.62,1.18c-0.07,0.41,0.14,0.9,0.41,1.25c0.62,0.69,1.73,0.83,2.43,0.21l3.82-3.33l-13.6,13.53 c-0.63,0.69-0.63,1.8,0,2.43c0.35,0.35,0.76,0.56,1.25,0.56s0.9-0.2,1.25-0.56l29.48-29.34c0.62-0.69,0.62-1.8,0-2.5h-0.07 l2.64-2.29c0.69,0.56,1.73,0.49,2.36-0.14l9.78-9.78C874.26,313.84,874.4,313.42,874.4,313z"/> <path d="M690.35,472.98l5.27-4.57c0.35-0.28,0.56-0.7,0.56-1.18cM 0.07-0.42-0.07-0.91-0.41-1.25c-0.56-0.69-1.73-0.76-2.43-0.21 l-5.27,4.58c-0.35,0.28-0.56,0.7-0.56,1.18c-0.07,0.49,0.14,0.91,0.42,1.25c0.28,0.41,0.76,0.62,1.31,0.62 C689.66,473.4,690.07,473.26,690.35,472.98z"/> <path d="M680.08,479.57c-0.63-0.62-1.81-0.76-2.5-0.14l-31.43,27.26c-0.35,0.35-0.56,0.77-0.56,1.25 c-0.07,0.42,0.14,0.91,0.42,1.25c0.35,0.35,0.76,0.56,1.31,0.56c0.42,0,0.77-0.14,1.11-0.42l31.43-27.26 C680.63,481.45,680.71,480.34,680.08,479.57z"/> <path d="M686.05,500.87c0.42,0,0.9-0.21,1.25-0.5M 6l9.78-9.78c0.7-0.69,0.7-1.73,0-2.43c-0.62-0.7-1.8-0.7-2.43,0l-9.85,9.78 c-0.28,0.35-0.49,0.76-0.49,1.18c0,0.48,0.14,0.97,0.49,1.25C685.14,500.66,685.56,500.87,686.05,500.87z"/> <path d="M774.36,397.71c-0.62-0.69-1.81-0.77-2.5-0.14l-31.35,27.26c-0.77,0.62-0.83,1.73-0.21,2.43 c0.28,0.42,0.76,0.62,1.31,0.62c0.42,0,0.83-0.14,1.11-0.41l31.43-27.26C774.85,399.51,774.99,398.48,774.36,397.71z"/> <path d="M702,483.19c-0.62-0.62-1.8-0.62-2.49,0c-0.62,0.69-0.62,1.8,0,2.49c0.35,0.28,0.83,0.49,1.25,0.49 9-0.21,1.25-0.49C702.7,484.99,702.7,483.88,702,483.19z"/> <path d="M682.37,502.82c-0.69-0.7-1.8-0.7-2.49,0l-29.42,29.34c-0.35,0.35-0.56,0.77-0.56,1.25c0,0.49,0.21,0.91,0.56,1.25 c0.28,0.35,0.77,0.48,1.18,0.48c0.49,0,0.9-0.14,1.25-0.48l29.48-29.42C683,504.55,683,503.44,682.37,502.82z"/> <path d="M719.49,443.02c-0.35,0.35-0.56,0.76-0.56,1.25c-0.07,0.42,0.14,0.9,0.41,1.25c0.35,0.35,0.77,0.56,1.32,0.56 c0.41,0,0.83-0.14,1.11-0.41c0.69-0.62,0.83-1.67,0.2-2.43C721.36,442.53,720.25,442.46,719.49,443.02z"/> th d="M625.21,524.95c-0.35,0.28-0.56,0.7-0.56,1.18c-0.07,0.49,0.07,0.9,0.41,1.25c0.28,0.35,0.77,0.62,1.32,0.62 c0.41,0,0.83-0.21,1.11-0.49c0.69-0.56,0.83-1.67,0.2-2.43C627.08,524.39,625.9,524.32,625.21,524.95z"/> <path d="M728.99,453.84l-4.86,4.86c-0.35,0.35-0.56,0.77-0.56,1.25c0,0.42,0.21,0.9,0.56,1.25c0.28,0.28,0.77,0.48,1.18,0.48 c0.49,0,0.9-0.2,1.25-0.48l4.93-4.93c0.28-0.35,0.49-0.77,0.49-1.25c0-0.41-0.14-0.9-0.49-1.18 C730.86,453.15,729.68,453.15,728.99,453.84z"/> <path d="M727.05,441.14l10.47-9.0M 9c0.35-0.35,0.56-0.77,0.56-1.18c0.07-0.49-0.07-0.98-0.41-1.32c-0.56-0.69-1.73-0.76-2.43-0.14 l-10.47,9.09c-0.35,0.28-0.56,0.7-0.62,1.18c0,0.49,0.14,0.9,0.41,1.25c0.35,0.41,0.83,0.62,1.32,0.62S726.7,441.42,727.05,441.14 <path d="M672.87,504.97l4.85-4.93c0.35-0.28,0.56-0.77,0.56-1.18c0-0.49-0.2-0.9-0.56-1.25c-0.62-0.7-1.73-0.7-2.43,0l-4.93,4.85 c-0.62,0.7-0.62,1.81,0,2.5c0.35,0.28,0.77,0.49,1.25,0.49C672.1,505.45,672.52,505.24,672.87,504.97z"/> <path d="M684.93,486.23c0-0.48-0.14-0.9-0.48-1.31c-0.56M -0.7-1.73-0.7-2.43-0.14l-31.42,27.27c-0.7,0.69-0.77,1.8-0.14,2.49 c0.35,0.35,0.83,0.62,1.32,0.62c0.41,0,0.76-0.2,1.1-0.48l31.43-27.27C684.66,487.14,684.87,486.65,684.93,486.23z"/> <path d="M717.05,458.42c-0.69-0.69-1.8-0.62-2.49,0l-13.94,13.94c0-0.41-0.14-0.76-0.42-1.04c-0.62-0.7-1.8-0.77-2.43-0.21 l-5.28,4.58c-0.69,0.62-0.83,1.67-0.2,2.43c0.56,0.62,1.39,0.77,2.08,0.42l-9.3,9.3c-0.62,0.62-0.62,1.73,0,2.43 c0.35,0.35,0.83,0.49,1.25,0.49c0.49,0,0.9-0.14,1.25-0.49l29.48-29.42C717.75,460.22,717.68,459.11,717M <path d="M723.3,449.68l-3.81,3.81c-0.62,0.69-0.62,1.8,0,2.5c0.35,0.28,0.76,0.48,1.25,0.48c0.42,0,0.9-0.2,1.25-0.48l9.72-9.72 c0.62-0.69,0.62-1.73,0-2.43c-0.62-0.63-1.73-0.7-2.43-0.14l-0.07,0.14c-0.14,0.07-0.2,0.2-0.28,0.28l-3.88,3.81 c-0.41,0.07-0.77,0.21-1.11,0.48C723.58,448.7,723.37,449.19,723.3,449.68z"/> <path d="M647.06,529.94c0.49,0,0.9-0.14,1.18-0.48c0.35-0.35,0.56-0.77,0.56-1.25c0-0.41-0.2-0.9-0.56-1.25 c-0.62-0.62-1.73-0.62-2.43,0c-0.35,0.35-0.49,0.83-0.49,1.25c0,0.49,0.14,0.91,M 0.49,1.25S646.57,529.94,647.06,529.94z"/> <path d="M643.38,534.32c0.62-0.63,0.62-1.73,0-2.43c-0.42-0.41-1.04-0.56-1.53-0.48l-10.82-1.53c-0.42,0-0.9,0.07-1.32,0.35 c0,0,0,0-0.07,0.07c-0.49,0.41-0.69,1.11-0.49,1.8c0.14,0.62,0.7,1.11,1.39,1.18l11.24,1.6c0.14,0.07,0.21,0.07,0.28,0.07 c0.49,0,0.9-0.21,1.25-0.56L643.38,534.32z"/> <path d="M647.82,516.76c-0.62-0.62-1.73-0.77-2.43-0.14l-10.48,9.09c-0.76,0.62-0.83,1.73-0.2,2.49c0.35,0.35,0.83,0.56,1.31,0.56 c0.42,0,0.83-0.14,1.18-0.41l10.41-9.09C648.38,518.63,6148.44,517.53,647.82,516.76z"/> " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/M 22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:29035fa7-72fa-461d-89c4-5996076ee2bb" xmpMM:InstanceID="xmp.iid:5cf2839d-9b6e-4d6d-b530-4db2d0e244f3" xmpMM:OriginalDocumentID="xmp.did:c289f3ce-8a11-401f-bd36-6M 264983f15f2" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413420303539" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:23:38+11:00" xmp:ModifyDate="2023:02:15T09:23:38+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:6fca973e-432a-45fd-9fc2-9446786eb96c" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:23:40"/> </rdf:Seq> </xmpMM:History> </rdf:DeM scription> </rdf:RDF> </x:xmpmeta> M M M <?xpacket end="w"?>h! urn:mpeg:mpegB:cicp:systems:auxiliary:alpha " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="httM p://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:775a286a-c846-42b7-9497-9cc210d0ebf6" xmpMM:InstanceID="xmp.iid:7d298356-6762-442a-859d-311d4f95461c" xmpMM:OriginalDocumentID="xmp.did:90727312-2408-4745-bdc7-8b064f71f1cc" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413408246378" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:23:26M +11:00" xmp:ModifyDate="2023:02:15T09:23:26+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:da95b627-f085-4c54-a558-ec5d22d2bb1f" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:23:28"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M MD <?xpacket end="w"?>h! FjDOUT:C05DB0139575275BD75DCE4D28D834061A8E4FD3B9C8F5AF925031BF06028281 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1M .0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:a644d668-10c1-4d5d-bf7f-aa665dbeaf46" xmpMM:InstanceID="xmp.iid:14f0febc-f21f-4c8c-ad3d-5d612585c066" xmpMM:OriginalDocumentID="xmp.did:186733c8-1b5d-4f41-8708-697f908650e1" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamM p="1676413382931668" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:22:55+11:00" xmp:ModifyDate="2023:02:15T09:22:55+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:61208b19-800c-4e34-a60e-fed39a6d1405" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:23:02"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdfM :about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:08a280c6-4ea3-41f3-814e-ededd16d94c8" xmpMM:InstanceID="xmp.iid:642abd1b-99ec-4e19-b4e8-1d11a51e70d4" xmpMM:OriginalDocumentID="xmp.did:ed3dee0b-62cd-4987-9b3b-0c57550d087f" dc:Format="image/webp" GIMPM :API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676408068016951" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T07:54:26+11:00" xmp:ModifyDate="2023:02:15T07:54:26+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:fa3f7e5b-1043-439a-b27d-538a93ba7039" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T07:54:28"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUaM AUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! text/html;charset=utf-8 <html><script>function e(e){"use strict";return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100,n.height=100,n.canvas.width=n.width,n.canvas.height=n.height,"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",(function(){document.body.appendChild(n.canvas)}))),y(),n.MAGIC=161533525,n.RGB=0,n.HSV=1,n.HSB=1,n.CHORD=0,n.PIE=1,n.OPEN=2,n.RADIUS=1,n.CORNER=2,n.CORNERS=3,n.ROUND="round",n.SQM UARE="butt",n.PROJECT="square",n.MITER="miter",n.BEVEL="bevel",n.CLOSE=1,n.BLEND="source-over",n.REMOVE="destination-out",n.ADD="lighter",n.DARKEST="darken",n.LIGHTEST="lighten",n.DIFFERENCE="difference",n.SUBTRACT="subtract",n.EXCLUSION="exclusion",n.MULTIPLY="multiply",n.SCREEN="screen",n.REPLACE="copy",n.OVERLAY="overlay",n.HARD_LIGHT="hard-light",n.SOFT_LIGHT="soft-light",n.DODGE="color-dodge",n.BURN="color-burn",n.NORMAL="normal",n.ITALIC="italic",n.BOLD="bold",n.BOLDITALIC="italic bold",n.CENTER="center",n.LEM FT="left",n.RIGHT="right",n.TOP="top",n.BOTTOM="bottom",n.BASELINE="alphabetic",n.LANDSCAPE="landscape",n.PORTRAIT="portrait",n.ALT=18,n.BACKSPACE=8,n.CONTROL=17,n.DELETE=46,n.DOWN_ARROW=40,n.ENTER=13,n.ESCAPE=27,n.LEFT_ARROW=37,n.OPTION=18,n.RETURN=13,n.RIGHT_ARROW=39,n.SHIFT=16,n.TAB=9,n.UP_ARROW=38,n.HALF_PI=Math.PI/2,n.PI=Math.PI,n.QUARTER_PI=Math.PI/4,n.TAU=2*Math.PI,n.TWO_PI=2*Math.PI,n.THRESHOLD=1,n.GRAY=2,n.OPAQUE=3,n.INVERT=4,n.POSTERIZE=5,n.DILATE=6,n.ERODE=7,n.BLUR=8,n.ARROW="default",n.CROSS="crosshair"M ,n.HAND="pointer",n.MOVE="move",n.TEXT="text",n.VIDEO={video:!0,audio:!1},n.AUDIO={video:!1,audio:!0},n.SHR3=1,n.LCG=2,n.HARDWARE_FILTERS=!0,n.hint=function(e,t){n[e]=t},n.frameCount=0,n.mouseX=0,n.mouseY=0,n.pmouseX=0,n.pmouseY=0,n.mouseButton=null,n.keyIsPressed=!1,n.mouseIsPressed=!1,n.key=null,n.keyCode=null,n.pixels=null,n.accelerationX=0,n.accelerationY=0,n.accelerationZ=0,n.rotationX=0,n.rotationY=0,n.rotationZ=0,n.relRotationX=0,n.relRotationY=0,n.relRotationZ=0,n.pAccelerationX=0,n.pAccelerationY=0,n.pAcceM lerationZ=0,n.pRotationX=0,n.pRotationY=0,n.pRotationZ=0,n.pRelRotationX=0,n.pRelRotationY=0,n.pRelRotationZ=0,n.touches=[],n._styleCache=[{colorMode:n.RGB,noStroke:!1,noFill:!1,ellipseMode:n.CENTER,rectMode:n.CORNER,curveDetail:20,curveAlpha:0,textFont:"sans-serif",textSize:12,textLeading:12,textStyle:"normal"}],n._style=n._styleCache[n._styleCache.length-1],n._noLoop=!1,n._pixelDensity=1,n._frameRate=null,n._tint=null;let r=null,a=!0,i=[],l=null,s=0,u={},c=0,h=null,f=null,d=null;Object.defineProperty(n,"deviceOriM entation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}}),Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}}),Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}}),Object.defineProperty(n,"drawingContext",{get:function(){return o}}),n.createCanvas=function(e,t){return n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,y(),n.canvas},n.resizeCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t},nM .createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o},n.pixelDensity=function(e){return null==e||(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),y()),n._pixelDensity},n.map=function(e,t,n,o,r,a){let i=o+1*(e-t)/(n-t)*(r-o);return a?o<r?Math.min(Math.max(i,o),r):Math.min(Math.max(i,r),o):i},n.lerp=function(eM ,t,n){return e*(1-n)+t*n},n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)},n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])},n.norm=function(e,t,o){return n.map(e,t,o,0,1)},n.sq=function(e){return e*e},n.fract=function(e){return e-Math.floor(e)},n.degrees=function(e){return 180*e/Math.PI},n.radians=function(e){return e*Math.PI/180},n.abs=Math.abs,n.ceil=MM ath.ceil,n.exp=Math.exp,n.floor=Math.floor,n.log=Math.log,n.mag=Math.hypot,n.max=Math.max,n.min=Math.min,n.round=Math.round,n.sqrt=Math.sqrt,n.sin=Math.sin,n.cos=Math.cos,n.tan=Math.tan,n.asin=Math.asin,n.acos=Math.acos,n.atan=Math.atan,n.atan2=Math.atan2,n.Vector=function(e,t,o){let r=this;r.x=e||0,r.y=t||0,r.z=o||0;let a=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function s(){null==i&&(i=r.x*r.x+r.y*r.y+r.z*r.z,a=Math.sqrt(i))}function u(){i=null,a=null}r.set=function(M e,t,n){r.x=e||0,r.y=t||0,r.z=n||0},r.copy=function(){return new n.Vector(r.x,r.y,r.z)},r.add=function(){let e=l.apply(null,arguments);return r.x+=e.x,r.y+=e.y,r.z+=e.z,u(),r},r.rem=function(){let e=l.apply(null,arguments);return r.x%=e.x,r.y%=e.y,r.z%=e.z,u(),r},r.sub=function(){let e=l.apply(null,arguments);return r.x-=e.x,r.y-=e.y,r.z-=e.z,u(),r},r.mult=function(){let e=l.apply(null,arguments);return r.x*=e.x,r.y*=e.y,r.z*=e.z,u(),r},r.div=function(){let e=l.apply(null,arguments);return r.x/=e.x,r.y/=e.y,r.z/=e.zM ,u(),r},r.mag=function(){return s(),a},r.magSq=function(){return s(),i},r.dot=function(){let e=l.apply(null,arguments);return r.x*e.x+r.y*e.y+r.z*e.z},r.dist=function(){let e=l.apply(null,arguments),t=r.x-e.x,n=r.y-e.y,o=r.z-e.z;return Math.sqrt(t*t+n*n+o*o)},r.cross=function(){let e=l.apply(null,arguments),t=r.y*e.z-r.z*e.y,n=r.z*e.x-r.x*e.z,o=r.x*e.y-r.y*e.x;return r.x=t,r.y=n,r.z=o,u(),r},r.normalize=function(){s();let e=a;return r.x/=e,r.y/=e,r.z/=e,a=1,i=1,r},r.limit=function(e){s();if(a>e){let t=e/a;r.x*=t,r.M y*=t,r.z*=t,a=e,i=e*e}return r},r.setMag=function(e){s();let t=e/a;return r.x*=t,r.y*=t,r.z*=t,a=e,i=e*e,r},r.heading=function(){return Math.atan2(r.y,r.x)},r.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=r.x*t-r.y*n,a=r.x*n+r.y*t;return r.x=o,r.y=a,r},r.angleBetween=function(){let e=l.apply(null,arguments);const t=r.dot(e)/(r.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*Math.sign(r.cross(e).z||1)},r.lerp=function(e,t){return r.x=r.x*(1-t)+e.x*t,r.y=r.y*(1-t)+e.y*t,r.z=r.z*(1-t)+e.z*M t,u(),r},r.reflect=function(e){return e.normalize(),r.sub(e.mult(2*r.dot(e)))},r.array=function(){return[r.x,r.y,r.z]},r.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-r.x)<t&&Math.abs(e.y-r.y)<t&&Math.abs(e.z-r.z)<t},r.fromAngle=function(e,t){return null==t&&(t=1),a=t,i=t*t,r.x=t*Math.cos(e),r.y=t*Math.sin(e),r.z=0,r},r.fromAngles=function(e,t,n){null==n&&(n=1),a=n,i=n*n;const o=Math.cos(t),l=Math.sin(t),s=Math.cos(e),u=Math.sin(e);return r.x=n*u*l,r.y=-n*s,r.z=n*u*o,r},r.random2M D=function(){return a=1,i=1,r.fromAngle(Math.random()*Math.PI*2)},r.random3D=function(){return a=1,i=1,r.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},r.toString=function(){return`[${r.x}, ${r.y}, ${r.z}]`}},n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)},n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)},n.Vector.sub=function(e,t){return new n.Vector(e.x-t.x,e.y-t.y,e.z-t.z)},n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):nM ew n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)},n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)},n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)},n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)},n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.z=e.z*(1-o)+t.z*o)},n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAnglM es","random2D","random3D"])n.Vector[e]=function(t,o,r){return(new n.Vector)[e](t,o,r)};function p(e,t,n){let o,r,a,i,l,s,u,c,h;if(0==t)return[255*(o=n),255*(r=n),255*(a=n)];switch((i=e)>360&&(i=0),u=n*(1-t),c=n*(1-t*(s=(i/=60)-(l=~~i))),h=n*(1-t*(1-s)),l){case 0:o=n,r=h,a=u;break;case 1:o=c,r=n,a=u;break;case 2:o=u,r=n,a=h;break;case 3:o=u,r=c,a=n;break;case 4:o=h,r=u,a=n;break;default:o=n,r=u,a=c}return[255*o,255*r,255*a]}function y(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}fM unction m(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function g(e,t,r,a,i,l,s,u){if(n._style.noFill&&n._style.noStroke)return;let c=m(i),h=m(l);o.beginPath();for(let i=0;i<u+1;i++){let l=i/u,s=n.lerp(c,h,l),f=Math.cos(s)*r/2,d=Math.sin(s)*a/2;o[i?"lineTo":"moveTo"](e+f,t+d)}s==n.CHORD?o.closePath():s==n.PIE&&(o.lineTo(e,t),o.closePath()),n._style.noFill||o.fill(),n._style.noStroke||o.stroke()}function v(e,t,r,a){n._style.noFill&&n._style.noStroke||(o.beginPath(),oM .ellipse(e,t,r/2,a/2,0,0,2*Math.PI),n._style.noFill||o.fill(),n._style.noStroke||o.stroke())}function M(e,t,r,a,i,l,s,u){if(n._style.noFill&&n._style.noStroke)return;if(null==i)return function(e,t,r,a){n._style.noFill||o.fillRect(e,t,r,a),n._style.noStroke||o.strokeRect(e,t,r,a)}(e,t,r,a);if(null==l)return M(e,t,r,a,i,i,i,i);const c=Math.min(Math.abs(a),Math.abs(r))/2;i=Math.min(c,i),l=Math.min(c,l),u=Math.min(c,u),s=Math.min(c,s),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+r,t,e+r,t+a,l),o.arcTo(e+r,t+a,e,t+a,s),o.arcM To(e,t+a,e,t,u),o.arcTo(e,t,e+r,t,i),o.closePath(),n._style.noFill||o.fill(),n._style.noStroke||o.stroke()}function _(){i=[]}n.createVector=function(e,t,o){return new n.Vector(e,t,o)},n.curvePoint=function(e,t,n,o,r){const a=r*r*r,i=r*r;return e*(-.5*a+i-.5*r)+t*(1.5*a-2.5*i+1)+n*(-1.5*a+2*i+.5*r)+o*(.5*a-.5*i)},n.bezierPoint=function(e,t,n,o,r){const a=1-r;return Math.pow(a,3)*e+3*Math.pow(a,2)*r*t+3*a*Math.pow(r,2)*n+Math.pow(r,3)*o},n.curveTangent=function(e,t,n,o,r){const a=r*r;return e*(-3*a/2+2*r-.5)+t*(9*a/2M -5*r)+n*(-9*a/2+4*r+.5)+o*(3*a/2-r)},n.bezierTangent=function(e,t,n,o,r){const a=1-r;return 3*o*Math.pow(r,2)-3*n*Math.pow(r,2)+6*n*a*r-6*t*a*r+3*t*Math.pow(a,2)-3*e*Math.pow(a,2)},n.Color=function(e,t,n,o){let r=this;r.MAGIC=786698,r._r=e,r._g=t,r._b=n,r._a=o,r._h=0,r._s=0,r._v=0,r._hsvInferred=!1,r.setRed=function(e){r._r=e,r._hsvInferred=!1},r.setGreen=function(e){r._g=e,r._hsvInferred=!1},r.setBlue=function(e){r._b=e,r._hsvInferred=!1},r.setAlpha=function(e){r._a=e/255,r._hsvInferred=!1},r._inferHSV=function(){M r._hsvInferred||([r._h,r._s,r._v]=function(e,t,n){let o,r,a,i,l;return o=e<t?e<n?e:n:t<n?t:n,0==(l=100*(r=e>t?e>n?e:n:t>n?t:n)/255)?[a=0,i=0,l]:0==(i=100*(r-o)/r)?[a=0,i,l]:(a=r==e?0+60*(t-n)/(r-o):r==t?120+60*(n-e)/(r-o):240+60*(e-t)/(r-o),[a,i,l])}(r._r,r._g,r._b),r._hsvInferred=!0)},r.toString=function(){return`rgba(${Math.round(r._r)},${Math.round(r._g)},${Math.round(r._b)},${~~(1e3*r._a)/1e3})`}},n.colorMode=function(e){n._style.colorMode=e},n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGICM )return arguments[0];if(n._style.colorMode==n.RGB){if(1==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)retM urn new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null},n.red=function(e){return e._r},n.green=function(e){return e._g},n.blue=function(e){return e._b},n.alpha=function(e){return 255*e._a},n.hue=function(e){return e._inferHSV(),e._h},n.saturation=function(e){return e._inferHSV(),e._s},n.brightnM ess=function(e){return e._inferHSV(),e._v},n.lightness=function(e){return 100*(.2126*e._r+.7152*e._g+.0722*e._b)/255},n.lerpColor=function(e,t,o){return n._style.colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var r=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.mapM (o,0,1,e,t-360)]];return r.sort(((e,t)=>e[0]-t[0])),(r[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))},n.strokeWeight=function(e){n._style_noStroke=!1,o.lineWidth=e},n.stroke=function(){if(n._style.noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._style.noStroke=!0:o.strokeStyle=e},n.noStroke=function(){n._style.noStroke=!0},n.fill=fM unction(){if(n._style.noFill=!1,"string"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._style.noFill=!0:o.fillStyle=e},n.noFill=function(){n._style.noFill=!0},n.blendMode=function(e){o.globalCompositeOperation=e},n.strokeCap=function(e){o.lineCap=e},n.strokeJoin=function(e){o.lineJoin=e},n.ellipseMode=function(e){n._style.ellipseMode=e},n.rectMode=function(e){n._style.rectMode=e},n.curveDetail=function(e){n._style.curveDetail=e},n.curveAlpha=function(e){n._M style.curveAlpha=e},n.curveTightness=function(e){n._style.curveAlpha=e},n.clear=function(){o.clearRect(0,0,n.width,n.height)},n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity),o.fillStyle="string"==typeof arguments[0]?arguments[0]:n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.height),o.restore()},n.line=function(e,t,r,a){n._style.noStroke||(o.beginPath(),o.moveTo(e,tM ),o.lineTo(r,a),o.stroke())},n.arc=function(e,t,o,r,a,i,l,s){if(a==i)return n.ellipse(e,t,o,r);null==s&&(s=25),null==l&&(l=n.PIE),n._style.ellipseMode==n.CENTER?g(e,t,o,r,a,i,l,s):n._style.ellipseMode==n.RADIUS?g(e,t,2*o,2*r,a,i,l,s):n._style.ellipseMode==n.CORNER?g(e+o/2,t+r/2,o,r,a,i,l,s):n._style.ellipseMode==n.CORNERS&&g((e+o)/2,(t+r)/2,o-e,r-t,a,i,l,s)},n.ellipse=function(e,t,o,r){null==r&&(r=o),n._style.ellipseMode==n.CENTER?v(e,t,o,r):n._style.ellipseMode==n.RADIUS?v(e,t,2*o,2*r):n._style.ellipseMode==n.CORNM ER?v(e+o/2,t+r/2,o,r):n._style.ellipseMode==n.CORNERS&&v((e+o)/2,(t+r)/2,o-e,r-t)},n.circle=function(e,t,o){return n.ellipse(e,t,o,o)},n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()},n.rect=function(e,t,o,r,a,i,l,s){n._style.rectMode==n.CENTER?M(e-o/2,t-r/2,o,r,a,i,l,s):n._style.rectMode==n.RADIUS?M(e-o,t-r,2*o,2*r,a,i,l,s):n._style.rectMode==n.CORNER?M(e,t,o,r,a,i,l,s):n._style.rectMode==n.CORNERS&&M(e,t,o-e,r-t,a,i,l,s)},n.square=function(e,t,o,r,a,i,l){returnM n.rect(e,t,o,o,r,a,i,l)},n.beginShape=function(){_(),o.beginPath(),a=!0},n.beginContour=function(){o.closePath(),_(),a=!0},n.endContour=function(){_(),a=!0},n.vertex=function(e,t){_(),a?o.moveTo(e,t):o.lineTo(e,t),a=!1},n.bezierVertex=function(e,t,n,r,a,i){_(),o.bezierCurveTo(e,t,n,r,a,i)},n.quadraticVertex=function(e,t,n,r){_(),o.quadraticCurveTo(e,t,n,r)},n.bezier=function(e,t,o,r,a,i,l,s){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,r,a,i,l,s),n.endShape()},n.triangle=function(e,t,o,r,a,i){n.beginShape(),n.verM tex(e,t),n.vertex(o,r),n.vertex(a,i),n.endShape(n.CLOSE)},n.quad=function(e,t,o,r,a,i,l,s){n.beginShape(),n.vertex(e,t),n.vertex(o,r),n.vertex(a,i),n.vertex(l,s),n.endShape(n.CLOSE)},n.endShape=function(e){_(),e&&o.closePath(),n._style.noFill||o.fill(),n._style.noStroke||o.stroke(),n._style.noFill&&n._style.noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())},n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let r=function(e,t,n,o,r,a,i,l,s,u){function c(e,t,n,o,r,a){let i=Math.pow(o-t,2)+MathM .pow(r-n,2);return Math.pow(i,.5*a)+e}let h=[],f=c(0,e,t,n,o,u),d=c(f,n,o,r,a,u),p=c(d,r,a,i,l,u);for(let u=0;u<s;u++){let c=f+u/(s-1)*(d-f),y=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<y.length;e+=2)isNaN(y[e])&&(y[e]=1,y[e+1]=0),isFinite(y[e])||(y[e]>0?(y[e]=1,y[e+1]=0):(y[e]=0,y[e+1]=1));let m=e*y[0]+n*y[1],g=t*y[0]+o*y[1],v=n*y[2]+r*y[3],M=o*y[2]+a*y[3],_=r*y[4]+i*y[5],x=a*y[4]+l*y[5],w=m*y[6]+v*y[7],R=g*y[6]+M*y[7],I=vM *y[8]+_*y[9],C=M*y[8]+x*y[9],S=w*y[2]+I*y[3],E=R*y[2]+C*y[3];h.push([S,E])}return h}(...i[i.length-4],...i[i.length-3],...i[i.length-2],...i[i.length-1],n._style.curveDetail,n._style.curveAlpha);for(let e=0;e<r.length;e++)a?o.moveTo(...r[e]):o.lineTo(...r[e]),a=!1},n.curve=function(e,t,o,r,a,i,l,s){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,r),n.curveVertex(a,i),n.curveVertex(l,s),n.endShape()},n.translate=function(e,t){o.translate(e,t)},n.rotate=function(e){o.rotate(e)},n.scale=function(e,t){null==t&&(t=e),M o.scale(e,t)},n.applyMatrix=function(e,t,n,r,a,i){o.transform(e,t,n,r,a,i)},n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)},n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)},n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)},n.pushMatrix=n.push=function(){n._styleCache.push({...n._style}),n._style=n._styleCache[n._styleCache.length-1],o.save()},n.popMatrix=n.pop=function(){n._styleCache.length-1&&(n._styleCache.pop(),n._style=n._styleCache[n._styleCache.length-1],oM .restore())},n.image=function(e,t,r,a,i,l,s,u,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let t=e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(M e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),a?l?(u||(u=h.width),c||(c=h.height),o.drawImage(h,l,s,u,c,t,r,a,i),void d()):(o.drawImage(h,t,r,a,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,r,e.width,e.height):o.drawImage(h,t,r,e.videoWidth,e.videoHeight),void d())},n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data},n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)},n.loadImage=function(e,t){s++;let o=n.createGraphics(100,100M ),r=o.canvas.getContext("2d"),a=new Image;return a.src=e,a.crossOrigin="Anonymous",a.onload=function(){r.canvas.width=a.width,r.canvas.height=a.height,o.width=a.width,o.height=a.height,r.drawImage(a,0,0),s--,t&&t(o)},o};let x={};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClamM pedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()}x[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}},x[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}},x[n.OPAQUE]=functM ion(e){for(let t=0;t<e.length;t+=4)e[t+3]=255},x[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[t+2]=255-e[t+2]},x[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n},x[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let r=0;r<t;r++){let a=4*Math.max(r-1,0),i=4*Math.min(r+1,t-1),l=4*Math.max(o-1,0)*t,s=4*Math.min(o+1,n-1)*t,u=4*o*t,c=4*rM ;for(let t=0;t<4;t++){let n=t+l,o=t+s,r=t+u;e[u+c+t]=Math.max(d[n+c],d[r+a],d[r+c],d[r+i],d[o+c])}}},x[n.ERODE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let r=0;r<t;r++){let a=4*Math.max(r-1,0),i=4*Math.min(r+1,t-1),l=4*Math.max(o-1,0)*t,s=4*Math.min(o+1,n-1)*t,u=4*o*t,c=4*r;for(let t=0;t<4;t++){let n=t+l,o=t+s,r=t+u;e[u+c+t]=Math.min(d[n+c],d[r+a],d[r+c],d[r+i],d[o+c])}}},x[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let r=2*t+1,a=funcM tion(e){let n=new Float32Array(e),o=.3*t+.8,r=o*o*2;for(let t=0;t<e;t++){let a=t-e/2,i=Math.exp(-a*a/r)/(2.5066282746*o);n[t]=i}return n}(r),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,s=0,u=0,c=0;for(let e=0;e<r;e++){let r=4*(n*i+Math.min(Math.max(o-t+e,0),i-1));l+=d[r]*a[e],s+=d[r+1]*a[e],u+=d[r+2]*a[e],c+=d[r+3]*a[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=s,e[h+2]=u,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let s=0,u=0,c=0,h=0;for(let e=0;e<r;e++){let r=4*(MathM .min(Math.max(n-t+e,0),l-1)*i+o);s+=d[r]*a[e],u+=d[r+1]*a[e],c+=d[r+2]*a[e],h+=d[r+3]*a[e]}let f=4*(n*i+o);e[f]=s,e[f+1]=u,e[f+2]=c,e[f+3]=h}},n.filter=function(e,t){if(n.HARDWARE_FILTERS&&null!=o.filter)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5),I(`saturate(0%) brightness(${Math.floor(.5/t*100)}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawIM mage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);x[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);x[e](n.data,t),o.putImageData(n,0,0)}},n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,M 0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()},n.get=function(e,t,r,a){if(null!=e&&null==r){let r=o.getImageData(e,t,1,1).data;return new n.Color(r[0],r[1],r[2],r[3]/255)}e=e||0,t=t||0,r=r||n.width,a=a||n.height;let i=n.createGraphics(r,a);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,r*n._pixelDensity,a*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i},n.set=function(e,t,r){if(r.MAGIC==n.MAGICM ){let o=n._tint;return n._tint=null,n.image(r,e,t),void(n._tint=o)}let a=4*(t*n._pixelDensity*o.canvas.width+e*n._pixelDensity);n.pixels[a]=r._r,n.pixels[a+1]=r._g,n.pixels[a+2]=r._b,n.pixels[a+3]=255*r._a},n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransM form();let r=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.globalCompositeOperation=r,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()},n.tint=function(){n._tint=n.color(...Array.from(arguments))},n.noTint=function(){n._tint=null},n.mask=function(e){o.save(),o.resetTransform();let t=o.gloM balCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeOperation=t,o.restore()},n.clearTemporaryBuffers=function(){h=null,f=null,d=null},n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",(function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t}),!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)},n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.M save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let r=e.split(".");return n.save(r.slice(0,-1).join("."),r[r.length-1])},n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),r=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const a=document.createElement("style");return a.textContent=r,document.head.append(a),o},n.textFont=function(e){n._style.textFont=e},n.textSize=function(e){n._style.teM xtSize=e,n._style.textLeading=e},n.textLeading=function(e){n._style.textLeading=e},n.textStyle=function(e){n._style.textStyle=e},n.textAlign=function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)},n.text=function(e,t,r,a){if(!e)return;if(e=e.toString(),n._style.noFill&&n._style.noStroke)return;o.font=`${n._style.textStyle} ${n._style.textSize}px ${n._style.textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._style.noFill||o.fillText(i[e],t,r,a),n._style.noStroke||o.strokeText(i[e],t,r,a),r+=M n._style.textLeading},n.textWidth=function(e){return o.font=`${n._style.textStyle} ${n._style.textSize}px ${n._style.textFont}`,o.measureText(e).width},n.textAscent=function(e){return o.font=`${n._style.textStyle} ${n._style.textSize}px ${n._style.textFont}`,o.measureText(e).actualBoundingBoxAscent},n.textDescent=function(e){return o.font=`${n._style.textStyle} ${n._style.textSize}px ${n._style.textFont}`,o.measureText(e).actualBoundingBoxDescent};var C,S=4,E=.5,A=function(e){return.5*(1-Math.cos(e*Math.PI))};n.noiM se=function(e,t,n){if(t=t||0,n=n||0,null==C){C=new Array(4096);for(var o=0;o<4096;o++)C[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var r,a,i,l,s,u=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-u,d=t-c,p=n-h,y=0,m=.5,g=0;g<S;g++){var v=u+(c<<4)+(h<<8);r=A(f),a=A(d),i=C[4095&v],i+=r*(C[v+1&4095]-i),l=C[v+16&4095],i+=a*((l+=r*(C[v+16+1&4095]-l))-i),l=C[4095&(v+=256)],l+=r*(C[v+1&4095]-l),s=C[v+16&4095],l+=a*((s+=r*(C[v+16+1&4095]-s))-l),y+=(i+=A(p)*(l-i))*m,m*=E,u<<=1,c<<=1,h<<=1,(f*=2)>=1&&(u++,f--)M ,(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return y},n.noiseDetail=function(e,t){e>0&&(S=e),t>0&&(E=t)};const b=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17,e^=e>>13,((e^=e<<5)>>>0)/n)}};let T=b();T.setSeed(),n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;C||(C=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,C[n]=(t>>>0)/4294967295},n.randomSeed=function(e){T.setSeed(e)},n.random=function(e,t){returM n null==e?T.rand():"number"==typeof e?null!=t?T.rand()*(t-e)+e:T.rand()*e:e[~~(e.length*T.rand())]},n.randomGenerator=function(e){e==n.LCG?T=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rand:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(T=b()),T.setSeed()};var P=new function(){var e,t,n,o=new Array(128),r=new Array(256),a=new Array(128),i=new Array(128),l=new Array(256),s=new Array(256),u=function(){return 4294967296*T.rand()-2147483648},c=function(M ){return.5+2.328306e-10*(u()<<0)};this.SHR3=u,this.UNI=c,this.RNOR=function(){return n=u(),e=127&n,Math.abs(n)<o[e]?n*a[e]:function(){for(var t,r,l,s,h=3.44262;;){if(t=n*a[e],0==e){do{l=c(),s=c(),t=.2904764*-Math.log(l),r=-Math.log(s)}while(r+r<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=u(),e=127&n,Math.abs(n)<o[e])return n*a[e]}}()},this.REXP=function(){return(t=u()>>>0)<o[e=255&t]?t*l[e]:function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],s[e]+c()*(s[e-M 1]-s[e])<Math.exp(-n))return n;if((t=u())<r[e=255&t])return t*l[e]}}()},this.zigset=function(){var e,t,n=2147483648,u=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,y=.003949659822581572;for(e=f/Math.exp(-.5*c*c),o[0]=Math.floor(c/e*n),o[1]=0,a[0]=e/n,a[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),a[t]=c/n;for(e=y/Math.exp(-d),r[0]=Math.floor(d/e*u),r[1]=0,l[0]=e/u,l[255]=d/u,M s[0]=1,s[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(y/d+Math.exp(-d)),r[t+1]=Math.floor(d/p*u),p=d,s[t]=Math.exp(-d),l[t]=d/u}};P.hasInit=!1,n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e},n.randomExponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()},n.print=console.log,n.cursor=function(e,t,o){let r="";e.includes(".")&&(e=`url("${e}")`,r=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+r},n.noCursor=function(){n.canvas.style.cursor="none"M },n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then((function(e){t.srcObject=e})),t.style.position="absolute",t.style.opacity=1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let D=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of D){let t="_"+e+"Fn";n[t]=function(M ){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(r=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),_(),a=!0,n.push(),n._drawFn(),n.pop(),++n.frameCount}function k(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,r=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/r,id:e.identifier}}function O(){return n._touchStarted.isPlaceHolder&&n._touchMoved.isPlaceHoldM er&&n._touchEnded.isPlaceHolder}n.noLoop=function(){n._noLoop=!0,r=null},n.loop=function(){n._noLoop=!1,null==r&&z()},n.redraw=function(){z()},n.frameRate=function(e){n._frameRate=e},setTimeout((function(){n._preloadFn(),c=window.performance.now(),function e(){if(s>0)return setTimeout(e,10);n._setupFn(),z()}()}),1),n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)},n.canvas.onmousedown=function(e){n.pM mouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)},n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)},n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1},window.addEventListener("keydown",(funM ction(e){n.keyIsPressed=!0,n.key=e.key,n.keyCode=e.keyCode,u[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)})),window.addEventListener("keyup",(function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,u[n.keyCode]=!1,n._keyReleasedFn(e)})),n.keyIsDown=function(e){return!!u[e]},n.canvas.ontouchstart=function(e){n.touches=e.touches.map(k),O()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||eM .preventDefault()),n._touchStartedFn(e)||e.preventDefault()},n.canvas.ontouchmove=function(e){n.touches=e.touches.map(k),O()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()},n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(k),O()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPM ressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()},n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPermission),n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then((e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then((e=>{"granted"==e&&(n.hasSensorPermissM ion=!0)})).catch(alert)})).catch(alert)},window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,n.rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.reM lRotationZ=n.rotationZ},window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13]M ,e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]M *t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e),0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}},n.year=function(){return(new Date).getFullYear()},n.day=functionM (){return(new Date).getDay()},n.hour=function(){return(new Date).getHours()},n.minute=function(){return(new Date).getMinutes()},n.second=function(){return(new Date).getSeconds()},n.millis=function(){return window.performance.now()-c}}(e)}function t(){let e=l(0,1);return e+=.618033988749895,e%=1,color(floor(360*e),i(10,100),i(10,100))}function n(e){e.sort((function(e,t){return e.width>t.width?-1:e.width<t.width?1:0}))}function o(e,t,n,o,r,a,i,s,u){let c=[];for(let h=e;h<t;h+=s)c.push({start:createVector(h,r),end:creM ateVector(h,r+a*(1-l(0,i))),width:n*(1-l(0,o)),color:u});return c}function r(e,t,n,o,a,s,u){let c=createVector(e.x+t*cos(n),e.y+t*sin(n)),h=[{start:e,end:c,width:o,color:s[i(0,s.length-1)]}];if(u<i(6,12)){let e=t/l(1.3,1.6),i=o/l(1.1,1.6);h.push(...r(c,e,n+a,i,a,s,u+1)),h.push(...r(c,e,n-a,i,a,s,u+1))}return h}function a(e){for(let t=0;t<e.length;t++){let n=e[t].width;stroke(e[t].color),strokeWeight(.9*n),line(e[t].start.x,e[t].start.y,e[t].end.x,e[t].end.y)}}function i(e,t){return e=Math.ceil(e),t=Math.floor(t),MaM th.floor(c()*(t-e+1))+e}function l(e,t){return c()*(t-e)+e}function s(e,t,n,o){return function(){var r=(e>>>=0)+(t>>>=0)|0;return e=t^t>>>9,t=(n>>>=0)+(n<<3)|0,n=(n=n<<21|n>>>11)+(r=r+(o=(o>>>=0)+1|0)|0)|0,(r>>>0)/4294967296}}function u(e){for(var t=0,n=1779033703^e.length;t<e.length;t++)n=(n=Math.imul(n^e.charCodeAt(t),3432918353))<<13|n>>>19;return function(){return n=Math.imul(n^n>>>16,2246822507),n=Math.imul(n^n>>>13,3266489909),(n^=n>>>16)>>>0}}"object"==typeof exports&&"undefined"!=typeof module&&(module.expoM rts=e),new e("global");let c,h="m/71233/0/1/1",f="03cf024a3a10255fbd8aba918397e06b466ed6d6eb56d9c3f7d915726a68d50ec3";function setup(){createCanvas(windowWidth,windowHeight),colorMode(HSB,360,100,100);let e=u(f.slice(2));c=s(e(),e(),e(),e());let d=i(2,6),p=[];for(let e=0;e<d-1;e++)p.push(t());let y,m,g=p[i(0,p.length-1)];do{y=t(),m=Math.abs(hue(y)-hue(g)),m+=Math.abs(saturation(y)-saturation(g)),m+=Math.abs(brightness(y)-brightness(g))}while(m<180);background(y);for(let e=0;e<=width;e+=i(0,15))for(let t=0;t<=heightM ;t+=i(0,15)){let n=i(10,20);push(),translate(e,t),rotate(l(0,2*PI)),beginShape(),noStroke(),fill(hue(y)+i(-2,2),saturation(y)+i(-2,2),brightness(y)+i(-2,2));for(let e=0;e<2*PI;e+=.1){let t=cos(e)*n,o=sin(e)*n;vertex(t,o)}endShape(CLOSE),pop()}let v=l(.1,.6),M=(height+width)/150,_=(height+width)/50,x=i(M,_),w=.7+(x-M)/(_-M)*(.9-.7),R=i((height+width)/14,(height+width)/8),I=o(0,width,i(x/4,x/2),l(.2,1),height,-x*l(.5,1.5),l(.2,1),i(x/4,x/2),g),C=r(createVector(width/2,height),R,-PI/2,x,v,p,0);n(C),n(I);let S=(width+hML eight)/15;stroke(g),strokeWeight(S/50),noFill(),ellipse(width-S,S,S,S),fill(g),noStroke(),ellipse(width-S,S,S*w,S*w),a(C,!1),a(I,!1),textFont("Courier New");let E=(width+height)/150;textSize(E),strokeWeight(1),stroke(g),textStyle(NORMAL);let A=h.slice(2).split("/");for(let e=0;e<A.length;e++)text("/"+A[e],4,E+e*E)}</script></html>h! <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="background:#b0752b;font-family:monospace" viewBox="0 0 1080 1920"><style>svg{animation:a ease-in-out 9s infinite}@keyframes a{from{transform:translateY(0%)}50%{transform:translateY(1%)}to{transform:translateY(0%)}}path,g{transform-origin:50%}@media(min-aspect-ratio:5/3){path{transform:rotate(90deg)scale(1.5)}g g{transform:translate(15%,7%)scale(1.55)}}</style><g><path d="M942 1752V274l-30-101c-4-12-13-33-39-33H207c-25 0-35 22-38 33l-30 101v1483c0 M 18 19 22 42 22h718c30 0 43-12 43-27" fill="#b0752b"/><path d="M912 173v1370c0 28 2 57 7 85l23 124V274l-30-101zm-49 1385H221c-21 0-39 15-42 35l-26 151c-4 21 16 35 33 35h709c17 0 37-17 34-35l-27-153c-3-20-20-33-39-33zm-724 194 23-124c5-28 7-57 7-85V173l-30 101v1478zM873 140H208c-16 0-28 12-28 27v1348c0 17 14 31 31 31h659c17 0 31-14 31-31V167c0-15-13-27-28-27z" fill="#fed65c"/><g><text x="50%" y="49%" text-anchor="middle" style="fill:#b0752b;font-size:256px;pointer-events:none">1kB</text></g></g></svg>h! $ &%# #"(-90(*6+"#2D26;=@@@&0FKE>J9?@= =)#)================================================== %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYM "!&+7/&)4)!"0A149;>>>%.DIC<H7=>; ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; XMP DataXMP<?xpacket begin=" " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c006 79.164753, 2021/02/15-11:52:13 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriginalDocuM mentID="xmp.did:351fd3a8-277a-4d06-9ea7-d545401347e7" xmpMM:DocumentID="xmp.did:6669541B999D11EBB7849762D5BCE03A" xmpMM:InstanceID="xmp.iid:6669541A999D11EBB7849762D5BCE03A" xmp:CreatorTool="Adobe Photoshop 22.3 (Macintosh)"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:4e1705d8-7a63-4a5a-9f25-d588fbaf2b86" stRef:documentID="xmp.did:351fd3a8-277a-4d06-9ea7-d545401347e7"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! text/html;charset=utf-8 <meta charset="UTF-8"> <title>Embedded Video</title> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <video id="my-player" controls style="width: 100%; max-width: 500px" autoplay muted></video> const videoEl = document.querySelector("#my-player"); const src = "https://www.mediaserver.express/live/bgSeXqbn/index.m3u8"; if (videoEl.canPlayType("application/vnd.apple.mpegurl")) { // Some browerM7 s (safari and ie edge) support HLS natively videoEl.src = src; } else if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource(src); hls.attachMedia(videoEl); console.error("This is a legacy browser that doesn't support MSE"); text/plain;charset=utf-8 !22222222222222222222222222222222222222222222222222 M @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A b@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A h K`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A 0 [7k @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A l 0Px@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A M L text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 dhD6PwAAAABJRU5ErkJggg==" class="background"><div class="game"><canvas width="750" height="585" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const grid=15;const paddleHeight=grid*5;const maxPaddleY=canvas.height-grid-paddleHeight;var paddleSpeed=6;var ballSpeed=5;const leftPaddle={x:grid*2,y:canvas.height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const rightPaddle={x:canvas.width-grid*3,y:canvas.height/2-paddM leHeight/2,width:grid,height:paddleHeight,dy:0};const ball={x:canvas.width/2,y:canvas.height/2,width:grid,height:grid,l:false,dx:ballSpeed,dy:-ballSpeed};function collides(l,d){return l.x<d.x+d.width&&l.x+l.width>d.x&&l.y<d.y+d.height&&l.y+l.height>d.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);leftPaddle.y+=leftPaddle.dy;rightPaddle.y+=rightPaddle.dy;if(leftPaddle.y<grid){leftPaddle.y=grid}else if(leftPaddle.y>maxPaddleY){leftPaddle.y=maxPaddleY}if(rightPaddle.y<gM rid){rightPaddle.y=grid}else if(rightPaddle.y>maxPaddleY){rightPaddle.y=maxPaddleY}context.fillStyle="white";context.fillRect(leftPaddle.x,leftPaddle.y,leftPaddle.width,leftPaddle.height);context.fillRect(rightPaddle.x,rightPaddle.y,rightPaddle.width,rightPaddle.height);ball.x+=ball.dx;ball.y+=ball.dy;if(ball.y<grid){ball.y=grid;ball.dy*=-1}else if(ball.y+grid>canvas.height-grid){ball.y=canvas.height-grid*2;ball.dy*=-1}if((ball.x<0||ball.x>canvas.width)&&!ball.l){ball.l=true;setTimeout(()=>{ball.l=false;ball.x=canvM as.width/2;ball.y=canvas.height/2},400)}if(collides(ball,leftPaddle)){ball.dx*=-1;ball.x=leftPaddle.x+leftPaddle.width}else if(collides(ball,rightPaddle)){ball.dx*=-1;ball.x=rightPaddle.x-ball.width}context.fillRect(ball.x,ball.y,ball.width,ball.height);context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,grid);context.fillRect(0,canvas.height-grid,canvas.width,canvas.height);for(let l=grid;l<canvas.height-grid;l+=grid*2){context.fillRect(canvas.width/2-grid/2,l,grid,grid)}}document.addEventListener("keyM down",function(l){if(l.which===38){rightPaddle.dy=-paddleSpeed}else if(l.which===40){rightPaddle.dy=paddleSpeed}if(l.which===87){leftPaddle.dy=-paddleSpeed}else if(l.which===83){leftPaddle.dy=paddleSpeed}});document.addEventListener("keyup",function(l){if(l.which===38||l.which===40){rightPaddle.dy=0}if(l.which===83||l.which===87){leftPaddle.dy=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 AwSlxDEAebkjpV3tjUua/VWM6pznxx57bKj6hZmQQQMEJUADBKXEEcTKmxuWKRb2ZhzR3XfffYMewm7mz58/6CEwi8mgAYISoAGCUuKAhrZv317aXrp06QBGM1lrB7uU7GI37GTQAEHJoBlKeea6YMGCvt47v1+3HxJedNSyor1m7Y27GrLgkSWDBghKgAYISomjoY1r39X+oWwnugqjujS7V/pd1oBBkEEDBCVAAwSlxFGhspSxeXr95RvvX3xp+9eu3EE3mPs8O8mgAYISoAGCUuLolvHTU0opPbiq/n2CZeUOpY7h0a+l3s+ue0NKKaVvtxasJOWLUSODBghKgAYISoljD8XsjapFKM+VMqrMW98+30m5o+Xiu83sGBa93ItjVK1aeUrR3rZtW8/vt2XLluynl/T8ftMlgwYISoAGCEqJYwbyEkaZTsodrXa+VwfVhqWksGjRoq71lc/cyBekVF3D7CGDBghKBj0DeYZcpslDwlHwyhPenP10TUoppU2bTh7MM YHpsw4YNRfvI467pWr/DmCkvfFn7Idzxxx9ftPOHges3Xt3PIaW01wunPJ0/tOz72DIyaICgBGiAoJQ4ZqAbDwlHVbvc0b2v/1HtXtqh5Vv/8/1BDyGllNLdP3l80EOoJIMGCEqABghKiYOB8vV/tPRjGXc3RBmnDBogKAEaICgljj2sXHdFSimljWuzgxU729UtVOlEa4m3HeyAPcmgAYISoAGCUuJoqmYj/7pd6wA6JYMGCEoGXaH1sDClzh4Yto53kinnez97OAhUkUEDBCVAAwSlxNGBvNyRUlb6WNL5r09ZA2hKBg0QlAANEJQSxwysvLlBqWJh78YBzE4yaICgBGiAoARogKAEaICgBGiAoARogKAEaICgzIMGemrDhg2lx8eXr+jzSKYWcZwyaICgBGiAoEaqxJF/Vdl8/clF+85bBjGawbiq7Ni6kfrfILT87ydaCYD+k0EDBCVAAwQ1Nr58xcSgBwHAZDJogKAEaICgBGiAoARogKAEaICgBGiAoARoM gKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoARogKAEaICgBGiAoP4ffOKbh5D0F3wAAAAASUVORK5CYII=" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function M loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillReM ct(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):L 39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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" class="background"><div class="game"><canvas width="400" height="500" id="gameM canvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","YM ","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(brickHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={M x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>canvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(bM all.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}brM eak}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddle.y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddM le.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! iTXtXML:com.adobe.xmp <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <tiff:Orientation>1</tiff:OrientationM <xmp:CreatorTool>Adobe ImageReady</xmp:CreatorTool> </rdf:Description> text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} iTXtXML:com.adobe.xmp " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/M xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" exif:ColorSpace="1" exif:PixelXDimension="360" exif:PixelYDimension="360" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" tiff:ImageLength="360" tiff:ImageWidth="360" tiff:ResolutionUnit="2" tiff:XResolution="72/1" tiff:YResolution="72/1" xmp:MetadataDate="2023-02-15T01:17:15+01:00" xmp:ModifyDate="2023-02-15T01:17:15+01:00"> <rdf:li xml:lang="x-default">BOODYYY </rdf:li> xmpMM:action="produced" xmpMM:softwareAgent="Affinity Photo 1.10.5" xmpMM:when="2023-02-11T22:31:19+01:00"/> xmpMM:action="produced" xmpMM:softwareAgent="Affinity Photo 1.10.5" xmpMM:when="2023-02-12T20:26:37+01:00"/> xmpMM:action="produced" xmpMM:softwareAgent="Affinity Photo 1.10.5" xmpMM:when="2023-0M 2-13T21:06:00+01:00"/> stEvt:action="produced" stEvt:softwareAgent="Affinity Photo 1.10.5" stEvt:when="2023-02-15T01:17:15+01:00"/> </rdf:Description> iCCPsRGB IEC61966-2.1 text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} c/Foundry USA Pool #dropgold/ text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 JeIYkV95gt0Ks/S1f5b+rk089b3nx72ElFJKp1/68biXUEsHDRCUAg0QlIijJUVskT+Mv+r11YrfNTxwbfWD/qedr/+zZRS3cbchyjp10ABBKdAAQYk4BlDEEyl1fp+wlx0aVe8DWE0HDRCUAg0QlIhjAHk8UcQWvUQWVe+b1V0cQD0dNEBQOugBdLvYV/zS93qKznnjnZ2nfKWnnht8ccDE00EDBKVAAwQl4mgojyIOPLz+uXds3lSOn/3EiXJ8y0O3rzl+y0PdzwVmiw4aICgFGiAoEUcPVkYO2fG/OJMdv33NuSmLLeqiiqrjYg0gJR00QFgKNEBQIo4eiCeAcdBBAwSlQAMEpUADBKVAAwTlIiEwVEePHq08vmPP3hGvZH0R16mDBghKgQYIaqYijvyrypPHHu28sLQ0htWMx+GnT6w5tri4OIaVUCX/bxEtAmD0dNAAQSnQAEFdtmPP3rfHvQgA1tJBAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEM pUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBKVAAwSlQAMEpUADBPX/7+YV5TQ/fDAAAAAASUVORK5CYII=" class="background"><div class="game"><canvas width="750" height="585" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const grid=15;const paddleHeight=grid*5;const maxPaddleY=canvas.height-grid-paddleHeight;var paddleSpeed=6;var ballSpeed=5;const leftPaddle={x:grid*2,y:canvas.M height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const rightPaddle={x:canvas.width-grid*3,y:canvas.height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const ball={x:canvas.width/2,y:canvas.height/2,width:grid,height:grid,l:false,dx:ballSpeed,dy:-ballSpeed};function collides(l,d){return l.x<d.x+d.width&&l.x+l.width>d.x&&l.y<d.y+d.height&&l.y+l.height>d.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);leftPaddle.y+=leftPaddle.dy;rightPaddle.y+=rightPM addle.dy;if(leftPaddle.y<grid){leftPaddle.y=grid}else if(leftPaddle.y>maxPaddleY){leftPaddle.y=maxPaddleY}if(rightPaddle.y<grid){rightPaddle.y=grid}else if(rightPaddle.y>maxPaddleY){rightPaddle.y=maxPaddleY}context.fillStyle="white";context.fillRect(leftPaddle.x,leftPaddle.y,leftPaddle.width,leftPaddle.height);context.fillRect(rightPaddle.x,rightPaddle.y,rightPaddle.width,rightPaddle.height);ball.x+=ball.dx;ball.y+=ball.dy;if(ball.y<grid){ball.y=grid;ball.dy*=-1}else if(ball.y+grid>canvas.height-grid){ball.y=canvasM .height-grid*2;ball.dy*=-1}if((ball.x<0||ball.x>canvas.width)&&!ball.l){ball.l=true;setTimeout(()=>{ball.l=false;ball.x=canvas.width/2;ball.y=canvas.height/2},400)}if(collides(ball,leftPaddle)){ball.dx*=-1;ball.x=leftPaddle.x+leftPaddle.width}else if(collides(ball,rightPaddle)){ball.dx*=-1;ball.x=rightPaddle.x-ball.width}context.fillRect(ball.x,ball.y,ball.width,ball.height);context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,grid);context.fillRect(0,canvas.height-grid,canvas.width,canvas.height);for(leM t l=grid;l<canvas.height-grid;l+=grid*2){context.fillRect(canvas.width/2-grid/2,l,grid,grid)}}document.addEventListener("keydown",function(l){if(l.which===38){rightPaddle.dy=-paddleSpeed}else if(l.which===40){rightPaddle.dy=paddleSpeed}if(l.which===87){leftPaddle.dy=-paddleSpeed}else if(l.which===83){leftPaddle.dy=paddleSpeed}});document.addEventListener("keyup",function(l){if(l.which===38||l.which===40){rightPaddle.dy=0}if(l.which===83||l.which===87){leftPaddle.dy=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 h8mhggYISgXNyJTtQDczM9NCJM3buXNnMR7mznvjWClPX9q9CHfttdcW4/xi4Bf+8WujDCmlFW9c9O38ouXIY8uooAGCkqABgtLiaFn+lPDlZDltuL+cftY6vvuDg22HkFJKafbIc22HUEkFDRCUBA0QlBZHy65ceW7bIbTKr//Lyyhu4x6GKHGqoAGCkqABgtLiaNmGVee1HQIQlAoaICgJGiAoLY4h2fvCSymllK4a8HMAr6eCBghKBb0EB4+/HGIOYDKpoAGCkqABgtLiqGn2+Cuh5wMmhwoaICgJGiAoLY5+zDW4oXeTcwNjTQUNEJQEDRCUFkeVZ48M9LGtN9T9nuMDfQ8w+VTQAEFJ0ABBaXG83rFn2o4AIKWkggYISwWdUkpPP9F2BDCxdu7cWXp845brRxzJ4iLGqYIGCEqCBghqWbU48l9VHn3wgRYjiWVmZqbtEDgj/7eI1gJg9FTQAEFJ0ABBnbVxy/WvtR0EAAupoAGCkqABgpKgAYKSoAGCkqABM gpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYKSoAGCkqABgpKgAYL6f05syBPyEZPGAAAAAElFTkSuQmCC" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}fM unction loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){contexM t.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snakL e.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 ywAAAABJRU5ErkJggg==" class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","GM ","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(briM ckHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>cM anvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize){ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(M ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddleMk .y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dx=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 by dadabots (cj carr) published feb 14, 2023 This artpiece could cause you to lose everything in your wallet. In parkour, there's a philosophical mindset one develops with onself, standing at the edge of a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across. To stand at the precipise and contemplate the choice of annihilation, as in the absurdism of Albert Camus, is to come into yourM own power and free will. Realize you're always in the driver's seat of your own life. <meta name="viewport" content="width=device-width, initial-scale=1.0"> font-family: 'mono'; font-style: normal; font-display: swap; src: url("data:application/x-font-woff;charset=utf-8;base64,d09GMgABAAAAAC6wAAwAAAAAZRQAAC5aAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIsgBmAAgggRCAqBpUj/bwuEDAABNgIkA4QMBCAFgwwHiE4bXk9FRoaNAxAQy2OPombuUYkoKih9zf+XBE7G+NMdLCs0FLrxlERBFoonJWNxkHWCZcUuRkSnezM PbfpdLpZ5q6EZ0f4VmmEV31Us7tLCCjPKMXY/Q0ke80H+/9tbnvpmPnLDKulWpyAVixwoVEFhCzQpREsEMz2+zN20UkOpPSpSYKCoIfCxUwAR7aeemu7NW6bZbn67ybhXuFq5a586LzZXLIigu3funT2kYCmkmGKtArSiGtIMGm9hRBbedLwBMSOMzWa5saiQQaKkuXTH53eN9W2uZHBSS7vi6WnEIzytUec/+2wKDLVtA6F/PNN9+xabQJosPNqHTd4CDKQ4L3S6TH5BoN4cz/ak2/Tetz8BtYWMCqZnN7DTZ/0sbfj6Vy4W9wjUqu05C4phUjXD9mu/V/gjT8QBs2dL4yhqT2K+DfEhBvEt4d18Bnu/XXm02NyfAOxEGUUgukVAVpn75fbplsqhY/X2l/WVZIzuRdTQ+KMuyukKysJ3/NUv7J9k9IC6xMASqtsJVyD///2Tm/5+9TP4sZfYgNzmcbO/NIs/eLh+lRAoAk5QweyVMFZICckz2XmVVvSRJIKQgYeM rvh9r74OiyIfUwA+dZ7VV/Fne5pGJCiAzohAgg9fRPOa88ZKv7yJg2LAgHej8AAmKsCGXOo6dXFoPyTeXkIpB7zKsuBXhazu1HGCGgGg1IhgBvNiAOAkQgCHj4xElRkMd6xEiSH+mIkiA32WFEyHKJN7uLMJmfA0KkKS4nlpWAtbz8vz3YCrB8xLFsYjFYKLP3RMe5pqQSzBgBIJxIzOGS4RNilzzC3qi7K8RnwG0JY/kigtxkyEWruWiF5O2zWKog5pllR6vGnZyp8OEh12dueiLw8ASd29D75ASYiFBi0+Sljil4yAj0vTT6Jv7oY4EHS6fyZqpC+eysYkUJpSLGaelPVzXjR3yhkPf6SIOHjPCAYejQoK6VwpNB4hloBJDiocP74VQ/O5O3+n8OD3nAEHSoT0oOS1+Ewyd940IW6n8ajPCAIe5Dgwr5SUmu9XtwfOS1PNN/GQ95wBCd0KFCzhOP/9dT/7jvugtOOWSPLdZbYaEe7Ro9028+6fOk8EHfNbG+8lM HnJ0ef+ioL9B8CHjLCA4YZ4j6ddECHBhUKZEgQi4RB+aEFNIAlOnmw2hwIbhvhxSNjfEwYmieMWM7fDMGgfjkXznkrbQ3vb6P+8a///O+Rx8Y8UeRGkVZe74RHHt2lIBbmzS0PISk9Ks7RmnzfkGEPjNwdHmPtDz0xNJdEiOUT0Wp6cdZX83EFO2I9AFYJH6J7qHwBLO5HXcicefMArQB6uv2mnYZmHdACwb/bH4zMr4xoywCArYsJAIvYIQCNnAED5AtaFFwXvp5oBkWn8L2iJKnT6qf82OyI/WX3bbjRQ1SICXEgARQKGRqrG7dNOBwsh/Dz334CiNi5kLV11p4CIkP0mdWLUvBr7/ffnuzqdgL/+/+2/ZOLMw9HEqUT44dt1bv+g3EPDj/se//jyPgEd8Rttgkd9TgRn8rKJ6hSoNBERYpNMlUlgIIgGSeRj1VbDDQOULkCqJ8AXAqsOZCy6BjenRR+6qwwyoIdQ8UBC8Qcg706+S7A0L1oGW7ENMF85DiRbRM 16XESwoNrCd/m0TahEeZqgIsINbwMW2tlYSie0z/zCWBiK+1tTJjdgZck3orGz2h8hupNfQSwZxZHxiPOYPG55MKxUwBMs5ffExhUH9leAm+nd4SbJelBIsLYuEiDp+Sg2GYhMZJEuh8rV8SD37FQL2vGuaVeXlctTpP2aTGfjTaVoszCSiqvPkGbqoQXjtTDrUJW7ZpIfcJhefe5ZZsSxVP5aASHt47VPDM9nPY+AT95j80MvoxgQwYKwUhGTPQZFL366POkII4LeFTd/yIOE8+hd5NwpZeXvYbL3rADzQKnSVeZ1i9izRMNWSzBca+wIo+0YRDTG/jCMKKhCKvZAv1ObjlARBRDsJEAvO1C5HxIEmnATKNpzUKuoj6mFXY0rpQkSu2OKNP4jhtBuqrKMqcFL1WTR4Kg7QAyJfdALgIIGvEYVRVwiyCUr90fuz1Y/wNSJ97rbWzo5hJb63KEHOQvBOGJYQT/VA5wNEK2kf2WdNQFQIHyjDq4haclZxYjINhziioM VzxAAm0e7cJxGy+rtGWDObhL0W7sNnd2IjpNTED+YIYee/EOdZtay3jpoAxu+qB3LElQFOD5j70uwNBB+QP30qinnv4jp5br/EqgxBMO5fqXgAcSfvXg5Zx10e6rWpaRR2CpLonPes0nEv96zgrljdKoedEJmwDDJBBgIYMJK97xtOva7FF4yXGIW/R+XmwlL1cNTtDI9zUykG0IDeRk2JGVRoverESzVLj4lhtSp/YReIweBC1meERMIXChuFnzt7e5kYvOCaiyFY+c8eZxiPIzR7FcdJmMLlATn9gYg8yhoq9B43XgN+ukvdBXPlO2yUixtInFwpn/6M5Rernpf3IY+zHHxaUKGh5gHIwr0k/L0QOqYjLjFMlxDW93X8zcRpdgOeyU+OcuUc5OztnGgxfGDFG15o2CmRma83mosL7RjoxueNE/mdLXGhgNiMToNpYKXm5WeW9fy0Klm4YFlKzi0kKQGyUrRTOC1zFCBLT0NhoFKUcXVWiLTOyvYFaHS5YyA2xRM Yvl2Lxj/wF7Ualzd3g0rMaGokgc4K8Tpn+KaO2E575DjuuQUUomVi3vn2GBV30C3IwFE94FMLZ1BmoiJesAq51VzU2XFWYTRJ5Ec01Y2FwL7LoP0qULKy/wp7NAyW5LOLJGO/meV+eq/ytCPKxhO9d9EJdMOuabFl7qCH9S0JNfVghmACHuafousGhQlLRWJ4JtWoT58PmxoCi/acVJitXkd9F6wIxBbjab44bpCNrTdZ2aEvPVxoeagc7qXKlvPiGGKSTRiZrLLUOWo1QQACFVueo39vXRIZKLvalVugQPiPhp09j/tmVICwrGmFIfv8yvNWypKc4+Ok6nigFxJ+wwwY4XnTjxxMoGazEz1wexkBelQaBquuXHTdgc9+XCIs4AlzQmPGLcnRITL7z01X6XmoiUUNkvzk0rlQaccM433t5tjFvarh0p6SD8EvRQQwWcJneziKgJmWQ0EvOqr4BMsgktIvUXqwpc3blafjxpfcIORGYgkqbYWK0kxVaMAxDZhOBqDM iJQ+KnBKZgIJag7l5CWRXiXcSOwDMYwd/K5whESAYFSS/7QTe48Jqh4hUXipQBGw9bTHmUckI2K0ifSlSSWXYhqX1W4tGliOYEJQS28mNWFiE3+nwv9Z3+EM8RDRFlSkoGkwdCgj//mf7IZtfYdW8D1bnLZq8EnoJ5x+jqQlEoA8DMlumsE2w5mkaoP+ApmJRfiPjiZtfokv0uRelP5bUnFEXo+Q3bt8h6v2cseWYrE6vJRMrPoiGimgQo7JijkN1zy5lVCP5F1gaVqwDBGc0YjwskS4U7iOmCiumH8uPQM2FDqgbFKUbWVH84s+rqsjS0ef6CCcEyHfPTB2DP3PPN7cJH9Pv3bhjiau9h8gAv/s+r0bkFSzsrIH+JuN51qtzOLsAhvdLYaw1xDd9Z1zZQeD8d/COv1gBZyctIKNPF0eG0wDkUuytoOcKG2bUcZ87wf4jAyxxyCW9FZRYJnwjMTIra7E2EQApSWa8eC2BR5NOGsup8Lg4CfbC/uWpoctqfJA0hPZM aO8xVUE00IF6zC13ewxswcoZE24ZYJJ+TAA1V5mSpu5OaP2IszW1tF6PviS462ZmFI06jhb/gpt3XChtp8MisLC40kgmAbXIHhcrRSabc5KsSu4md2RTqwrEc8xMQ1Z3+kZT7BO3ktYqOUZXne5c8AF3bakz0YRcg93hlBo6rlv5AJPiNxRj4NIX0yoQTkfVJV1tZxp9xHJXXr5iCkfIPqMB3mz5vu0OmMDz5Lcp2tQDKWRmZzIR9L4HQ69I5h4sFB4fpIKZ4mtv3aMhIeGRFlSeZ+0C1oISNdUwNRzzlmRdoOU8LI3kCLidSkLVnA1sLmr6R+iczfq9zg/9ZKv9HCAqsSATkakX1AYlGdnuf8FmU3A94FLxD5G+ea/0SqpGh4Yu55SrDzW3VUs0ZTwRWBydHZ5eoJeZBwcGt1PrADOTfol70VLg+9edMJHA1x/tE9Yt+IgM8yZRNgyZm0aSZc1fnKBeH0QM5xiK5HiyiLAXN3OZg7g+XJUdg2m6nV51BPFitTlVM ZcFaen6yi/zaU7LCgBxu5wbMhk+QT54LYxzvM5UQEzqjy/43lUnphBzF6ojSOMToLKlMXJCQtW60DeWlPQ0uF7zCOTCVjyBGLQ5n4FBQY5tamzozAE4VZxaHCDa5txCoXhnEl96iJObBL+6qH0hKUjvuaP6CwnX8MeSomLvKGP+dwv5YRzAEfimTSAnshyMuBS2RvNJZw16mfMVrXIFQa3V7EtUYo7oq2JAN4OgJXoXztFriZoCpaARfeGyKYCxOQnv9/REVIq1REoqkMDgXzYM6hQLqgYQzC7NsM8o2BHOnPjCIYYrv+gwaLKIET55+/WPD/o4KxQ1Hdh9ro6CNpyW4fkxkDoZllr+IORHdblc1abscxp8nIyQxsIh3AcTfZk40A47+MWbsGrIbUWL2ney6THI5o4cSFAAEulJGguUnOdI37PTs7eXLMg199gS4FMvmxRIJbZ2SsISm2plKwdzhAxE6NX2F91qx7laBeR1Vf1xOKNEYTb1YXD3+eDT1rfhBT3tmM vuG3peZhN0OoYK0EyGzPRq7QnIu2ebSHeUiY5toXxXBGlzmSFGe18j3doL7wblgkUyk5bRzsp3eI3t2TB0iDRrTfNKBClVOH0xA2vdPUELd+q+nglfLp6zA/vMUQ3JSHIJpGKR4Y4dhgygVRf2O+EBuskW/m/BcHz//r1BK6xb2mf7CFBwOHDYQKJLakMgLSRnlfPiRYdsGGlfrIj0r4eKI5CrbtS87DuONhmxjZe2ixzp1xBnmA1FWHBuHkcvuELuSkAkyu5h+lf4z2WQPWOSE2CjFt/7+Tns67cL7HM8tr513wm71s1Flg59zKUnjD+izPkufX3g1sFZ32y92Xubz604Rd1TrDTWDb1WrvPzAgSMJSnoYg047F56XrfN39BY9KbJy5KsRmtCl642RH53Q78juU33dFOU1xyMSRYra+7C6LZ2RBGRfrG3JqeIihPsNnMnvWo1PKiaxA1IrJMbTLWEhYerdfpPpUrUqEaAITp1ajUXHn1DF5DAa0XsLNdgnHbTw3M xY2n1B2+7iT5UsWvN46GEMl6rVguWVh7i7FdWNH+acuGL7rPz3V85dtABE0ypyMaRU6yjK06VwoZa3CrqtjH6Pid0ZyxF35k5P1gnZXdpVVBiFvbcHQois9zr/gHMqwtZniw7tbdlmqBfHlxswKgpjf9n3xMTuOu5/Q5+LWp6W/+yhJuwlTdVAw0cKc2tT7/HHmgnghXxN5VdWGG9VZwmhxvCJbWts1Yo6C0eeTZpuJR8hyRPGqSiDOfr7t6HRKoFdROg79DpBQgsrPk2l4UQSS8uI4LgqUMjsHzPksPDx/zeLfrqNtvZhX5yxjJIAU2bRWLvO077Va/WQSAeZ1mz9fFc6m/bfOra4ou/oR1Vz1nioa1nMV6ZuwbBt2l293mP2KF6HymkQeUkz/AfNb6Z5Eod8ErlqoX46jkILdb3bgg3vMprHEezg9/ZwqieA282XJmrxeLYcUYlNNgRwctojlm7nf8DpdVhHukuuFS01kvaDGufywjerGuOO5fvwnfZ6tb4mr0M euMRpSlNLzAKc9t+M3UR/Xdl4hTl35XWK42ukMWlboddDTXzvi046fYdTZdHadiefQNEyN/X5hV6QuQBMJroX16maElcqWHzcMK+I7DbOiN9fFFV06+EenT+TqNbH9aEME/J3/4V1YOAxzilAjA8ca6WDwjYCjssk0pSsynTvuabDVHv3RKEld95IdGTa0oFZwXUa5ojsv+LJ7Lqx9TsRGF2ETPhYfYo3qLvB1Uo3PH8f0SHsA7xSfYUqVqWWpJgZ/U4a0llbNYlXT6JM01iRwqU8m9SxvFZc6uLE30rBScasN6OKY68t+ssbS6s2M1UVRDcwNcdDKGICIpY0yM1cX6xtYo6XpkVYKxpJ5iH1HMJTKnoCDm03t83nauEQTYmrspIooVLCP0fTKL6hTQPB6v24z/dvHs75hZkuSZ1Vs+aiZJCYYtsUQQQ7cWAifnROvTvD3z2o8pMRYiSvjZA0kUrdM1q1LG+zs+JB8meAFEs7hMq1vAoCmOkcLmrx0vgaPDKLdpUM ykd01zSvyYwJEIDqwsgBTKnOiFLJPAt3txPoPKSipjycNytUId9zxdD/lWrtLT//SG422feBMp1HMiBubMd1894PXJiMJ4e5B/kD1eRJSC6TMyTXmHy0KIE+WO6BTqYGVy+d8tzRWjFdbDoLKw6c7fmuJveQS9LqQ0Ob/rMGCu3bQ0IsCoMprZ8N+v2HCJweBnzK7ZZDAjJHlUS74MZr+u8jYL3FPdBd7mqjdGSJpPsVhC472ATLTpQPSBzfDmg9EHN4HFCTjfkdqJby4QhOcY/GQBo/SRUfAezOINJwwDfSSzhc1pYbJaOOwW0LsxBVOVawP+Wur/FOp7KvUjlfLYlbeqsC8vv6Bv1aqCvvy8wj79Sn8vO01/h8O5Q9N72f3lb2kQ+5Sbo5kbyq+BzXDHns3/6Sv4YMNFaFZ38JbxhrAGNAOuc/FyFdNMx6dtSel+IiXTXM85iNTtzpUp3fWf/5oO5WWmgxthiVERgZyjQ4fZBD2DODaljuX/VCw5oPmRkAwF+BM lJg3aun0pf8d2YpBdSDXmpNA3JbQUiHw1/NBIA95Z76NSYUlvhlqTuGEPM6qTVBHzhtiCjf7w0kXgGHGz61aWhyCGiGPOSaaHkR71fJi7+Io0i+AstqMdEzqSZ+dg4h1u8S7STiSSG/0FK/cJB4Ee7ssee1eZnAW5GbSpeL5fF7G+cAwVEs/bhjHwOAb5v4qmmTu4eOATFbfXEefkiDBtHeMz6JTsI4WVgpQssXK1ebGwlS6O7jNeNNRELZX2uVnBibUJ+zuTQOOYJCSNQbalPVkzk/PbdQJOoYMaxEFpgYLxgijK80mfP0ets1omLN7Bqi8aErpHoHqKQu3oq6Yy8FWt9RKGwHp0yCI5VHtx7aB9wMpZ3pROKG1dBgSbmPpxewCHA90x81ZSps878ARWt8MQifBHGDeM8Zv3i7YTwUjD7h6adaGjbYGrbQDQA2YVeU69rr6kXKGeoYc89AQ5cd5IcM+7nCr4rGHOulF2Nw0r8tTT7v2RmKaWGXMagjUwQnD5Z/KM YCbkQM3aVy/7hCjg3Iysk1e/xdHukfo+YuEMWSapIjSdWqtISAYOE29yizLKZQayhgd5qm8hZps1KkqvTJtYUX+vFmIoLh4bf+ffsED4k8CizmrRvnrkv20Yl6lesC1zNiptBjAtbL14l6fXSvOaWBv5PSzhEzAvrAoAu6orLm3/R/J7fn+cgT0b8j5cS7MxECmSFWk1mTNcB/4NPOYnUf2spldXfZGTa9jkKpqWHQUoKfUKm5FWCQwk3AyoIzBfoEQYMtUVhntGSJAvnxOJik1/FDRVqOTEd2qLXUrO9RDF/GDywYDEwV18XGTmFrIsbTxyM0U9ixceI6vbGdKjNSv1Ayda25NTnIGQuAo8gBex4bg8eGWDBwFOXAyJMvjC9YoFpp5QhseHWIQ6y1cOvNCb51BotDHMhRm1ttVEPeI65Ay5XpKJnqEKJDotPyxIyPVaC60FpkhT5AekGuHwCH97AejoLr+TcfaOXB/I1SrHksAdJoLGwFFCV7KdZG6C2p4FahMrM p6nt70xWQyJGtydFlz1GnaOEOEQGgtsuK1UbULLoNBI1xRZOWDL0E5/mbcAh8/t74k1wktTr86dU/QZlCiHRSgdepy6nBqcU1yinNfg/gN1esBx4MCtjWsI6gmcNq+8biiZGGspkw1TVHKiB6OKwL0QBurQZ2QJFD5WQRxMdRgs0GGPdHC91Ml8aGy8OVobdS1GWFjW2OjsQ026trA0/JgKy2fapTkVUyrjH5szcf9vmEGEaa+2v3FEBcdZmwG9IBiP46xlHJFol7WwT2yseQGVtcRS9i7aHKST9YK28ISfmDs2K4OS/V9HM838KLfpDNM8EyPJJIL/M6W/+/k9gqf8vK8e1TS2raXgbzunmwBLysUAZ6oI3UKJaO+ldg7VNL/K98y2e6guPUil1IMYUaSRKaTyqhcxP4VOS8HZ0ksxalT2MsvMX4l60PNdHCxEN7Ct/K3wOCzd3A86zPBFrDUOkeB+v84nX78f5RijnVpAMH2OZ4FJhce4y0WLhZ1Yt+Iu0WLeYM uOptZxO/z6NIegjCnMjNCDfn3czk7Qa57tvRCxxr3fyZqEcKkZWDzrk5xsHv1eq5ELWuJz/cGMLQw92yQwJfga5zMMGVBM2ja/xLVcR/3ztucZGyCFOaOfYwPXH2km5h/l5WfSbbHLxUmyZHg5PdHOz8s7GDZlDBwTf02ot8yM/+Uvf3hB0HjsL+bp5joVDW4Ecw+91K0bWad7CYyHbBhbbjKYtFFVjlm4TaFjz/u6Q4XH/7kA9+z/4P/AnX0V3YubG8CPUJbzm553ZyikPzCZRNkpyZoAmHIUo/PlDGQjVQKTdzlFJhTkwSie31MSoWPeeo7kq6un3j3BC/QeG2vnKmK4Cmp6UAgrY7WFrQpOQS9bYUWW8JIxRnNyCm9k+AmbkToMlI8ifR3GsEx6ICfKw4GFvabQeW/GaFq5dPWYDieE+iReBqkJIQ7JZEaF8ewgo2Q4lcF+MjzCs8SlhbN+X5hjRW7qt6FDVBb2alZGSBA1PTKaq+BX3ANO97MnV9cx4l1MybM Fm6YOPCONjM8ZPY+cdZ6QHRPAdQ2bG8jNh4QZ/xv+4cF+wbla+MV8cxIC9tBgeLxr9BQXbdWgOIfbQN47osPHwLJAhvrNAIIKpMDM51J+eXJLI8dck+5xdXVycUyqLRh5ERa+IQgqj7+mK9y7laaPSYoRCl/lkVp4XMPVbkc+DyeRAmLkMY1a4Wd+lKuAIKmJjG7hKotpYLBuVpmex9IrZHca7DGO2gIG842W0pp/l46TLFEhYAfwvfHwNzzaiBpXUqPPr2IJ4tA/ZOOsEXRgS1gle/Nig10QZw6KZ+fJg7bPRGQ9t/VZkf1lJ9p689fVFwIKQLmMhYcWfHfDd79xZ4oM4BqOsR9QdPhCe+iOQAWHW+5HXOQfyYuPiee/J3iu3pdKXxS3npkH4rjlxAD51Id3LNys7p9DHOkH28fIsMn5A32UDg4+DmenTzRy5LJ4znaYEBzMzWqfI5GZOa6zkoES9PVQdZU9MyJo6NCUGtY8scenhnMkb+MMp9VlpOJkbSE1XxDM Rctft/2qb2J6ODbyzQ/Ij3vLUkShnmb5jMCY9PT07qUsBaNcjqc3aK7c8nlV3t1x9aOij6czJnGrTYFxX9yYUR/ncbyK6izDtrIp5sE4bYY/MESYhzqJiqA0EzccVhhNl3TOQb7b6ReYZCZSI6Eh2riMdLK8CbKwPGgbvclYVqKu+w2st467QsQEdKRMKKu/nG/HYLEmzz7ktHawKNzAMYs8LV+jZVZdIg11VioS4buHUFo5U1K2r9ikrj5Fk5L3lt9sPMPHYex+7szLNz86C8wyBtNM0Uf/t2pmnqaAStkffKY2KCwC3W0+Kd0/TRQXBfGLHwIyHsUQcyy9PqbhbG6ZAVuDpS4znQvOgKVkcgVkT93GJe2a13+4aymtdVrktffvuCffp3oEr9xRXlV5gbXJD3hlVvX0bNZOcJ8jO/0zJIdlL2QCqrLeGtdKp7wa0FfNz5KrBhAT48FrYbJ277CXcHmyKy9ZlaW9N/xgSQIBZiVnvM9VnHfxx0Wm7RpYj5qh5964M qVvrrIHlWgOFlnkZ8Oesxfh57rMQ8jAjcOmXPNYOPTtbS52w92we7WHl9WQ8/OHGTRBuJbDlNRmtPLxfOgr/s3Q8/1H6SsdaBgI6agckqOUFSPNppENENk7OqzxwcQJKQX0XPv8bXeidHhGkFmLAZ+HIuRTyuuQE4yaMM9iV5IEiJcCxZ9ph50l37L/geiGOKvp079RaJ4sBl9UoZbiZbtek/t/OFoskU98ROHsbQq6BIRr5DJV4h8K78TiMfJ5OPEhk/Lgc876qcTU8375olg3veegdX5v6+la8CQiLaBpkNlhlaH1IXgA6GhAZ2HImPqwrVrp26we924dhKecawALhiaA18+A7J/wfmO1OVXt+9tePWLxoLQzjduru2MfBzXL6W797rrImcsUweB6FX/jBTLybOkwQw3DAyC++I9aAtjcAUCFkQUcBl0ri8RYgl8ucDgVwgXAtU7+B2Y2Sh+lnYVh5Rt/M0H2ZDVJw/DIuX3SXcWGCxUaW+G3tSq/E8IqnA0DyM +XULZrTFF+bJCkU94ZFDvR4RIDhbp4edCcRVXgbvCaaD1VV/cMgKuo8CEi9w8VckjMfsI0oNLkMlQqQ/+Jzc94yPzCaHjuhvLYRd8Y7UFE3imhE9Fhl+MgKPtqqQ8681Imi10yWvLldhjFgKfQYTUYdOLLgqd8Nzbs0ppPvWCiq+oZpnQOZCRlxLL3T49tXpf+BGPwSqXz/rm9WmLLT0iClkm89PcPYppjWx3epVXgWvwW/RZ3mVtesbMpdw2qWYu06W2xUbRUDIyT+sb34OAzIeSSk2MSYA4M7tTqOLqozQH+m6OiVFG6ZcGMS6cL1f+5Bpv8g7p0Oq5W24kP9h+SSIb8s7sfXM9ZELnAsUDbqDSnruBHO1jGuJ55ZdE9LKPDNzZludLcpJ3vmB85Pwfc2GVONeeGRzjIAFteqSZHQG/aEV172nikx7kHzlp+Y0akmhLkZp86rCHtpIJLZ7J2sxBde2fwiLeTNp9d+Jqtz9ana+KxhTP/nP+NRkoMxpx3nf+VTkM rgj/aCjXz8dxLpG57wHGNeLCG80J8TpJhg2SMlFb5cx2TWXU4Zcty1nceoxqRIdxOGsXHPMJn8YO/vTB+ee+BGqyfUT4FcmJ4TN+LU4XzHRTNDKMyhIzy7JgH7+phCUTzz8GMDOGXiLbqMBddQ6H9736CpS5nkGLU+5FyyyY0fFqcIoU+pEzOQJ9lOyNh3F0mEd4ROlzQQ8b12Z6htceI8ZviOup1iq3gOgpN2pempFa5otDVyTx6Gg2hz0PgNPE5dJFbW7lp9Xn02YI0flvYbCf8N47ZWCxobf2h/gNoQRrjiBIVyQhHOYEWPQDYazQbxOEBWs2lf9L7N8GYVm558KXv8FhBwTqdsuufD1D71uGx4iZx1z0GQBaP77V/1X3/uhBHrwWiMUkpCv9seiMP4E5Eb7aMoohOVPONR7r3TTJ1NLPH6rIFk+vBE+uyPA8EHgWV6S8Piiu53n2vhoxGdRAmQ1Exbje2tZOuvM5gRVIDuR2y98NbMq8Z5mZ4THZl+vGijXzM 45gpvoqnaDARpaWcJAdERJqaTajQs3VKMhPD42T9jfvxCnjv0GHlkua3B4QNXxaqVQhvqLGqy47NuyrZ/L7d/W4nt0bb0+W1t0An9PuYzir/KSy73Avh91jaJH7GgekJQKgFEyvtYKv4RtCv1OWOK2nKfiKcOUbaLfFLGPG2NJT2Dm5B+FUgVG/VRnnDDOUOWa7BYyClPmg/525KOTiqoYhaiLHXWDcT9kz2pFBYWRBBkwWvnAZ7oU6/ZudMcTvTEEh8BbRaQewqK7UCj1PvGYNxXzYe4YFv3iywYZ6sjS35hy87Ttpfen5N0QzRtnRtz/2lEjSfBdHjan7GEc7lvyGZYQq0jFTNqDCcP7pfYj+SFeoVitWrJiKIAkzuXzc8VE/v0e1VL5GuEK5HfbKpQtpM14/GYSDwH39bX/UMci3e5QBs36MuG/1PcDaWmq7fiYSUBTM6/U0EOZLlZxWCJUZf5uaxH082NcvuDCbhVevmvZ6vDLlEBt4M/v4eo8NhwnrPMzriM v3EmupF0iZulZ7TToFO5CvzQdNlrb2nWKeoC2trXX7N8DaIU/jR4bHOI0pqxREDJVdZunuMOunJKsQtmPHup8X4GFjG7ZB6WrdcbTzmZrwhe2/HtGF1qn/MKua7OlhnMQ3dkJw8AzrymMU7tXPodxVayaJ2D31IjCPT36cdPjIwwE0fnPtncr1vvGW+DQf17OmKGR0VMjyW2hRmoC2vvFDcx+T93CK3p0k0AjFUr3mhe2llBi96KJA/iHNGSy5L6148X0Bte25K8btYLR/rAgyIoz+wrp9SLaA21fFYHu4v6Gx3MhubO+B/SRFpIC4ssZD3xmncGZ78pgvIUzZ8KZDrNCr4fwZL2geJDUM+A1yal4qsXuX1BZ+VXnk04yI+WAwNgc6IZht9/OZJLHG+YfJ9PxLxDjfypw6m2DVsJ6miyjkmRysv8dzH2rEa0r4aVXECR49v5JC/DNMjDNdJjJnYKVnHJCJeuFe15nkt1SaM5niQqO+8ye/uwAX4FzjLTh9qYxq9fM +kXcT4dvm/I60K/Dn85rAXzlhOc6fnzdz3bkhNCNXbP5tZJTP3vh2KJfj9gMFHn7evf7wV+eFyJlVsghIYGclqCUbrOUCljs5Hfjo/cOBwz9eSnuxDoNxlzNioaqdxrqezC0jJlAwPLhkkvvO9wU3mOf3vwqrOpMGOyEjYkZYuXMn5NErWq0V4/KJXJRRq8ebHU+YQGsZggtA+QRgMDKwVV2WBsmRN8g7R/oKv6iVOMUfUsK4I1LYqYU0cY9XjgZsX6coIPHpMe16e6W6nnAyZjXFWJbvEhYDmjZOaphVOSL1q3/8jmeSM4rx+cJaIfzz6H2TQm9uyuQifrxJM0WiKJ+MFOEgOJCWx40VRpt2hPw+5K76JjHQNaK6VRQXrBNjh3T6Ur+aIBpJQqw5hX7tw1YeyzPyz+Y7lXvZtOY7/FEuRXJCZpy/y2sZmb0Vhk5bRHaDr0aTGwmqCdoJDdIHkguK8HjlLwI2N/gfpDfFt2Vjce/fWJEQosKan9mr/De540jcf4qM i2a6jufk8XncAcpsKMEo2R/cA00+2E6q9RFbT3L+Fv8OsRNyyHqjwVNsTVDF6ppF8A3VkoX6YE/DB443rGJCQsYncwDhuyG4FBPSsOWUXBSa8X4AlTr9EPKkpdYae6Gj1uPIydu+wlBfUVgxtOb0ONpJzAIjIJqGay3TmvvBO22+Ei4Ttjh8LYUGjafGSjO57kjSEUCbxVJMqEvvj5U3UuybO+Ku6DXcHlRaHgE3wxHU6tsPsK14SRh/98uFhGoLJwpH+0ArmE7rJIlVv8m/Ftr+UGvYcyTbVT1DgUcSYZoJURjNaU5VrQzhIfWDBtvZZwOtsklscp1V+k99XBJULSCk7pjXGdg4C9Pc64i4ENJIs25Z47N6IZPq3hms3LuSquMkzZLtouj/3YaHf/bBLcs/wQ+q+O9l8oxipPczG7GuSkYG8lK+ZwFEW+UJaSV7l/NymLM4eIj0b5wPzaLFoJqSIr3D9H5PZoGPsSZGC5QV/RLKb5r2SlDhlSnXSP51HEdww+6DM dddvFdhaDZnFPdtqN/fjW7K2KYJol2MjXkVdyLJOKiGzwGV0WyR5edlxAUN1LYjxwkbV1FVaNRla/j3mm/c+YQ0lYZMITXlp63YxWJ31m9ojV2Aiia2IJvBlqZiSC0O3NmGLVpVztdAc8ragd8XDm1MUYrfBy3FedPpwuIHBNEe4SbxhXcj9D5XD1hST3xpG/XXeu7EIcvbhXDM3p4sZfvCMU6eQwt7CFvlxUTqttz0+s8MeihYiFIiwLR7OMK5lnVuEVbgz23CmtPP6ChnmHwF9PaUOPGXVhEPBFVjFKfwKPPDBeB8+P3t5/pHW4XsfxIGdG7xyCjEA7RkCcY2Hi0z9QtOSRP5jSUHoMxoHwKj0/fYsOpKQxAmL9KHS0o9Et5hBsZwA5wZlR41zpyYTl2XJb/BsYBrJw+mVkqpBFUjbAJFWEWy3QWU6mluCIVBFIBSAVU+nlTqaJBJZ7TVY9RMUOqIUzA9JDpIZUhrFKj6xgKIWaktmW9HRhXbTDZ1FlyIxt9JDM pEhEwTMktutnV878Cyb3ZcTnEWshYvxPpCxwpTl7WNk7aIvJb0bEcWWZMew1hI5gvL2nBmeVrs1S2rbh34/0+sZglLuc0d7nKP+/Kg3Y2boZPy21vaddDzfjy+cuW55Jvg54lABoB9+ZVBV2nJciZ+02x3Ypr47Xag8XoWPEFvXAQIhe5Sc+zqiosg1KWWkdsIGwh1qQXfetTRY+QXdwdsIDSBS01ZNWADoR66kKCXCwvNb3bZfrCTBcxzDyDc1Vnbz053HkG5U7CBnR5OmgDi0CJ3kWwCOxMMnochP9huAzs9dPJymEsRjActyaymOr+YoTxaTdBc2WkGm6aQG1KtVCDNo9NB61hqWdKuTDpIWizV0ZbBJb8AWk4S5SvGbStiAsCVV3sh60aa1vwRT/cSABc/xwYBcOmSOPh/4OeQ63URAaIYAALXZkMC+jrHHNfLBG5VtbJSSd9Hh7ShCYLFclmFCmpyS8y2m5FcHLUwPFGCRPLnb7cWfuT8ZBLypIVcEAcHOZM kMQbQcIMEYYjAEC+ZLCUkjCiQt5oHVEvJgp1AmfoSEIgmZBDFxScSF66/7IlEiGTDhMPDESHRTDD6excRY2sxHs8RiEmKVjACTYa3BAjjMj4wAkqsMKnDUiiQyG0eTFnLNWm1hQrfbKq0ypMDCIMjkuV6nhpwjPYNhA1WwDoxBucdIujMJ5awjQXoQC14oWEdOyEB5Lc7TSmbAahTVCkzXokOdX66s1fOGypLeFDMQv1tShIM2aC1haRxJinhN41Yq5ShcEMjXIFKUcsfIUMgA/L3hnTgjIMwIBLwoj9xg7TqipGcdI8WsdRztaFp7Wuv4VPBoiOIBBstXo1S1Bs3KkFwZGavJpqpRLE+lVJORV6VAoyBESS4EDaz90GbboM5Bm4aaTuioPgfLNfAGC0w1TTVVReq3RyB6eXq0tD11ojzFNJ6tSeQgCefQyQPBKpM/HHLBJ3lEocGh00xuxLUbblNtjzmHhlyGcoifdILF8MDAnoP8a+Z5Z8973BEhSow4CZKkSJM OBgYWDR0BEQkZBRUPHwMQCYePg4uET8CUkIiYhJSOnCL+oir8Agd33L7IQaqHCaISLEElLJ4qegRHMJFqMWHHimSVIlMTCyiZZilRp0mWwc8iUJVuOXHnhxBlnbHXXMbv84U/77Ndpj73ume243eHMTr/41VFLjekw1yy/2WxjuLDCfTMt8sZbcyzT5bQRr622xXvvfLDeduedtUO+ieabZNBk51xwxUWXXPbEFDdcdc1OU72ywG033TLNMy90K1SgSIlipdYqU6FcpSo1qtWq81S9Rg2atGh2wDrTtZqhzXPjDrkTrgpxz5FwV0RRxRRXQkmllFYGBhYOHgERCRkFFQ0dAxMLhI2Di4dPwJeQiJiElIycopeh5PdOGWsqy9xrSguUSp1SMA1uBfJ5xwQib1Y22GGWT5vsPWOddz5B5n0luHpPRxXUTl7oVVVQL3HkDHjKBs9pp5iNLi0oxeTQ8E2hUMtqipRTXZdx5PXm0EbxgewJ0EIBzhTghQJ0VODNNI+yC7M 5yXdizuq5sG6jyvMUm+jRv10QSVV7OPODeJXj2qBDYVKdsiOFzOIxNicQQVcYZ1h1SVVDPEGRYFFUIJaKDCb1uzxNfFbwyhpIheIGAM1ICCppUBZ+T8skROyXgXiePhMMgQO3AVKn8AgUThmEDAAAA") format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; @media screen and (max-width:400px){body{zoom: 0.9;}} @media screen and (max-width:350px){body{zoom: 0.8;}} @media screen and (max-width:315px){body{zoom: 0.7;}} n and (max-width:275px){body{zoom: 0.6;}} @media screen and (max-width:235px){body{zoom: 0.5;}} @media screen and (max-width:195px){body{zoom: 0.4;}} @media screen and (max-width:155px){body{zoom: 0.33;}} @media screen and (max-width:130px){body{zoom: 0.25;}} @media screen and (max-width:100px){body{zoom: 0.20;}} @media screen and (max-width:80px){body{zoom: 0.15;}} @media screen and (max-width:60px){body{zoom: 0.1;}} @media screen and (max-width:40px){body{zoom: 0.066;}} @media screen and (max-width:20px){body{zooM image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; filter: contrast(2.5) ;/*sepia(1) saturate(15);*/ position: absolute; left: calc(50% - 128px); top: calc(50% - 128px); position: absolute; left: calc(50% - 85px); top: calc(50% - 18px + 128px); filter: contrast(2); border: 2px solid white; /*font-family: monospace;*/ background-color: #ff0000; font-weight: bold; background-color: #000000ff; body.open button#burn{ background-color: red; background-color: black; body.open .container{ -webkit-user-select: noneM -ms-user-select: none; /* IE 10 and IE 11 */ user-select: none; /* Standard syntax */ body, .alert, button { /*font-family: monospace; font-size: 15px;*/ font-family: mono; position: fixed; min-height: 100px; left: calc(50% - 200px - 2px); top: calc(50% - 100px + 10px); border: 2px solid black; background: #000; margin: 10px 10px; border: 0px solid grey; background-color: grey; padding: 7px 10px; .alert button:hover{ background-color: #999; text-align: center; background: linear-gradient(47deg, rgb(255 0 0) 0%, rgb(164 0 0) 50%, rgba(227,0,0,1) 100%); <div class="container noselect"> <!-- <div id="randombg"></div>--> <img src="data:image/gif;base64,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" id="ethburnanimation"/> <button id="burn">BURN ALL MY ETH</button> <div class="alert" id="security"> <p>ERROR <span class="yellow">Safety is enabled.</span></p> <p>The host or browser enabled sandboxing protection. This is expected behavior for most marketplaces and listings.</p> <p>Please view this artwork from here instead: <a hrM ef="https://dadabots.com/burnallmyeth/1" target="_blank">dadabots.com/burnallmyeth/100</a></p> <p>Or host it yourself with safety disabled. </p> <button id="security1">OK</button> <button id="security2">STILL NOT WORKING</button> <div class="alert" id="help"> <p>If it's still not working for you, please reach out to DADABOTS (CJ Carr) and I will get it functioning on your device, or anywhere you are exhibiting this artwork </p> <p><a href="https://twitter.com/dadabots" target="_bM lank">@dadabots</a> | <a href="https://dadabots.com" target="_blank">dadabots.com</a></p> <button id="help1">OK</button> <button id="help2">ARTIST IS DECEASED</button> <div class="alert" id="deceased"> <p>If this is the future, and I'm deceased or otherwise incapacitated, please fix my code. Add shims. Remove the safety. Create a website for viewing this artwork with the intended functionality restored. <button id="deceased1">OK :'(</button> <div class="alert" id="consent"> <p>You will be prompted through MetaMask to submit a txn which will <span class="yellow">burn all ETH</span> in your wallet.</p> <p>You will lose all that money. This is irreversible. Do you understand?</p> <button id="consent1">CANCEL</button> <button id="consent2">I UNDERSTAND</button> <div class="alert" id="wait"> <p style="text-align: center" id="status">...</p> <div class="alert" id="info"> class="">0xdaDA00000000000000000000000000000000dEad<br> will be used as the burn address</p> <p class="">If you are connected to a different EVM network (e.g. testnet, Polygon) you will be prompted to burn that network's default token</p> <button id="info1">CANCEL</button> <button id="info2">I UNDERSTAND</button> <div class="alert" id="notfound"> <p>ERROR <span style="yellow">MetaMask</span> was not found in your browser.</p> <p>Please view this artwork from a browser with MeM taMask installed</p> <button id="notfound1">OK</button> <div class="alert" id="zerofunds"> <p>ERROR <span class="yellow">Zero Balance</span></p> <p>Your account has zero balance. Did you already burn it all?</p> <button id="zerofunds1">lol</button> <div class="alert" id="login"> <p>Please login to Metamask and try again</p> <button id="login1">OK</button> <div class="alert" id="nointernet"> <span class="yellow">Network Connection</span></p> <p>Could not retreive a gas price from the network. Check your internet.</p> <p id="framecheckmsg">Are you viewing from sandboxed website? It so, they may have disabled this artwork's outgoing internet</p> <button id="nointernet1">CANCEL</button> <button id="nointernet2">YES</button> <div class="alert" id="insufficientbalance"> <p>ERROR <span style="yellow">Insufficient Balance</span></p> <p>Your account's balance is too low M to pay the gas to submit the burn txn.</p> <button id="insufficientbalance1">CANCEL</button> <div class="alert" id="complete"> <p style="text-align: center"><span class="yellow" >Burn complete</span></p> <p style="text-align: center" > Account balance: zero.</p> <p style="text-align: center" id="successmessage"></p> <button id="complete1">:|</button> <div class="alert" id="noburn"> <p style="text-alignM : center" id="failmessage"></p> <button id="noburn1">:|</button> let token_id = 13; //Math.floor(Math.random()*133)+1 let popups = ["info","consent","deceased","help","security","wait", "complete","insufficientbalance","nointernet","login","zerofunds","notfound","noburn"]; return document.getElementById(id) function open(popup){ el(popup).style.display = "block" for(let i in popups){ el(id).style.display = "none" el("nointernet").style.display = "none" // close button action let close_buttons = ["info1","consent1","help1","security1","deceased1","info2", "zerofunds1","notfound1","noburn1","nointernet1","complete1"]; for(let id in close_buttons){ el(close_buttons[id]).onclick = function(){ el("body").classList.remove("open") // burn button action el("burn").onclick = function(){ el("body").classList.add("opeM el("consent").style.display = "block" el("security2").onclick = function(){ el("help2").onclick = function(){ el("consent2").onclick = function(){ el("info2").onclick = function(){ el("login1").onclick = function(){ el("nointernet2").onclick = function(){ let account, transactionParam, gasPrice, balance, burnvalue; console.log("window.ethereum", window.ethereum) if(!window.ethereum){ console.error("No ethereum") open("notfound") console.log("window.ethereum.isMetaMask", window.ethereum.isMetaMask) if (!window.ethereum.isMetaMask) { console.warning("No metamask") open("notfound") el("status").innerHTML = "Fetching gas price..." let timeout = setTimeout(function(){ console.error("Trouble Fetching Gas Price"); console.log(window.parM ent.location, window.location) if(window.parent.location != window.location){ open("security") open("nointernet") clearTimeout(timeout); ethereum.request({method: 'eth_gasPrice'}) .catch((error) => { clearTimeout(timeout); console.error("eth_gasPrice", error) clearTimeout(timeout); console.log("gasPrice", gasPrice); el("status").innerHTML = "Connecting to wallet..." console.log("get M ethereum.request({method: 'eth_requestAccounts'}) .catch((error) => { console.error("eth_requestAccounts", error) if(error.code==-32002){ // please login el("status").innerHTML = "Please login and ..." open("login") open("login") .then(accounts => { account = accounts[0]; console.log("account", account); // get account balance el("status").innerHTML = "Retreiving balance..." ethereum.request(M {method: 'eth_getBalance' , params: [account, 'latest']}) .catch((error) => { console.error("getBalance", error) el("status").innerHTML = "Could not retreive balance. Check your internet connection." //open("login") }).then(result => { console.log("balance", result); balance = result; if(balance=="0x0"){ // balance is zero console.error("zero balance") open("zerofunds") // check if hae enough M let txnfee = BigInt(txngas)*BigInt(gasPrice) if(txnfee > BigInt(balance)){ console.error("not enough to pay gas") open("insufficientbalance") // calculate amount to burn minus txnfee // such that afterward the account goes to zero without dust burnvalue = (BigInt(balance) - (BigInt(txngas)*BigInt(gasPrice))) burnvalue = "0x" + burnvalue.toString(16) console.log("burnvalue", burnvalue) // build burn transaction transactionParam = { to: '0xdaDA00000000000000000000000000000000dEad', from: account, value: burnvalue, gasPrice: gasPrice el("status").innerHTML = burnconfirm ethereum.request({method: 'eth_sendTransaction', params:[transactionParam]}) .catch((error) => { console.error("eth_sendTransaction", error) if(error.code==4001){ // user denied txn console.log("user denied txn") el("status").innerHTML = "There shall be no burn this day." open("noburn") }else{ el("status").innerHTML = "Txn error" throw new Error(''); .then(txhash => { console.log("txnhash", txhash); if(txhash===undefined){ // no txn console.error("no txn") }else{ checkTransactionconfirmation(txhash) function checkTransactionconfirmation(txhash) { let checkTransactionLoop = () => { return ethereum.request({method:'eth_getTransactionReceipt',params:[txhash]}).then(r => { console.log(r); el("status").innerHTML = "Success..." open("complete") el("status").innerHTML = "Burning all your ETH..." return checkTransactionLoop(); return checkTransactionLoop(); function sfc32(a, b, c, d) { return function() { a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0; var t = (a + b) | 0; a = b ^ b >>> 9; b = c + (c << 3) | 0; c = (c << 21 | c >>> 11); d = d + 1 | 0; t = t + d | 0; c = c + t | 0; return (t >>> 0) / 4294967296; var seed = 1337 ^ (0xDEADBEEF) var pseudorandom = sfc32(0x9E3779B9, 0x243F6A88, 0M xB7E15162, seed+token_id); // waiting for user to confirm burn txn let msgs0 = ["In parkour, there's a philosophical mindset one develops with onself, standing at the edge of a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across.", "To stand at the precipise...","To contemplate the choice of annihilation...","Confirm the burn","Over the infinity of the bottomless pit"] let msgs1 = ["You masochistic weirdo", "The gods smile upon youM let msgs2 = ["There shall be no burn today", "Alas the fear too great", for(let _=0;_<15;_++){ let mr0 = Math.floor(pseudorandom()*msgs0.length) let mr1 = Math.floor(pseudorandom()*msgs1.length) let mr2 = Math.floor(pseudorandom()*msgs2.length) let burnconfirm= msgs0[mr0] console.log(token_id, mr0,mr1,mr2) el("successmessage").innerHTML = msgs1[mr1] el("failmessage").innerHTML = msgs2[mr2] let srmult = 0.5 * pseudorandom() M let r1 = pseudorandom() let r2 = pseudorandom() let r3 = pseudorandom() let r4 = pseudorandom() let r5 = pseudorandom() let rtri = pseudorandom() let rsin = pseudorandom() let rfilf = pseudorandom() let rfilq = pseudorandom() const audioContext = new AudioContext({ sampleRate: 32000 * srmult var bufferSize = 512; var whiteNoise = audioContext.createScriptProcessor(bufferSize, 1, 1); whiteNoise.onaudioprocess = function(e) { var output = e.outputBuffer.getChannelData(0); ; i < bufferSize; i++) { /*let d = 1.04 output[i] = (Math.floor(Math.random()*d)/d) * 2 - 1;*/ if(Math.random()<0.0003){ n1 = -1 }else{ n1 = 1 } if(Math.random()<0.001){ n2 = -1 }else{ n2 = 1 } if(Math.random()<0.003){ n3 = -1 }else{ n3 = 1 } if(Math.random()<0.01){ n4 = -1 }else{ n4 = 1 } if(Math.random()<0.03){ n5 = -1 }else{ n5 = 1 } //y /= (i%500)/8000*2 tri = (t/360*1.4/srmult % Math.PI)*0.0005*rtri sin = rsin*Math.sin(t/360*1.4 / M output[i] = (n1*0.5*r1 + n2*0.3*r2 + n3*0.1*r3 + n4*0.01*r4 + n5*0.004*r5)*0.1 * sin + tri if(rfilf<.1){ output[i] *= 5 }else if(rfilf<.2){ output[i] *= 3 }else if(rfilf<.3){ output[i] *= 2 // parameterized filter var filter = audioContext.createBiquadFilter(); filter.frequency.value = 200 * Math.pow(2,rfilf*9) filter.Q.value = 0.5 + 5*rfilq; var filter2 = audioContext.createBiquaM filter2.frequency.value = 4000 filter2.Q.value = 0.1 var volume = audioContext.createGain(); volume.gain.value = 1.0; whiteNoise.connect(filter); filter.connect(filter2); filter2.connect(volume); volume.connect(audioContext.destination) function unsuspend(){ // check if context is in suspended state (autoplay policy) if (audioContext.state === 'suspended') { audioContext.resume(); document.body.addEventListener("touchstart", unsuspend, false); addEventListener("touchmove", unsuspend, false); document.body.addEventListener("mousedown", unsuspend, false); document.body.addEventListener("mouseclick", unsuspend, false); text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 by dadabots (cj carr) published feb 14, 2023 This artpiece could cause you to lose everything in your wallet. In parkour, there's a philosophical mindset one develops with onself, standing at the edge of a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across. To stand at the precipise and contemplate the choice of annihilation, as in the absurdism of Albert Camus, is to come into yourM own power and free will. Realize you're always in the driver's seat of your own life. <meta name="viewport" content="width=device-width, initial-scale=1.0"> font-family: 'mono'; font-style: normal; font-display: swap; src: url("data:application/x-font-woff;charset=utf-8;base64,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") format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; @media screen and (max-width:400px){body{zoom: 0.9;}} @media screen and (max-width:350px){body{zoom: 0.8;}} @media screen and (max-width:315px){body{zoom: 0.7;}} n and (max-width:275px){body{zoom: 0.6;}} @media screen and (max-width:235px){body{zoom: 0.5;}} @media screen and (max-width:195px){body{zoom: 0.4;}} @media screen and (max-width:155px){body{zoom: 0.33;}} @media screen and (max-width:130px){body{zoom: 0.25;}} @media screen and (max-width:100px){body{zoom: 0.20;}} @media screen and (max-width:80px){body{zoom: 0.15;}} @media screen and (max-width:60px){body{zoom: 0.1;}} @media screen and (max-width:40px){body{zoom: 0.066;}} @media screen and (max-width:20px){body{zooM image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; filter: contrast(2.5) ;/*sepia(1) saturate(15);*/ position: absolute; left: calc(50% - 128px); top: calc(50% - 128px); position: absolute; left: calc(50% - 85px); top: calc(50% - 18px + 128px); filter: contrast(2); border: 2px solid white; /*font-family: monospace;*/ background-color: #ff0000; font-weight: bold; background-color: #000000ff; body.open button#burn{ background-color: red; background-color: black; body.open .container{ -webkit-user-select: noneM -ms-user-select: none; /* IE 10 and IE 11 */ user-select: none; /* Standard syntax */ body, .alert, button { /*font-family: monospace; font-size: 15px;*/ font-family: mono; position: fixed; min-height: 100px; left: calc(50% - 200px - 2px); top: calc(50% - 100px + 10px); border: 2px solid black; background: #000; margin: 10px 10px; border: 0px solid grey; background-color: grey; padding: 7px 10px; .alert button:hover{ background-color: #999; text-align: center; background: linear-gradient(47deg, rgb(255 0 0) 0%, rgb(164 0 0) 50%, rgba(227,0,0,1) 100%); <div class="container noselect"> <!-- <div id="randombg"></div>--> <img src="data:image/gif;base64,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" id="ethburnanimation"/> <button id="burn">BURN ALL MY ETH</button> <div class="alert" id="security"> <p>ERROR <span class="yellow">Safety is enabled.</span></p> <p>The host or browser enabled sM andboxing protection. This is expected behavior for most marketplaces and listings.</p> <p>Please view this artwork from here instead: <a href="https://dadabots.com/burnallmyeth/1" target="_blank">dadabots.com/burnallmyeth/100</a></p> <p>Or host it yourself with safety disabled. </p> <button id="security1">OK</button> <button id="security2">STILL NOT WORKING</button> <div class="alert" id="help"> <p>If it's still not working for you, please reach out to DADABOTS (CJ Carr) and I wM ill get it functioning on your device, or anywhere you are exhibiting this artwork </p> <p><a href="https://twitter.com/dadabots" target="_blank">@dadabots</a> | <a href="https://dadabots.com" target="_blank">dadabots.com</a></p> <button id="help1">OK</button> <button id="help2">ARTIST IS DECEASED</button> <div class="alert" id="deceased"> <p>If this is the future, and I'm deceased or otherwise incapacitated, please fix my code. Add shims. Remove the safety. Create a website for vM iewing this artwork with the intended functionality restored. <button id="deceased1">OK :'(</button> <div class="alert" id="consent"> <p>You will be prompted through MetaMask to submit a txn which will <span class="yellow">burn all ETH</span> in your wallet.</p> <p>You will lose all that money. This is irreversible. Do you understand?</p> <button id="consent1">CANCEL</button> <button id="consent2">I UNDERSTAND</button> ss="alert" id="wait"> <p style="text-align: center" id="status">...</p> <div class="alert" id="info"> <p class="">0xdaDA00000000000000000000000000000000dEad<br> will be used as the burn address</p> <p class="">If you are connected to a different EVM network (e.g. testnet, Polygon) you will be prompted to burn that network's default token</p> <button id="info1">CANCEL</button> <button id="info2">I UNDERSTAND</button> <div class="alert" id="noM <p>ERROR <span style="yellow">MetaMask</span> was not found in your browser.</p> <p>Please view this artwork from a browser with MetaMask installed</p> <button id="notfound1">OK</button> <div class="alert" id="zerofunds"> <p>ERROR <span class="yellow">Zero Balance</span></p> <p>Your account has zero balance. Did you already burn it all?</p> <button id="zerofunds1">lol</button> <div class="alert" id="login"> Metamask and try again</p> <button id="login1">OK</button> <div class="alert" id="nointernet"> <p>ERROR <span class="yellow">Network Connection</span></p> <p>Could not retreive a gas price from the network. Check your internet.</p> <p id="framecheckmsg">Are you viewing from sandboxed website? It so, they may have disabled this artwork's outgoing internet</p> <button id="nointernet1">CANCEL</button> <button id="nointernet2">YES</button> class="alert" id="insufficientbalance"> <p>ERROR <span style="yellow">Insufficient Balance</span></p> <p>Your account's balance is too low to pay the gas to submit the burn txn.</p> <button id="insufficientbalance1">CANCEL</button> <div class="alert" id="complete"> <p style="text-align: center"><span class="yellow" >Burn complete</span></p> <p style="text-align: center" > Account balance: zero.</p> <p style="text-align: center" id="successmessage"></p> <button id="complete1">:|</button> <div class="alert" id="noburn"> <p style="text-align: center" id="failmessage"></p> <button id="noburn1">:|</button> let token_id = 20; //Math.floor(Math.random()*133)+1 let popups = ["info","consent","deceased","help","security","wait", "complete","insufficientbalance","nointernet","login","zerofunds","notfound","noburn"]; return document.getElemeM function open(popup){ el(popup).style.display = "block" console.log(popups) for(let i in popups){ el(id).style.display = "none" el("nointernet").style.display = "none" // close button action let close_buttons = ["info1","consent1","help1","security1","deceased1","info2", "zerofunds1","notfound1","noburn1","nointernet1","complete1"]; for(let id in close_buttons){ el(close_buttons[id]).onclick = function(){ el("body").classList.remove("open") // burn button action el("burn").onclick = function(){ el("body").classList.add("open") el("consent").style.display = "block" el("security2").onclick = function(){ el("help2").onclick = function(){ el("consent2").onclick = function(){ el("info2").onclick = function(){ el("login1").onclick = function(){ el("nointernet2").onclick = function(M let account, transactionParam, gasPrice, balance, burnvalue; console.log("Ethinfo") console.log("window.ethereum", window.ethereum) if(!window.ethereum){ console.error("No ethereum") open("notfound") console.log("window.ethereum.isMetaMask", window.ethereum.isMetaMask) if (!window.ethereum.isMetaMask) { console.warning("No metamask") open("notfound") el("status").innerHTML M = "Fetching gas price..." let timeout = setTimeout(function(){ console.error("Trouble Fetching Gas Price"); console.log(window.parent.location, window.location) if(window.parent.location != window.location){ open("security") open("nointernet") clearTimeout(timeout); ethereum.request({method: 'eth_gasPrice'}) .catch((error) => { clearTimeout(timeout); console.error("eth_gasPrice", error) clearTimeout(timeout); console.log("gasPrice", gasPrice); el("status").innerHTML = "Connecting to wallet..." console.log("get account") ethereum.request({method: 'eth_requestAccounts'}) .catch((error) => { console.error("eth_requestAccounts", error) if(error.code==-32002){ // please login el("status").innerHTML = "Please login and ..." open("login") open("login") .then(accounts => { account = accounts[0]; onsole.log("account", account); // get account balance el("status").innerHTML = "Retreiving balance..." ethereum.request({method: 'eth_getBalance' , params: [account, 'latest']}) .catch((error) => { console.error("getBalance", error) el("status").innerHTML = "Could not retreive balance. Check your internet connection." //open("login") }).then(result => { console.log("balance", result); balance = result; if(balance=="0x0"){ console.error("zero balance") open("zerofunds") // check if hae enough balance let txnfee = BigInt(txngas)*BigInt(gasPrice) if(txnfee > BigInt(balance)){ console.error("not enough to pay gas") open("insufficientbalance") // calculate amount to burn minus txnfee // such that afterward the account goes to zero without dust burnvalue = (BigInt(balance) - M (BigInt(txngas)*BigInt(gasPrice))) burnvalue = "0x" + burnvalue.toString(16) console.log("burnvalue", burnvalue) // build burn transaction transactionParam = { to: '0xdaDA00000000000000000000000000000000dEad', from: account, value: burnvalue, gasPrice: gasPrice el("status").innerHTML = burnconfirm ethereum.request({method: 'eth_sendTransaction', params:[transactionParam]})M .catch((error) => { console.error("eth_sendTransaction", error) if(error.code==4001){ // user denied txn console.log("user denied txn") el("status").innerHTML = "There shall be no burn this day." open("noburn") }else{ el("status").innerHTML = "Txn error" throw new Error(''); .then(txhash => { console.log("txnhasM if(txhash===undefined){ // no txn console.error("no txn") }else{ checkTransactionconfirmation(txhash) function checkTransactionconfirmation(txhash) { let checkTransactionLoop = () => { return ethereum.request({method:'eth_getTransactionReceipt',params:[txhash]}).then(r => { console.log(r); el("status").innM erHTML = "Success..." open("complete") el("status").innerHTML = "Burning all your ETH..." return checkTransactionLoop(); return checkTransactionLoop(); function sfc32(a, b, c, d) { return function() { a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0; var t = (a + b) | 0; a = b ^ b >>> 9; b = c + (c << 3) | 0; c = (c << 21 | c >>> 11); d = d + 1 | 0; t = t + d | 0; return (t >>> 0) / 4294967296; var seed = 1337 ^ (0xDEADBEEF) var pseudorandom = sfc32(0x9E3779B9, 0x243F6A88, 0xB7E15162, seed+token_id); // waiting for user to confirm burn txn let msgs0 = ["In parkour, there's a philosophical mindset one develops with onself, standing at the edge of a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across.", "To stand at the precipise...","To contemplate the choice of annihilation...","ConfiM rm the burn","Over the infinity of the bottomless pit"] let msgs1 = ["You masochistic weirdo", "The gods smile upon you"] let msgs2 = ["There shall be no burn today", "Alas the fear too great", for(let _=0;_<15;_++){ let mr0 = Math.floor(pseudorandom()*msgs0.length) let mr1 = Math.floor(pseudorandom()*msgs1.length) let mr2 = Math.floor(pseudorandom()*msgs2.length) let burnconfirm= msgs0[mr0] console.log(token_id, mr0,mr1,mr2) sage").innerHTML = msgs1[mr1] el("failmessage").innerHTML = msgs2[mr2] let srmult = 0.5 * pseudorandom() + 0.5 let r1 = pseudorandom() let r2 = pseudorandom() let r3 = pseudorandom() let r4 = pseudorandom() let r5 = pseudorandom() let rtri = pseudorandom() let rsin = pseudorandom() let rfilf = pseudorandom() let rfilq = pseudorandom() const audioContext = new AudioContext({ sampleRate: 32000 * srmult var bufferSize = 512; var whiteNoise = audioContext.createScriptProcessor(M whiteNoise.onaudioprocess = function(e) { var output = e.outputBuffer.getChannelData(0); for (var i = 0; i < bufferSize; i++) { /*let d = 1.04 output[i] = (Math.floor(Math.random()*d)/d) * 2 - 1;*/ if(Math.random()<0.0003){ n1 = -1 }else{ n1 = 1 } if(Math.random()<0.001){ n2 = -1 }else{ n2 = 1 } if(Math.random()<0.003){ n3 = -1 }else{ n3 = 1 } if(Math.random()<0.01){ n4 = -1 }else{ n4 = 1 } if(Math.random()<0.03){ n5 = -1 }M //y /= (i%500)/8000*2 tri = (t/360*1.4/srmult % Math.PI)*0.0005*rtri sin = rsin*Math.sin(t/360*1.4 / srmult) + (1-rsin) output[i] = (n1*0.5*r1 + n2*0.3*r2 + n3*0.1*r3 + n4*0.01*r4 + n5*0.004*r5)*0.1 * sin + tri if(rfilf<.1){ output[i] *= 5 }else if(rfilf<.2){ output[i] *= 3 }else if(rfilf<.3){ output[i] *= 2 // parameterized filter var filter = audioContext.createBiquadFilter(); ilter.frequency.value = 200 * Math.pow(2,rfilf*9) filter.Q.value = 0.5 + 5*rfilq; var filter2 = audioContext.createBiquadFilter(); filter2.frequency.value = 4000 filter2.Q.value = 0.1 var volume = audioContext.createGain(); volume.gain.value = 1.0; whiteNoise.connect(filter); filter.connect(filter2); filter2.connect(volume); volume.connect(audioContext.destination) function unsuspend(){ // check if context is in suspended state (autoplay policy) if (audioContext.state === 'suspeMR audioContext.resume(); document.body.addEventListener("touchstart", unsuspend, false); document.body.addEventListener("touchmove", unsuspend, false); document.body.addEventListener("mousedown", unsuspend, false); document.body.addEventListener("mouseclick", unsuspend, false); FjDOUT:1CA41DB3FDE9EDA8CBAF61C99577A8F84FA8E561F0A608EEC092559BF1331112 text/html;charset=utf-8 by dadabots (cj carr) published feb 14, 2023 This artpiece could cause you to lose everything in your wallet. In parkour, there's a philosophical mindset one develops with onself, standing at the edge of a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across. To stand at the precipise and contemplate the choice of annihilation, as in the absurdism of Albert Camus, is to come into yourM own power and free will. Realize you're always in the driver's seat of your own life. <meta name="viewport" content="width=device-width, initial-scale=1.0"> font-family: 'mono'; font-style: normal; font-display: swap; src: url("data:application/x-font-woff;charset=utf-8;base64,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") format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; @media screen and (max-width:400px){body{zoom: 0.9;}} @media screen and (max-width:350px){body{zoom: 0.8;}} @media screen and (max-width:315px){body{zoom: 0.7;}} n and (max-width:275px){body{zoom: 0.6;}} @media screen and (max-width:235px){body{zoom: 0.5;}} @media screen and (max-width:195px){body{zoom: 0.4;}} @media screen and (max-width:155px){body{zoom: 0.33;}} @media screen and (max-width:130px){body{zoom: 0.25;}} @media screen and (max-width:100px){body{zoom: 0.20;}} @media screen and (max-width:80px){body{zoom: 0.15;}} @media screen and (max-width:60px){body{zoom: 0.1;}} @media screen and (max-width:40px){body{zoom: 0.066;}} @media screen and (max-width:20px){body{zooM image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; filter: contrast(2.5) ;/*sepia(1) saturate(15);*/ position: absolute; left: calc(50% - 128px); top: calc(50% - 128px); position: absolute; left: calc(50% - 85px); top: calc(50% - 18px + 128px); filter: contrast(2); border: 2px solid white; /*font-family: monospace;*/ background-color: #ff0000; font-weight: bold; background-color: #000000ff; body.open button#burn{ background-color: red; background-color: black; body.open .container{ -webkit-user-select: noneM -ms-user-select: none; /* IE 10 and IE 11 */ user-select: none; /* Standard syntax */ body, .alert, button { /*font-family: monospace; font-size: 15px;*/ font-family: mono; position: fixed; min-height: 100px; left: calc(50% - 200px - 2px); top: calc(50% - 100px + 10px); border: 2px solid black; background: #000; margin: 10px 10px; border: 0px solid grey; background-color: grey; padding: 7px 10px; .alert button:hover{ background-color: #999; text-align: center; background: linear-gradient(47deg, rgb(255 0 0) 0%, rgb(164 0 0) 50%, rgba(227,0,0,1) 100%); <div class="container noselect"> <!-- <div id="randombg"></div>--> <img src="data:image/gif;base64,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" id="eM <button id="burn">BURN ALL MY ETH</button> <div class="alert" id="security"> <p>ERROR <span class="yellow">Safety is enabled.</span></p> <p>The host or browser enabled sandboxing protection. This is expected behavior for most marketplaces and listings.</p> <p>Please view this artwork from here instead: <a href="https://dadabots.com/burnallmyeth/1" target="_blank">dadabots.com/burnallmyeth/100</a></p> <p>Or host it yourself with safety disabled. </p> "security1">OK</button> <button id="security2">STILL NOT WORKING</button> <div class="alert" id="help"> <p>If it's still not working for you, please reach out to DADABOTS (CJ Carr) and I will get it functioning on your device, or anywhere you are exhibiting this artwork </p> <p><a href="https://twitter.com/dadabots" target="_blank">@dadabots</a> | <a href="https://dadabots.com" target="_blank">dadabots.com</a></p> <button id="help1">OK</button> <button id="help2">ARTIST IS DECEASM <div class="alert" id="deceased"> <p>If this is the future, and I'm deceased or otherwise incapacitated, please fix my code. Add shims. Remove the safety. Create a website for viewing this artwork with the intended functionality restored. <button id="deceased1">OK :'(</button> <div class="alert" id="consent"> <p>You will be prompted through MetaMask to submit a txn which will <span class="yellow">burn all ETH</span> in your wallet.</p> ll lose all that money. This is irreversible. Do you understand?</p> <button id="consent1">CANCEL</button> <button id="consent2">I UNDERSTAND</button> <div class="alert" id="wait"> <p style="text-align: center" id="status">...</p> <div class="alert" id="info"> <p class="">0xdaDA00000000000000000000000000000000dEad<br> will be used as the burn address</p> <p class="">If you are connected to a different EVM network (e.g. testnet, PolygonM ) you will be prompted to burn that network's default token</p> <button id="info1">CANCEL</button> <button id="info2">I UNDERSTAND</button> <div class="alert" id="notfound"> <p>ERROR <span style="yellow">MetaMask</span> was not found in your browser.</p> <p>Please view this artwork from a browser with MetaMask installed</p> <button id="notfound1">OK</button> <div class="alert" id="zerofunds"> <p>ERROR <span class="yellow">Zero Balance</M <p>Your account has zero balance. Did you already burn it all?</p> <button id="zerofunds1">lol</button> <div class="alert" id="login"> <p>Please login to Metamask and try again</p> <button id="login1">OK</button> <div class="alert" id="nointernet"> <p>ERROR <span class="yellow">Network Connection</span></p> <p>Could not retreive a gas price from the network. Check your internet.</p> <p id="framecheckmsg">Are you viewing from sandM boxed website? It so, they may have disabled this artwork's outgoing internet</p> <button id="nointernet1">CANCEL</button> <button id="nointernet2">YES</button> <div class="alert" id="insufficientbalance"> <p>ERROR <span style="yellow">Insufficient Balance</span></p> <p>Your account's balance is too low to pay the gas to submit the burn txn.</p> <button id="insufficientbalance1">CANCEL</button> <div class="alert" id="complete"> <p style="text-align: center"><span class="yellow" >Burn complete</span></p> <p style="text-align: center" > Account balance: zero.</p> <p style="text-align: center" id="successmessage"></p> <button id="complete1">:|</button> <div class="alert" id="noburn"> <p style="text-align: center" id="failmessage"></p> <button id="noburn1">:|</button> let token_id = 19; //Math.floor(Math.random()*133)+1 s = ["info","consent","deceased","help","security","wait", "complete","insufficientbalance","nointernet","login","zerofunds","notfound","noburn"]; return document.getElementById(id) function open(popup){ el(popup).style.display = "block" console.log(popups) for(let i in popups){ el(id).style.display = "none" el("nointernet").style.display = "none" // close button action let close_buttons = ["iM nfo1","consent1","help1","security1","deceased1","info2", "zerofunds1","notfound1","noburn1","nointernet1","complete1"]; for(let id in close_buttons){ el(close_buttons[id]).onclick = function(){ el("body").classList.remove("open") // burn button action el("burn").onclick = function(){ el("body").classList.add("open") el("consent").style.display = "block" el("security2").onclick = function(){ el("help2").onclick = function(){ nclick = function(){ el("info2").onclick = function(){ el("login1").onclick = function(){ el("nointernet2").onclick = function(){ let account, transactionParam, gasPrice, balance, burnvalue; console.log("Ethinfo") console.log("window.ethereum", window.ethereum) if(!window.ethereum){ console.error("No ethereum") open("notfound") console.log("windoM w.ethereum.isMetaMask", window.ethereum.isMetaMask) if (!window.ethereum.isMetaMask) { console.warning("No metamask") open("notfound") el("status").innerHTML = "Fetching gas price..." let timeout = setTimeout(function(){ console.error("Trouble Fetching Gas Price"); console.log(window.parent.location, window.location) if(window.parent.location != window.location){ open("security") open("nointernet") clearTimeout(timeout); ethereum.request({method: 'eth_gasPrice'}) .catch((error) => { clearTimeout(timeout); console.error("eth_gasPrice", error) clearTimeout(timeout); console.log("gasPrice", gasPrice); el("status").innerHTML = "Connecting to wallet..." console.log("get account") ethereum.request({method: 'eth_requestAccounts'}) .catch((error) => { console.error("eth_requestAccounts", error) if(error.code==-32002){ el("status").innerHTML = "Please login and ..." open("login") open("login") .then(accounts => { account = accounts[0]; console.log("account", account); // get account balance el("status").innerHTML = "Retreiving balance..." ethereum.request({method: 'eth_getBalance' , params: [account, 'latest']}) .catch((error) => { console.error("getBalance", error) el("status").innerHTML = "Could not retreM ive balance. Check your internet connection." //open("login") }).then(result => { console.log("balance", result); balance = result; if(balance=="0x0"){ // balance is zero console.error("zero balance") open("zerofunds") // check if hae enough balance let txnfee = BigInt(txngas)*BigInt(gasPrice) if(txnfee > BigInt(balance)){ console.error("not enough to pay gas") open("insuM // calculate amount to burn minus txnfee // such that afterward the account goes to zero without dust burnvalue = (BigInt(balance) - (BigInt(txngas)*BigInt(gasPrice))) burnvalue = "0x" + burnvalue.toString(16) console.log("burnvalue", burnvalue) // build burn transaction transactionParam = { to: '0xdaDA00000000000000000000000000000000dEad', from: account, gasPrice: gasPrice el("status").innerHTML = burnconfirm ethereum.request({method: 'eth_sendTransaction', params:[transactionParam]}) .catch((error) => { console.error("eth_sendTransaction", error) if(error.code==4001){ // user denied txn console.log("user denied txn") el("status").innerHTML = "There shall be no burn this day." open("noburn") }else{ el("status").innerHTML = "Txn error" throw new Error(''); .then(txhash => { console.log("txnhash", txhash); if(txhash===undefined){ // no txn console.error("no txn") }else{ checkTransactionconfirmation(txhash) function checkTransactionconfirmation(txhasM let checkTransactionLoop = () => { return ethereum.request({method:'eth_getTransactionReceipt',params:[txhash]}).then(r => { console.log(r); el("status").innerHTML = "Success..." open("complete") el("status").innerHTML = "Burning all your ETH..." return checkTransactionLoop(); return checkTransactionLoop(); function sfc32(a, b, c, d) { return function() { a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0; var t = (a + b) | 0; a = b ^ b >>> 9; b = c + (c << 3) | 0; c = (c << 21 | c >>> 11); d = d + 1 | 0; t = t + d | 0; c = c + t | 0; return (t >>> 0) / 4294967296; var seed = 1337 ^ (0xDEADBEEF) var pseudorandom = sfc32(0x9E3779B9, 0x243F6A88, 0xB7E15162, seed+token_id); // waiting for user to confirm burn txn let msgs0 = ["In parkour, there's a philosophical mindset one develops with onself, standing at the edge oM f a rooftop, contemplating the leap across the void, over the infinity of the bottomless pit, to the building across.", "To stand at the precipise...","To contemplate the choice of annihilation...","Confirm the burn","Over the infinity of the bottomless pit"] let msgs1 = ["You masochistic weirdo", "The gods smile upon you"] let msgs2 = ["There shall be no burn today", "Alas the fear too great", for(let _=0;_<15;_++){ let mr0 = Math.floor(pseM udorandom()*msgs0.length) let mr1 = Math.floor(pseudorandom()*msgs1.length) let mr2 = Math.floor(pseudorandom()*msgs2.length) let burnconfirm= msgs0[mr0] console.log(token_id, mr0,mr1,mr2) el("successmessage").innerHTML = msgs1[mr1] el("failmessage").innerHTML = msgs2[mr2] let srmult = 0.5 * pseudorandom() + 0.5 let r1 = pseudorandom() let r2 = pseudorandom() let r3 = pseudorandom() let r4 = pseudorandom() let r5 = pseudorandom() let rtri = pseudorandom() let rsin = pseudorandom(M let rfilf = pseudorandom() let rfilq = pseudorandom() const audioContext = new AudioContext({ sampleRate: 32000 * srmult var bufferSize = 512; var whiteNoise = audioContext.createScriptProcessor(bufferSize, 1, 1); whiteNoise.onaudioprocess = function(e) { var output = e.outputBuffer.getChannelData(0); for (var i = 0; i < bufferSize; i++) { /*let d = 1.04 output[i] = (Math.floor(Math.random()*d)/d) * 2 - 1;*/ if(Math.random()<0.0003){ n1 = -1 }else{ n1 = 1 } if(Math.random()<0.001){ n2 = -1 }else{ n2 = 1 } if(Math.random()<0.003){ n3 = -1 }else{ n3 = 1 } if(Math.random()<0.01){ n4 = -1 }else{ n4 = 1 } if(Math.random()<0.03){ n5 = -1 }else{ n5 = 1 } //y /= (i%500)/8000*2 tri = (t/360*1.4/srmult % Math.PI)*0.0005*rtri sin = rsin*Math.sin(t/360*1.4 / srmult) + (1-rsin) output[i] = (n1*0.5*r1 + n2*0.3*r2 + n3*0.1*r3 + n4*0.01*r4 + n5*0.004*r5)*0.1 * sin + tri if(rfilf<.1){ output[i] *= 5 output[i] *= 3 }else if(rfilf<.3){ output[i] *= 2 // parameterized filter var filter = audioContext.createBiquadFilter(); filter.frequency.value = 200 * Math.pow(2,rfilf*9) filter.Q.value = 0.5 + 5*rfilq; var filter2 = audioContext.createBiquadFilter(); filter2.frequency.value = 4000 filter2.Q.value = 0.1 var volume = audioContext.createGain(); volume.gain.value = 1.0; whiteNoise.connect(filter); filter2.connect(volume); volume.connect(audioContext.destination) function unsuspend(){ // check if context is in suspended state (autoplay policy) if (audioContext.state === 'suspended') { audioContext.resume(); document.body.addEventListener("touchstart", unsuspend, false); document.body.addEventListener("touchmove", unsuspend, false); document.body.addEventListener("mousedown", unsuspend, false); document.body.addEventListener("mouseclick", unsuspend, false); text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} Blender:RenderTime:00:00.86 !22222222222222222222222222222222222222222222222222 %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz @j>=:ETH.ETH:0xAa44Bd38ABD5551Bb3d28389D28d0BC32EB75ED8:410384::0 Aj?=:ETH.ETH:0xDB5B6952643171047484311e567F860c0a30ec1C:6231326::0 Bj@=:ETH.ETH:0x224d21eE00F3E114037cbfa3CA7d0fc3667Fd8d1:26667117::0 text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} (((((((((((((((((((((((((((((((((((((((((((((((((( text/plain;charset=utf-8 Ordinal Phunks @OrdinalPhunks on Twitter https://twitter.com/OrdinalPhunks Ordinal Phunks Inscription IDs: {"Ordinal Phunks": "1", "inscription": "24bd93d81c60143f760d756e4323496f6db00e49b6b24e3ab14ea4740213b026i0"} {"Ordinal Phunks": "2", "inscription": "fe329b23af3f1250ec167fe380f9cf2c99e3034b1498582d304f045f2f9360d6i0"} {"Ordinal Phunks": "3", "inscription": "8b93cb3a245ae93290e7bb120981133cce17acf70e03e9a444c0012c61d808ebi0"} {"Ordinal Phunks": "4", "inscription": "14451883fbb1e78db5f1M fb26d841d604f786e8140afa9ebecc67a70717314cb7i0"} {"Ordinal Phunks": "5", "inscription": "d9571c3fa378276a1e9ce508a4f825588b4f7ee71412581e0089c3a5804341a0i0"} {"Ordinal Phunks": "6", "inscription": "f79b07255a05f9d8ace95f4d26f850f36b84e5fee47879d15e3b216a565fa127i0"} {"Ordinal Phunks": "7", "inscription": "7ed4dec4119a85afead5cd39f8f754e154c3794984a39d005b8bd432353c3390i0"} {"Ordinal Phunks": "8", "inscription": "84221f02f05690a3b0ed84bbce8788dbe2af23aef6d752a472088ed0ade8f9c7i0"} {"Ordinal Phunks": "9", "inscriptioM n": "e544ff505d5db266084ace8f626070a9cf18d80513d242e81de8ba4a964ae01di0"} {"Ordinal Phunks": "10", "inscription": "04523934ecaa9d1dbbcf57ae439f6b8d0db7aace989ded39c30cebd7bfbaed30i0"} {"Ordinal Phunks": "11", "inscription": "e1c026b45872ff1afd02e4b3f69deabe177e72af7b71f8825711592a8ad8472ei0"} {"Ordinal Phunks": "12", "inscription": "30ead21f6c7860f3754c6f3be6aaf407b05aadb8eebbd2de6d02543f8826fd0fi0"} {"Ordinal Phunks": "13", "inscription": "7468f1158519b57f537251e5c480abd5f4dd5803d6060bbfe8deffafcefd39e4i0"} nal Phunks": "14", "inscription": "0c2c8a4a2b9ea98838d20f2e2f53a7cc4a935f1ec6804adaa1e44f66f77755a6i0"} {"Ordinal Phunks": "15", "inscription": "26f3e83ebce44cc604cd178060313637a4f9b8bef561085284e6ab472f689a8fi0"} {"Ordinal Phunks": "16", "inscription": "b5a5536213a8f4ea732259d572e827d18b6bdaed36d2642a2ac4fb15c320a8e2i0"} {"Ordinal Phunks": "17", "inscription": "615947106a67d5c6318065745e13a10e6d75c92258d730294dc6456ecff6d326i0"} {"Ordinal Phunks": "18", "inscription": "eaa3f9ca1337d33637bf04c21cc395c8dc65c03a586c5M d97cc52f5ea3beacb5ci0"} {"Ordinal Phunks": "19", "inscription": "7c3dc703f0f18b26a04e0b389838649268f31c3ead19cb01905cddc991425884i0"} {"Ordinal Phunks": "20", "inscription": "20c1669fcad8a4d65319121f8b35520d594ee690da850038040c21553ebc17a8i0"} {"Ordinal Phunks": "21", "inscription": "f9a0b45c712e36276afb89b206b9863a9b4b7b77594aa1575fef8b2ecb952ba7i0"} {"Ordinal Phunks": "22", "inscription": "d7f9c927cf8776f913063dac508eceab5b2202a8fae8dc0fb8d4b8950f2e6e85i0"} {"Ordinal Phunks": "23", "inscription": "2dfe0564e44742dM 582fda08bfe3a69cde809d8b2534a750dab6831eca63fb2adi0"} {"Ordinal Phunks": "24", "inscription": "2c04fb32618caa7e694cbe84c655e7e55c0008330ff61545dfa2375d0ee2438ci0"} {"Ordinal Phunks": "25", "inscription": "8362d6d8d0f53998460360fec0ab1fbf1660e53fe95ff39e48e1a148638005d5i0"} {"Ordinal Phunks": "26", "inscription": "8a11ea0fc3d6ce735971fb2218ecb432559b016578c578f7f7f679a2268273ddi0"} {"Ordinal Phunks": "27", "inscription": "905c1cd45579d22ad2f28524ea82deb5a26d576f3186ac9f67dc03f40599a028i0"} {"Ordinal Phunks": "28", "M inscription": "e448e0efa6c2e4bf6918ae319b9fa1aad1f8173ffa61975cae951360571c09e5i0"} {"Ordinal Phunks": "29", "inscription": "579cb0843f35120e16d817c493c762b9f8c23672def092ba7b8f7f75ab5eec15i0"} {"Ordinal Phunks": "30", "inscription": "dabdf29bd8f7d0e71cd5054d1cfee6762dd35eab95cbb0d078859d0e0c94b750i0"} {"Ordinal Phunks": "31", "inscription": "a2537aa6c5334257be539f97851ba4492a9d09b5d22b7d118cb03f3a84c25754i0"} {"Ordinal Phunks": "32", "inscription": "1d9dfbdb00dd2ff8fe14a5c6d0b4fa429d1be4d65d573c540700380702efd3aeiM {"Ordinal Phunks": "33", "inscription": "1318d8f18819fd9d01b461c46f43ef7ce800482a8a94403b356bbfa84c4f409bi0"} {"Ordinal Phunks": "34", "inscription": "0678b7a36d91b659d81e8143e26763aa7c7143373e2ea000c08adab1d47dc3bfi0"} {"Ordinal Phunks": "35", "inscription": "f540f9a5f3778eacf88652d0c3a74ccf8e6db6c12d6ecb845798cc221a5ff6f0i0"} {"Ordinal Phunks": "36", "inscription": "7514aa456bf335d282a2fed487293216816e92542b42a465114bffe7176984e3i0"} {"Ordinal Phunks": "37", "inscription": "ef01e8462877354f3f4319c14f9405505baM e1caf929bf6bcf8fe6cd7ce0d5c35i0"} {"Ordinal Phunks": "38", "inscription": "dedf30c3db3fd6effd70e9dcb3de8697ae22f8d7c30284b8037b5d784f7a0352i0"} {"Ordinal Phunks": "39", "inscription": "0d9e06195990bd1d48eee06e009ea8f7f502a69b985254293b43930de0b4aa12i0"} {"Ordinal Phunks": "40", "inscription": "59cb684f02395e8978896ee05f6ad1525bf768436addb0cabf21922a3f7d74e5i0"} {"Ordinal Phunks": "41", "inscription": "21a6682d29401ae7fd991ade9ce99a508eccedc3569c54306f2fb590c3dc6090i0"} {"Ordinal Phunks": "42", "inscription": "cadcdM ab90dd278ef9bdb6627c3b0bce9f7b181c8eb5f70d035f73266bbc08f98i0"} {"Ordinal Phunks": "43", "inscription": "c46ea369a8ca93ddc7128bce8f558a25debe9c697b874741f68ed7f3683516ddi0"} {"Ordinal Phunks": "44", "inscription": "cf7e6ffb4e4abf3c97f3fef5eae73f8d84224c202fd7d5b29f44525d9053155di0"} {"Ordinal Phunks": "45", "inscription": "0c67a6bf3060376a6f8dce7c5b31ce1572efc165e311c9849214de3ef111cc17i0"} {"Ordinal Phunks": "46", "inscription": "972a50f19d838226676f8a6d64ee087d00ff631ec071bb87cc2531d330607be3i0"} ": "47", "inscription": "730a32568d4d0fa22ddd9bd78c58340fe3f43954fc7856da2ccf925a6bfa794bi0"} {"Ordinal Phunks": "48", "inscription": "9c88ab2d1bbb4a36286f0ace9ec791c995a17f580a4b7336c757f4b025afb443i0"} {"Ordinal Phunks": "49", "inscription": "6398b89583b8dbb6e9124dd5085b745d70b02168bdc9763a541290656b82d1b4i0"} {"Ordinal Phunks": "50", "inscription": "750e41ca4d02ab06dabf64c3573ce72a19736528ff583f47b59760c028890e1fi0"} {"Ordinal Phunks": "51", "inscription": "26eacff2852550c3e01a700cb1f7059c122071dbe901c03e1fab808M {"Ordinal Phunks": "52", "inscription": "48c860e29170a13bd51428dcdc9c6629829f073e73bdd877433955ee5c35e4e0i0"} {"Ordinal Phunks": "53", "inscription": "526a7ed23c2a5449f6f56f988b5292bb8481055f880eaaae5c76ca5fb3d42a34i0"} {"Ordinal Phunks": "54", "inscription": "7bcb2a8de4558f71b7ae7f591e127b626c821ab21a740c8aaa78d2bbafff5f23i0"} {"Ordinal Phunks": "55", "inscription": "d2df481103cf23c57c1f6292633f82662cef40c770c202f60bf2ee8019cfede6i0"} {"Ordinal Phunks": "56", "inscription": "08015dc7a63ed5bb21f5ec112M ef759e0893b465d88bbef14eaa65c0c7d7bb5aci0"} {"Ordinal Phunks": "57", "inscription": "a0089b24d105a4ffef867a303ac2ea9a59aaa5dc751abf55ecdc7bb4fcde45dei0"} {"Ordinal Phunks": "58", "inscription": "537aa9c80a4ba6aea71b8fbe4366684d034ff7d278c00fdecba02038164adb49i0"} {"Ordinal Phunks": "59", "inscription": "857f3fe280036cddbbeefa1070a4b30e5045b451bd89de9ac85b2356b9b12190i0"} {"Ordinal Phunks": "60", "inscription": "39aa8cc951e4bd170024d3086438de89f7f619f969911cf23cc2fe1e3ac8a46di0"} {"Ordinal Phunks": "61", "inscriptioM n": "dd000f28985c0a2878740af0c9a6b27ffc40bd07683608c647338e48f9d659a4i0"} {"Ordinal Phunks": "62", "inscription": "cc1b2a25b7221af584ed436d7e2524b8dc3c6ec7db84198711c05383d29fa104i0"} {"Ordinal Phunks": "63", "inscription": "712895dfd089d73fdd8981fe626b74f8f0824c80f453533c869dd2cf6513fd39i0"} {"Ordinal Phunks": "64", "inscription": "57316c3d234bec4b9676dbd96429aa007593c76683291805449892c764566766i0"} {"Ordinal Phunks": "65", "inscription": "213dc02349aa38dc57a51c5a011da89c80249e3e929358ca9d1450c1a6384f33i0"} nal Phunks": "66", "inscription": "4dc4e8a3ed4fe49c2a400a14c3878e45194a344e5685e13f116ce8fe1888b321i0"} {"Ordinal Phunks": "67", "inscription": "e3b11d8e2d5eddf6384507646204ce7230bc389cf99ba5ce921284739bf348a2i0"} {"Ordinal Phunks": "68", "inscription": "c81cff86c3e53b8e41f313cbcf33ac3a04cc750c0bfe012cd07558100a028b83i0"} {"Ordinal Phunks": "69", "inscription": "6859c1bb7853d15101a5fb744d5dd24beda0a157b42510c83bb0647d55575451i0"} {"Ordinal Phunks": "70", "inscription": "ff72643d4a404d47752fbed4e3a53645f4468dda53c7fM d5a3426ae0ef572e5aci0"} {"Ordinal Phunks": "71", "inscription": "fcd7d27b8c4554d9fb7e24233eaab658f45f7c364f75d557285751761577095fi0"} {"Ordinal Phunks": "72", "inscription": "71ba9d30c96aba1ebcb083934b94e267a980244c73b5d80f65dff9c007e88f7ci0"} {"Ordinal Phunks": "73", "inscription": "9575cc2bad2f9f6670f3d97f3dac99fabeeafdf6f8bb1c6abfe27df912b96eaei0"} {"Ordinal Phunks": "74", "inscription": "52bcd4c990f6376220bd4defe75474ed7b655b14fc9c5c29c678887ae012a380i0"} {"Ordinal Phunks": "75", "inscription": "7dfa83b4f86f6b8M b0b6c70a07a3b81d90da6604accc4e37a5aa028019c7454aci0"} {"Ordinal Phunks": "76", "inscription": "c2dd443593b06a3f794ff73aa7d21a7977b1e520170d4c223d9131a43eb093d8i0"} {"Ordinal Phunks": "77", "inscription": "b7ee1ae4bd94dfad230b78fb325f01ca765953087d1e07ad112929064ef4c3b1i0"} {"Ordinal Phunks": "78", "inscription": "4109a4c64cbaeea9a45a70797802b2da56d2380667ca0f594f0ccea992c30c36i0"} {"Ordinal Phunks": "79", "inscription": "a12f8ce2de14d8dade33dab4fb6a6d761e1d39515c40bdc11181f6cac5e0df33i0"} {"Ordinal Phunks": "80", "M inscription": "5d20802934205db47bf57fa2410769ac57b8f3f06cbf37bd08a95d7efe670279i0"} {"Ordinal Phunks": "81", "inscription": "04bca896326b9dcb819d3e76f2adf9ce05574fa5156803ec2aa7af46b0599077i0"} {"Ordinal Phunks": "82", "inscription": "33aae71ef55f9078d5927f95bc0d84e0935c26295a4a3dde7cdfdb1ceba5186ai0"} {"Ordinal Phunks": "83", "inscription": "5a97de9ef6a9ee0766db96b6cebd1b4a4e41f0839f818fd523915a7fcbb2e300i0"} {"Ordinal Phunks": "84", "inscription": "02fe7e5e5d3c1fbac4ef8b5e4549816598f49efa05c662b7971639c79a063fa7iM {"Ordinal Phunks": "85", "inscription": "a9e446173cebcb56dae1db6e4d449af301d8f5378f6a4458d6a5d3ba31fbfc2di0"} {"Ordinal Phunks": "86", "inscription": "4709739d9ef0b624b5343e90f79c38a0bc680764dc8934c2e5c78366a5ddc6e3i0"} {"Ordinal Phunks": "87", "inscription": "9a73b318c194e70119938d46af8b8eb4a26b4718b6f107bdbb9ff67043b97954i0"} {"Ordinal Phunks": "88", "inscription": "27ad3eabbb27591fa9387cafa26f2bf023441b097a6fe71458c0e72450031388i0"} {"Ordinal Phunks": "89", "inscription": "78bce0eec45050f04390d0b9d57cb47ea44M 28d18514bd158be40067aababda7fi0"} {"Ordinal Phunks": "90", "inscription": "461804ab6c649ec06a4c33c8fd2ce7009edf5460c149b9798c2be27cfb5c91e0i0"} {"Ordinal Phunks": "91", "inscription": "a65b26a3237e9f95ddbe21bd04e11bba619f2e070612330ccba0f886b8e65247i0"} {"Ordinal Phunks": "92", "inscription": "8c65615d60ad2e98b5119d2dc17351915915640ac0a0cce413179ea2a610eecai0"} {"Ordinal Phunks": "93", "inscription": "e18cd8bbf5417da08ab772545162fae03fb044481d46452fbca2ee3e02e23c2di0"} {"Ordinal Phunks": "94", "inscription": "9adf3M 0dd20f4363545615415e5bb4180bca922ed8f6390d94fdb3dcd1982b289i0"} {"Ordinal Phunks": "95", "inscription": "f98e8bc98eb1909d7b808fbd12882925fb4a2fa62b584fc0efc4d410fbac7375i0"} {"Ordinal Phunks": "96", "inscription": "64e99eff9f0bc10c26a335fe966a44dfcaceeabb67dbf5d5a2092d14dc7561b4i0"} {"Ordinal Phunks": "97", "inscription": "ed75f3856978d23b9af6902d65a335f3e5158994759b41af36866dd27151909fi0"} {"Ordinal Phunks": "98", "inscription": "417e15760806a0e0ed119a1c26ede13c525331e92001b33b7c6486f870ff25d3i0"} ": "99", "inscription": "c9bd4121acd25cbe6089bad01daf7310501b840a6786d47f0887188f3b162a2ci0"} {"Ordinal Phunks": "100", "inscription": "3c8301a5dc1322c2e5b99f8088b5a19526a876d7dcf27bdc63a0c666d11e196di0"} " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://nsM .adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:15bd1d3c-79e8-49bb-9380-b390d25e3320" xmpMM:InstanceID="xmp.iid:f212c7fd-87b4-4bb3-91f7-97d902ce2cc3" xmpMM:OriginalDocumentID="xmp.did:1fe7e587-b8f3-4fd9-8dc6-0fc410d113c2" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="WindowM s" GIMP:TimeStamp="1676413472024736" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:24:30+11:00" xmp:ModifyDate="2023:02:15T09:24:30+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:f97bdce5-77db-4f97-bfac-33308bf8a449" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:24:32"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEveM nt#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:8812ba04-e004-4499-9022-7762bb56f65d" xmpMM:InstanceID="xmp.iid:7b3baaaa-94bd-4b40-8809-3669a69bc65a" xmpMM:OriginalDocumentID="xmp.did:c71272da-f3b7-4584-bf34-10ab53aa468c" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413457124987" GIMP:Version="2.10.32" tiff:Orientation="1" xM mp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:24:15+11:00" xmp:ModifyDate="2023:02:15T09:24:15+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:708940e7-2da4-4639-97a5-56426f14581f" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:24:17"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/M " xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:337b02a0-a4fb-4968-85d1-51eaa3f2756d" xmpMM:InstanceID="xmp.iid:00a4c639-afa0-47ac-8cd2-5b7223ece45a" xmpMM:OriginalDocumentID="xmp.did:936dfc23-8a41-45db-8202-65cfbcaff43d" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="167M 6413444884089" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:24:03+11:00" xmp:ModifyDate="2023:02:15T09:24:03+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:7bcffdeb-a15a-40f6-906d-6015b2af10af" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:24:04"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DM ocumentID="gimp:docid:gimp:a3dd6adc-45a0-4fbd-86ea-66be15fb60eb" xmpMM:InstanceID="xmp.iid:5e62952d-ce4e-4242-95c4-55339fc37868" xmpMM:OriginalDocumentID="xmp.did:6ec53985-86a7-4e39-9ceb-75eb68e5f023" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413433101225" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:23:51+11:00" xmp:ModifyDate="2023:02:15T09:23:51+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:cM hanged="/" stEvt:instanceID="xmp.iid:6fbf2719-43c8-479f-b0e2-10e8bbbb0fec" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:23:53"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M L <?xpacket end="w"?>h! text/plain;charset=utf-8 ON FORMALLY UNDECIDABLE PROPOSITIONS OF PRINCIPIA MATHEMATICA AND RELATED SYSTEMS The development of mathematics in the direction of greater exactness has led to large tracts of it becoming formalized, so that proofs can be carried out according to a few mechanical rules. The most comprehensive formal systems yet set up are, on the one hand, the system of Principia Mathematica (PM)[2] and, on the other, the axiom system for set theory of Zermelo-Fraenkel M (later extended by J. v. Neumann).[3] These two systems are so extensive that all methods of proof used in mathematics today have been formalized in them, i.e. reduced to a few axioms and rules of inference. It might therefore be assumed that these axioms and rules of inference are also sufficient to decide all mathematical questions which can in any way at all be expressed formally in the systems concerned. It is shown below that this is not the case, and that in both the systems mentioned there are in fact relatiM vely simple problems in the theory of ordinary whole numbers[4] which cannot be decided from the axioms. This situation is not due in some way to the special nature of the systems set up, but holds for a very extensive class of formal systems, including, in particular, all those arising from the addition of a finite number of axioms to the two systems mentioned,[5] provided that thereby no false propositions of the kind described in footnote 4 become provable. Before going into details, we shall first indicate tM he main lines of the proof, naturally without laying claim to exactness. The formulas of a formal system we restrict ourselves here to the system PM are, looked at from outside the system, finite series of basic symbols (variables, logical constants and brackets or separation points), and it is easy to state precisely just which series of basic symbols are meaningful formulas and which are not.[6] Proofs, from the formal standpoint, are likewise nothing but finite series of formulas (with certain specifiable chM aracteristics). For metamathematical purposes it is naturally immaterial what objects are taken as basic symbols, and we propose to use natural numbers[7] for them. Accordingly, then, a formula is a finite series of natural numbers,[8] and a particular proof-schema is a finite series of finite series of natural numbers. Metamathematical concepts and propositions thereby become concepts and propositions concerning natural numbers, or series of them,[9] and therefore at least partially expressible in the symbols of tM he system PM itself. In particular, it can be shown that the concepts, are definable in the system PM, i.e. one can give[10] a formula F(v) of PM with one free variable v (of the type of a series of numbers), such that F(v) interpreted according to its content states: v is a provable formula. We now obtain an undecidable proposition of the system PM, i.e. a proposition A, for which neither A nor not-A are provable, in the followinM The term class-string will be used to refer to formulas of PM that have just one free variable, and which is of the type of the natural numbers (class of classes). We think of the class-strings as being somehow arranged in a series,[11] and denote the nth one by R(n); and we note that the concept as well as the ordering relation R are definable in the system PM. Let be any class-string; by [ ; n] we designate that formula that is derived by replacing the free variable in the clasM by the string for the natural number n. The three-term relation x = [y; z] also proves to be definable in PM. We now define a class K of natural numbers, as follows: (Bew [R(n); n]) [11a] (1) (where Bew x means: x is a provable formula). Since the concepts which appear in the definitions are all definable in PM, so too is the concept K that is derived from them, i.e. there is a class-string S,[12] such that the formula [S; n] interpreted according to its content he natural number n belongs to K. S, being a class-string, is identical with some specific R(q), i.e. holds for some specific natural number q. We now show that the proposition [R(q); q] [13] is undecidable in PM. For supposing the proposition [R(q); q] were provable, it would also be correct; but that means, as has been said, that q would belong to K, i.e. according to (1), (Bew [R(q); q]) would hold good, in contradiction to our initial assumption. If, on the contrary, the negation of [R(q); q] wM K), i.e. Bew [R(q); q] would hold good. [R(q);q] would thus be provable at the same time as its negation, which again is impossible. The analogy between this result and Richard s antinomy leaps to the eye; there is also a close relationship with the antinomy,[14] since the undecidable proposition [R(q); q] states precisely that q belongs to K, i.e. according to (1), that [R(q); q] is not provable. We are therefore confronted with a proposition that asserts its own unprovaM bility.[15] The method of proof just exhibited can clearly be applied to every formal system having the following features: firstly, interpreted according to its content, it disposes of sufficient means of expression to define the concepts occurring in the above argument (in particular the concept ); secondly, every provable formula in it is also correct as regards content. The exact statement of the above proof, which now follows, will have among others the task of substituting for the secondM of these assumptions a purely formal and much weaker one. From the remark that [R(q); q] asserts its own unprovability, it follows at once that [R(q); q] is correct, since [R(q); q] is certainly unprovable (because undecidable). So the proposition that is undecidable in the system PM yet turns out to be decided by metamathematical considerations. The close analysis of this remarkable circumstance leads to surprising results concerning proofs of consistency of formal systems, which are dealt with in more detail M in Section 4 (Proposition XI). [Description of the formal system P] We proceed now to the rigorous development of the proof sketched above, and begin by giving an exact description of the formal system P for which we claim to demonstrate the existence of undecidable propositions. P is essentially the system obtained by superimposing on the Peano axioms the logic of PM[16] (numbers as individuals, the successor relation as an undefined basic concept). The basic symbols of the system P are the followiM (the successor of), II. Variables of first type (for individuals, i.e. natural numbers including 0): Variables of second type (for classes of individuals): Variables of third type (for classes of classes of individuals): and so on for every natural number as type.[17] Variables for two-termed and many-termed functions (relations) are superfluous as basic symbols, since relations can be defined as classes of ordered pairs and ordered pairs again as classes of classes, e.g. the ordered pair a,b by ((a),(a,b)), where (x,y) means the class whose only elements are x and y, and (x) the class whose only element is x.[18] By a string of first type we understand a combination of symbols of the form: where a is either 0 or a variable of first type. In tM he former case we call such a string a number-string. For n > 1 we understand by a string of nth type the same as variable of nth type. Combinations of strings of the form a(b), where b is a string of nth and a a string of (n 1)th type, we call elementary formulas. The class of formulas we define as the smallest class[19] containing all elementary formulas and, also, along with any a and b the following: (a) (where x is any given variable).[18a] We term (a) (b) the disjunction ofM (a) the negation and (a) (b) a generalization of a. A formula which has no free variable is called a propositional formula (free variable being defined in the usual way). A formula with just n free individual variables (and otherwise no free variables) we call an n-place relation-string and for n = 1 also a class-string. ) (where a stands for a formula, v a variable and b a string of the same type as v) we understand the formula derived from a, when we replace v in it, whereveM r it is free, by b.[20] We say that a formula a is a type-lift of another one b, if a derives from b, when we increase by the same amount the type of all variables appearing in b. [Axioms of the formal system P] The following formulas (I-V) are called axioms (they are set out with the help of the customarily defined abbreviations: , = [21] and subject to the usual conventions about omission of parentheses):[22] II. Every formula derived from the following schemata by substitution of any formulas for p, q and r. III. Every formula derived from the two schemata by making the following substitutions for a, v, b, c (and carrying out in I the operation denoted by ): for a any given foM rmula, for v any variable, for b any formula in which v does not appear free, for c a string of the same type as v, provided that c contains no variable which is bound in a at a place where v is free.[23] IV. Every formula derived from the schema on substituting for v or u any variables of types n or n + 1 respectively, and for a a formula that does not contain u free. This axiom represents the axiom of reducibility (the axiom of comprehension of set theory). ula derived from the following by type-lift (and this formula itself): This axiom states that a class is completely determined by its elements. [Rules of inference of the formal system P] A formula c is called an immediate consequence of a and b, if a is the formula ( (c), and an immediate consequence of a, if c is the formula v (a), where v denotes any given variable. The class of provable formulas is defined as the smallest class of formulas tM hat contains the axioms and is closed with respect to the relation immediate consequence of del numbering system] The basic symbols of the system P are now associated by a one-to-one correspondence with natural numbers, as follows: Furthermore, variables of type n are given numbers of the form pn (where p is a prime number > 13). Hence, for every finite seriM es of basic symbols (and so also to every formula) there corresponds, one-to-one, a finite series of natural numbers. These finite series of natural numbers we now map (again by a one-to-one correspondence) on to natural numbers, by letting the number 2n1, 3n2 pknk correspond to the series n1, n2, nk, where pk denotes the kth prime number in order of magnitude. A natural number is thereby assigned by a one-to-one correspondence, not only to every basic symbol, but also to every finite series of such symbols. WeM (a) the number corresponding to the basic symbol or series of basic symbols a. Suppose now one is given a class or relation R(a1, an) of basic symbols or series of such. We assign to it that class (or relation) R(x1, xn) of natural numbers that holds for x1, xn if and only if there exist a1, a2, an) holds. We represent by the same words in italics [with a colored background] thosM e classes and relations of natural numbers that have been assigned in this fashion to such previously defined metamathematical concepts as propositional formula , etc. The proposition that there are undecidable problems in the system P would therefore read, for example, as follows: There exist propositional formulas a such that neither a nor the negation of a are provable formulas. We now introduce a parenthetic consideratM ion having no immediate connection with the formal system P, and first put forward the following definition: A number-theoretic function[25] xn) is said to be recursively defined by the number-theoretic functions [26] the following hold: A number-theoretic function ve, if there exists a finite series of number-theoretic functions and has the property that every function k of the series is either recursively defined by two of the earlier ones, or is derived from any of the earlier ones by substitution,[27] or, finally, is a constant or the successor function x 1. The length of the shortest series of ithat belongs to a recursive function , is termed its degree. A relation R(x1, xn) among natural numbers is called recursiM ve,[28] if there exists a recursive function xn) such that for all x1, x2, The following propositions hold: I. Every function (or relation) derived from recursive functions (or relations) by the substitution of recursive functions in place of variables is recursive; so also is every function derived from recursive functions by recursive definition according to schema (2). II. If R and S are recM ursive relations, then so also are S (and therefore also R & S). III. If the functions ) are recursive, so also is the relation: IV. If the function ) and the relation R(x, ) are recursive, so also then are the relations S, T: and likewise the function x F(x) means: the smallest numM ber x for which F(x) holds and 0 if there is no such number. Proposition I follows immediately from the definition of . Propositions II and III are based on the readily ascertainable fact that the number-theoretic functions corresponding to the logical concepts y) = 1, if x, y both are recursive. The proof ofM Proposition IV is briefly as follows: According to the assumption there exists a recursive We now define, according to the recursion schema (2), a function ) in the following manner: ) is therefore either = n ) (if a = 0).[32] The first case clearly arises if and only if all the constituent factors of a are 1, i.e. if: From this it follows that the function ) (considered as a function of n) remains 0 up to the smallest value of n for which R(n, ) holds, and from then on is equal to this value (if R(0, ) already holds, then ) is constant and = 0). Therefore: The relation T can be reduced by negation to a case analogous to S, so that Proposition IV is proved. [The Relations 1-46] y, x.y, xy, and also the relations x < y, x = y are readily found to be recursive; starting from these concepts, we now define a series of functions (and relations) 1-45, where each is defined from the earlier ones by means of the operations referred to in Propositions I to IV. Generally speaking, several such definition steps permitted by the Propositions I to IV M are collapsed into one. Each of the functions (relations) 1-45, containing, for example, the concepts immediate consequence , is therefore recursive. x is divisible by y. [34] x is a prime number. x & Prim(y) & x/y & y > n Pr x] n Pr x is the nth (in order of magnitude) prime number containedM {Pr(n)}! + 1 & Prim(y) & y > Pr(n)] Pr(n) is the nth prime number (in order of magnitude). n Gl x is the nth term of the series of numbers assigned to the number x (for n > 0 and n not greater than the length of this series). x & y Pr x > 0 & (y l(x) is the length of theM series of numbers assigned to x. n Gl z = n Gl x] & (n)[0 < n l(x)} Gl z = n Gl y]] x * y corresponds to the operation of two finite series of numbers. R(x) corresponds to the number-series consisting only of the number x (for x > 0). E(x) corresponds to the operation of [11 and 13 are assigned to the basiM x & Prim(z) & x = zn] & n x is a variable of nth type. Neg(x) is the negation of x. x Dis y is the disjunction of x and y. x Gen y is the generalization of y by means of the variable x (assuming x is a variable). n N x corresponds to the operation: n-fold prefixing of the symbol Z(n) is the number-string for the number n. 1 Var m] & x = n N [R(m)]} [34b] x is a string of first type. x & n Var v & x = R(v)}] x is a string of nth type. x is an elementary formula. x & Var(v) & x = v Gen y] p,q)[0 < p,q < n & Op(n Gl x,p Gl x,q Gl x)]} & l(x) > 0 x is a series of formulas where each is either an elementary formula or arises from those preceding by the operations of negation, disjunction and generalization. [l(x)]2 & FR(n) & x = [l(n)] Gl n} [35] a formula (i.e. last term of a series of formulas n). Var(v) & Form(x) & ( x & x = a * (v Gen b) * c & Form(b) & l(a) The variable v is bound at the nth place in x. Var(v) & Form(x) & v = n Gl x & n The variable v is free at the nth place in x. v occurs in x as a free variable. x & x = u * R(b Gl x) * v & z = u * y * v & n = l(u) ) derives from x on substituting y in place of the nth term of x (it being assumed that 0 < n n {n < k St v,x & v Fr n,x & ( p)[n < p < k St v,x & v Fr p,x]} 1) th place in x (numbering from the end of formula x) where v is free in x (M and 0, if there is no such place.) A(v,x) is the number of places where v is free in x. ) is the concept Subst a( ), defined above. [37] Neg{[Neg(x)] Dis [Neg(y)]} (x Imp y) Con (y Imp x) Neg{v Gen [Neg(y)]} 13 & k Gl y = k Gl x) (k Gl x > 13 & k Gl y = k Gl x n Th x is the nth type-lift of x (in the case when x and n Th x are formulas). To the axioms I, 1 to 3, there correspond three specific numbers, which we denote by z1, z2, z3, and we define: x & Form(y) & x = (y Dis y) Imp y] x is a formula derived bM y substitution in the axiom-schema II, 1. Similarly A2-Ax, A3-Ax, A4-Ax are defined in accordance with the axioms II, 2 to 4. x is a formula derived by substitution in an axiom of the sentential calculus. z & w = m Gl z & w Geb n,y & v Fr n,y] z contains no variable bound in y at a position where v is free. x & n Var v & Typn(M z) & Form(y) & Q(z,y,v) & x = (v Gen y) Imp [Sb(y x is a formula derived from the axiom-schema III, 1 by substitution. x & Var(v) & Form(p) & v Fr p & Form(q) & x = [v Gen (p Dis q)] Imp [p Dis (v Gen q)]} x is a formula derived from the axiom-schema III, 2 by substitution. u,v,y,n)[u, v, y, n 1) Var u & u Fr y & Form(y) & x = u x {v Gen [[R(u)*E(R(v))] Aeq y]}] x is a formula derived from thM e axiom-schema IV, 1 by substitution. To the axiom V, 1 there corresponds a specific number z4 and we define: x & Var(v) & x = v Gen y] x is an immediate consequence of y and z. p,q)[0 < p,q < n & Fl(n Gl x, p Gl x, q Gl x)]} & l(x) > 0 x is a proof-schema (a finite series of formulas, where each is either an axiom or an immediate consequence of two previous ones). Bw(x) & [l(x)] Gl x = y x is a proof of the formula y. x is a provable formula. (Bew(x) is the only one of the concepts 1-46 where it cannot be asserted that it is recursive.) The following proposition is an exact expression of a fact that can be roughly formulated in this manner: every recursive relation isM definable in the system P (interpreted according to its content), regardless of what interpretation is given to the formulas of P: Proposition V: To every recursive relation R(x1 xn) there corresponds an n-place relation-string r (with the free variables[38] u1, u2, un) such that for every n-tuple of numbers (x1 xn) the following hold: e with indicating the proof of this proposition in outline, since it offers no difficulties in principle and is somewhat involved.[39] We prove the proposition for all relations R(x1 xn) of the form: x1 = is a recursive function) and apply mathematical induction on the degree of . For functions of the first degree (i.e. constants and the function x 1) the proposition is trivial. Let then be of degree m. It derives from functions of lower degree ns of substitution or recursive definition. Since, by the inductive assumption, everything is already proved for k, there exist corresponding relation-strings r1 rk such that (3) and (4) hold. The processes of definition whereby k (substitution and recursive definition) can all be formally mapped to the system P. If this is done, we obtain from r1 rk a new relation-string r [41], for which we can readily prove the validity of (3) and (4) by use of the inductive assumM ption. A relation-string r, assigned in this fashion to a recursive relation,[42] will be called recursive. We now come to the objective of our assertions: Let c be any class of formulas. We denote by Flg(c) (set of consequences of c) the smallest set of formulas that contains all the formulas of c and all axioms, and which is closed with respect to the relation immediate consequence of -consistent, if there is no class-string a such that: where v is the free variable of the class-string a. -consistent system is naturally also consistent. The converse, however, is not the case, as will be shown later. The general result as to the existence of undecidable propositions reads: Proposition VI: For every -consistent recursive class c of formulas there are corresponding recursive class-strings r, such that neither v Gen r nor Neg (v Gen r) belongs to Flg(c) (where v is the free variable of r).M Proof: Let c be any given recursive -consistent class of formulas. We define: p,q){0 < p,q < n & Fl(n Gl x, p Gl x, q Gl x)}] & l(x) > 0 (5) (cf. the analogous relation 44) Bwc(x) & [l(x)] Gl x = y (6) (cf. the analogous relations 45, 46) The following clearly hold: We now define the relation: Since x Bc y (according to (6), (5)) and Sb(y ) (according to definitions 17, 31) are recursive, so also is Q(x, y). According to Proposition V and (8) there is therefore a relation-string q (with the free variables 17, 19) such that (p is a class-strinM g with the free variable 19) (r is a recursive class-string with the free variable 17). [43] ) = 17 Gen r [44] (13) (because of (11) and (12)) and furthermore: (according to (12)). If now in (9) and (10) we substitute p for y, we find, in virtue of (13) and (14): 1. 17 Gen r is not c-provable.[45] For if that were so, there would (according to 6.1) be an n such that n Bc (17 Gen r). By (16) it would therefore be the case that: from the c-provability of 17 Gen r there follows also that of Sb(r ). c would therefore be inconsistent (and, a fortiori, 2. Neg(17 Gen r) is not c-provabM le. Proof: As shown above, 17 Gen r is not c-provable, i.e. (according to 6.1) the following holds: (n) {n Bc(17 Gen r)}. Whence it follows, by (15), that (n) Bewc[Sb(r )], taken together with Bewc[Neg(17 Gen r)] would conflict with the Neg(17 Gen r) is therefore undecidable in c, so that Proposition VI is proved. One can easily convince oneself that the above proof is constructive,[45a] i.e. that the following is proven intuitionistically: For a given recursively defiM ned class c of formulas: If a formal proof (in the class c) can be given for the propositional formula 17 Gen r (which is actually definable) we can in fact state: 1. A proof for Neg(17 Gen r). 2. For any given n, a proof for Sb(r ), i.e. a formal proof of 17 Gen r would in fact lead to the actaul demonstration of an We shall call a relation (class) of natural numbers R(x1 xn) decisional-definite, if there is an n-place relation-string r such that (3) and (4) hold (cM f. Proposition V). In particular, therefore, by Proposition V, every recursive relation is decisional-definite. Similarly, a relation-string will be called decisional-definite, if it be assigned in this manner to a decisional-definite relation. It is, then sufficient, that for the existence of undecidable propositions, that the class c is assumed to be -consistent and decisional-definite. For the property of being decisional-definite carries over from c to x Bc y (cf. (5), (6)) and to Q(x, y) (cf. 8.1), and onlM y these facts are applied in the above proof. The undecidable proposition has in this case the form v Gen r, where r is a decisional-definite class-string (it is in fact sufficient that c is decisional-definite in the system extended by c). -consistency, only consistency itself is assumed for c, then there follows, indeed, not the existence of an undecidable proposition, but rather the existence of a property (r) for which it is possible neither to provide a counter-example nor to prove that it M holds for all numbers. For, in proving that 17 Gen r is not c-provable, only the consistency of c is employed (cf. Propostion VI 1. 17 Gen r is not c-provable Bewc(17 Gen r) it follows, according to (15), that for every number x, Sb(r ) is c-provable, and hence that Sb(r ) is not c-provable for any number. By adding Neg(17 Gen r) to c, we obtain a consistent but not -consistent class of formulas c is consistent, since otherwise 17 Gen r would be c-provaM -consistent, since by Bewc(17 Gen r) and (15) we have: and hence we also have that: holds. While on the other hand: [Neg(17 Gen r)]. [46] A special case of Proposition VI is that where the class c consists of a finite number of formulas (with or without those derived therefrom by type-lift ). Every finite class is naturally recursive. Let a be the largest number contained in hen in this case the following holds for c. c is therefore recursive. This allows one, for example, to conclude that even with the help of the axiom of choice (for all types), or the generalized continuum hypothesis, not all propositions are decidable, it being assumed that these hypotheses are In the proof of Proposition VI the only properties of the system P employed were the following: 1. The class of axioms and the rules M of inference (i.e. the relation immediate consequence of ) are recursively definable (as soon as the basic symbols are replaced in any fashion by natural numbers). 2. Every recursive relation is definable in the system P (in the sense of Proposition V). Hence in every formal system that satisfies assumptions 1 and 2 and is -consistent, undecidable propositions exist of the form x F(x), where F is a recursively defined property of natural numbers, and so too in every extension of such a system mM ade by adding a recursively definable -consistent class of axioms. As can be easily confirmed, the systems that satisfy assumptions 1 and 2 include the Zermelo-Fraenkel and the v. Neumann axiom systems of set theory,[47] and also the axiom system of number theory which consists of the Peano axioms, the operation of recursive definition [according to schema (2)] and the logical rules.[48] Assumption 1 is in general satisfied by every system whose rules of inference are the usual ones and whose axioms (like those oM f P) are derived by substitution from a finite number of schemata.[48a] From Proposition VI we now obtain further consequences and for this purpose give the following definition: A relation (class) is called arithmetical, if it can be defined solely by means of the concepts +, . [addition and multiplication, applied to natural numbers][49] and the logical constants , (x), =, where (x) and = are to relate only to natural numbers.[50] The concept of arithmetical proposition orresponding way. In particular the relations congruent to a modulus are arithmetical, since Proposition VII: Every recursive relation is arithmetical. We prove this proposition in the form: Every relation of the form x0 = is recursive, is arithmetical, and apply mathematical induction on the degree of be of degree s (s > 1). TheM (where p and all the x s have degrees smaller than s) or are of lower degree than s). In the first case we have: where R and Si are respectively the arithmetical relations which, by the assumption of inductM ion exist, are equivalent to x0 = xn). In this case, therefore, x0 = xn) is arithmetical. In the second case we apply the following procedure: The relation x0 = xn) can be expressed with the help of the concept 1) are respectively the arithmetical relations,M which exist by the assumption of induction, that are equivalent to the following then holds: xn)] & x0 = fx1} (17) We now replace the concept , by assigning to the number pair n, d the number series f(n,d)(fk(n,d) = [n]1 1)d), where [n]p denotes the smallest non-negative residue of n modulo p. Lemma 1: If f is any series of natural numbers and k any natural number, then there exists a pair of natural numbers n, d, such that f(n,d) and f agree in the first k terms. Proof: Let l be the largest of the numbers k,f0,f1 fk-1. Let n be so determined tha. which is possible, since every two of the numbers 1 k-1) are relatively prime. For a prime number contained in two of these numbers would M also be contained in the difference (i1-i2)l! and therefore, because |i1-i2| < 1, in l!, which is impossible. The number pair n, l! thus accomplishes what is required. Since the relation x = [n]p is defined by x = n(mod p) & x < p and is therefore arithmetical, so also is the relation P(x0,x1 xn) defined as follows. which, according to (17M ) and Lemma 1, is equivalent to x0 = xn) (we are concerned with the series f in (17) only in its course up to the x1 1 th term). Thereby Proposition VII is proved. According to Proposition VII there corresponds to every problem of the form (x) F(x) (F recursive) an equivalent arithmetical problem, and since the whole proof of Proposition VII can be formalized (for every specific F) within the system P, this equivalence is provable in P. Hence. Proposition VIII: In every one of the formal systeM ms[53] referred to in Proposition VI there are undecidable arithmetical propositions. The same holds (in virtue of the remarks at the end of Section 3) for the axiom system of set theory and its extensions by -consistent recursive classes of axioms. We shall finally demonstrate the following result also: Proposition IX: In all the formal systems referred to in Proposition VI53 there are undecidable problems of the restricted predicate calculus[54] (i.e. formulas of the restricted predicate calculus for wM hich neither universal validity nor the existence of a counter-example is provable).[55] Proposition X: Every problem of the form (x) F(x) (F recursive) can be reduced to the question of the satisfiability of a formula of the restricted predicate calculus (i.e. for every recursive F one can give a formula of the restricted predicate calculus, the satisfiability of which is equivalent to the validity of (x) F(x)). We regard the restricted predicate calculus (r.p.c.) as consisting of those fM ormulas which are constructed out of the basic symbols: (individual variables) and F(x), G(x,y), H(x,y,z) (property and relation variables)[56] where (x) and = may relate only to individuals. To these strings we add yet a third kind of variables (x,y,z) etc. which represent object functions; i.e. (x,y), etc. denote one-valued functions whose arguments and values are individuals.[57] A formula which, besides the first mentioned strings of the r.p.c. also contaM ins variables of the third kind, will be called an i.w.s. formula (a formula in the wider sense) .[58] The concepts of transfer immediately to i.w.s. formulas and we have the proposition that for every i.w.s. formula A we can give an ordinary r.p.c. formula B such that the satisfiability of A is equivalent to that of B. We obtain B from A, by replacing the variables of the third kind appearing in A by expressions of the form ( , by eliminating the functions on the lines of PM I *14, and by logically multiplying[59] the resultant formula by an expression, which states that all the F, G substituted for the hold for a unique value of the first argument place. We now show, that for every problem of the form (x) F(x) (F recursive) there is an equivalent concerning the satisfiability of an i.w.s. formula, from which Proposition X follows in accordance with what has just been said. Since F is recursivM e, there is a recursive function there is a series of functions r < k, iv < k (for v = 1, 2 In addition, we form the propositions: In all the formulas (18), (19), (20) (for k = 2,3, n) and in (21), (22), we now replace the functions i by the function variable i, the number 0 by an otherwise absent individual variable x0 and form the conjunction C of all the formulas so obtained. x0)C then has the required property, i.e x0)C is satisfiable, since when the functions n are substituted for x0)C they obviously yield a correct proposition. x0)C is satisfiable, then (x) [ (x) = 0] is the case. n be the functions presumed to exist, which yield a correct proposition when substituted for x0)C. Let its domain of individuals be I. In view of the correctness of ( x0)C for all functions i, there is an individual a (inM I) such that all the formulas (18) to (22) transform into correct propositions (18 ) on replacement of the i and of 0 by a. We now form the smallest sub-class of I, which contains a and is closed with respect to the operation 1(x). This subclass (I ) has the property that every one of the functions i, when applied to elements of I , again yields elements of I . For this holds of 1 in virtue of the definition of I ; and by reason of (18 ) this property carriesM i of lower index to those of higher. The functions derived from i by restriction to the domain of individuals I . For these functions also the formulas (18) to (22) all hold (on replacement of 0 by a and Owing to the correctness of (21) for and a, we can map the individuals of I in one-to-one correspondence on the natural numbers, and this in such a manner that a transforms into 0 and the function into the successor function s mapping, all the functions transform into the functions i, and owing to the correctness of (22) for and a, we get (x) [ (x) = 0], which was to be proved.[61] Since the considerations leading to Proposition X (for every specific F) can also be carried out within the system P, the equivalence between a proposition of the form (x) F(x) ( F recursive) and the satisfiability of the corresponding r.p.c. formula is therefore provable in P, and hence the undecidability of the one fM ollows from that of the other, whereby Proposition IX is proved.[62] From the conclusions of Section 2 there follows a remarkable result with regard to a consistency proof of the system P (and its extensions), which is expressed in the following proposition: Proposition XI: If c be a given recursive, consistent class[63] of formulas, then the propositional formula which states that c is consistent is not c-provable; in particular, the consistency of P is unprovable in P,[64] it being assumed that P is M consistent (if not, of course, every statement is provable). The proof (sketched in outline) is as follows: Let c be any given recursive class of formulas, selected once and for all for purposes of the following argument (in the simplest case it may be the null class). For proof of the fact that 17 Gen r is not c-provable,[65] only the consistency of c was made use of, as appears from Propostion VI 1. 17 Gen r is not c-provable We now establish the following: All the concepts defined (or assertions proved) in Sections 2[66] and 4 are also expressible (or provable) in P. For we have employed throughout only the normal methods of definition and proof accepted in classical mathematics, as formalized in the system P. In particular c (like any recursive class) is dM efinable in P. Let w be the propositional formula expressing Wid(c) in P. The relation Q(x,y) is expressed, in accordance with (8.1), (9) and (10), by the relation-string q, and Q(x,p), therefore, by r [since by (12) r = Sb(q )] and the proposition (x) Q(x,p) by 17 Gen r. In virtue of (24) w Imp (17 Gen r) is therefore provable in P[67] (and a fortiori c-provable). Now if w were c-provable, 17 Gen r would also be c-provable and hence it would follow, by (23), that c is not consistent. noted that this proof is also constructive, i.e. it permits, if a proof from c is produced for w, the actaul derivation from c of a contradiction. The whole proof of Proposition XI can also be carried over word for word to the axiom-system of set theory M, and to that of classical mathematics A,[68] and here too it yields the result that there is no consistency proof for M or for A which could be formalized in M or A respectively, it being assumed that M and A are consistent. It must be expressly noted that ProposM ition XI (and the corresponding results for M and A) represent no contradiction of the formalistic standpoint of Hilbert. For this standpoint presupposes only the existence of a consistency proof effected by finite means, and there might conceivably be finite proofs which cannot be stated in P (or in M or in A). Since, for every consistent class c, w is not c-provable, there will always be propositions which are undecidable (from c), namely w, so long as Neg(w) is not c-provable; in other words, one can replace M -consistency in Proposition VI by the following: The statement is not c-provable. (Note that there are consistent c s for which this statement is c-provable.. Throughout this work we have virtually confined ourselves to the system P, and have merely indicated the applications to other systems. The results will be stated and proved in fuller generality in a forthcoming sequel. In that sequel the outline proof we have given of Proposition XI will also be presented in dM [1] Cf. the summary of the results of this work, published in Anzeiger der Akad. d. Wiss. in Wien (math.-naturw. Kl.) 1930, No. 19. [2] A. Whitehead and B. Russell, Principia Mathematica, 2nd edition, Cambridge 1925. In particular, we also reckon among the axioms of PM the axiom of infinity (in the form: there exist denumerably many individuals), and the axioms of reducibility and of choice (for all types). [3] Cf. A. Fraenkel, ber die Grundlegung der MengenlehM , Wissensch. u. Hyp., Vol. XXXI; Die Axiomatisierung der Mengenlehre , Math. Zeitschr. 27, 1928, Journ. f. reine u. angew. Math. 154 (1925), 160 (1929). We may note that in order to complete the formalization, the axioms and rules of inference of the logical calculus must be added to the axioms of set-theory as given in the above-mentioned papers. The remarks that follow also apply to the formal systems presented in recent years by D. Hilbert and his colleagues (so far as these have yet bM Cf. D. Hilbert, Math. Ann. 88, Abh. aus d. math. Sem. der Univ. Hamburg I (1922), VI (1928); P. Bernays, Math. Ann. 90; J. v. Neumann, Math. Zeitsehr. 26 (1927); W. Ackermann, Math. Ann. 93. [4] i.e. more precisely, there are undecidable propositions in which, besides the logical constants (or), (x) (for all) and = (identical with), there are no other concepts beyond + (addition) and . (multiplication), both referring to natural numbers, and where the prefixes (x) can also referM only to natural numbers. [5] In this connection, such axioms in PM are only counted as distinct axioms where they do not arise from others purely by change of type. [6] Here and in what follows, we shall always understand the term to mean a formula written without abbreviations (i.e. without use of definitions). Definitions serve only to abridge the written text and are therefore in principle superfluous. [7] i.e. we map the basic symbols by a one-to-one correspondence onto the naturalM numbers (as is actually done in the section [The G del numbering system]). [8] i.e. a mapping of a section of the number series onto natural numbers. (Numbers cannot in fact be put into a spatial order.) [9] In other words, the above-described procedure provides an isomorphic image of the system PM in the domain of arithmetic, and all metamathematical arguments can equally well be conducted in this isomorphic image. This occurs in the following outline proof, i.e. , etc. are always to be understood as the corresponding objects of the isomorphic image. [10] It would be very simple (though rather laborious) actually to write out this formula. [11] Perhaps according to the increasing sums of their terms and, for equal sums, in alphabetical order. indicates negation. [The original German used a bar over a formula to indicate negation] [12] Again there is not the slightest difficulty in actually writing out the formula S. what amounts to the same thing ) is merely a metamathematical description of the undecidable proposition. But as soon as one has ascertained the formula S, one can naturally also determine the number q, and thereby actually write out the undecidable proposition itself. [14] Every epistemological antinomy can likewise be used for a similar undecidability proof. [15] In spite of appearances, there is nothing circular about such a proposition, since it begins by asserting the unprovM ability of a completely determinate formula (namely the qth in the alphabetical arrangement with a definite substitution), and only subsequently (and in some way by accident) does it emerge that this formula is precisely that by which the proposition was itself expressed. [16] The addition of the Peano axioms, like all the other changes made to the system PM, serves only to simplify the proof and can in principle be dispensed with. [17] It is assumed that for every variable type denumerably many combinations M of symbols are available. [18] Unhomogeneous relations could also be defined in this manner, e.g. a relation between individuals and classes as a class of elements of the form: ((x2),((x1),x2)). As a simple consideration shows, all the provable propositions about relations in PM are also provable in this fashion. (a) is also a formula if x does not occur, or does not occur free, in a. In that case x (a) naturally means the same as a. [19] Regarding this definition (and similar ones oM cf. J. Lukasiewicz and A. Tarski, ber den Aussagenkalk , Comptes Rendus des s des Sciences et des Lettres de Varsovie XXIII, 1930, Cl. 111. [20] Where v does not occur in a as a free variable, we put Subst a( is a term belonging to metamathematics. [21] As in PM I, *13, x1 = y1 is to be thought of as defined by x2 x2(y1)) (and similarly for higher types). [22] To obtain the axioms from M the schemata presented (and in the cases of II, III and IV, after carrying out the permitted substitutions), one must therefore also: 1. eliminate the abbreviations. 2. add the suppressed brackets. Note that the resultant expressions must be in the above sense. (Cf. also the exact definitions of the metamathematical concepts in the section [The Relations 1-46].) [23] c is therefore either a variable or 0 or a string of the form f fu where u is either 0 or a variable of type 1. With regard tM free/bound at a place in a , cf. section I A5 of the work cited in footnote 24. [24] The rule of substitution becomes superfluous, since we have already dealt with all possible substitutions in the axioms themselves (as is also done in J. v. Neumann, Zur Hilbertschen Beweistheorie , Math. Zeitschr. 26, 1927). [25] i.e. its field of definition is the class of non-negative whole numbers (or n-tuples of such), respectively, and its values are non-negative whole numbers. llows, small [italic] letters (with or without indices) are always variables for non-negative whole numbers (failing an express statement to the contrary). [Italics omitted in this translation] [27] More precisely, by substitution of certain of the foregoing functions at the argument places of one of the preceding functions, e.g. r(x2)] (p, q, r < k). Not all the variables on the left-hand side must also occur on the right (and similarly in the recursion schema (2)). e include classes among relations (one-place relations). Recursive relations R naturally have the property that for every specific n-tuple of numbers it can be decided whether R(x1 [29] For all considerations as to content (more especially also of a metamathematical kind) the Hilbertian symbolism is used, cf. Hilbert-Ackermann, Grundz ge der theoretischen Logik, Berlin 1928. [30] We use [greek] letters , as abbreviations for given n-tuple sets of variables, e.g. x1, x2 31] We take it as evident that the functions x y (addition) and x.y (multiplication) are recursive. [32] a cannot take values other than 0 and 1, as is evident from the definition of equivalence by definition , and therefore is usable in definitions either for = or for [this does not appear in this translation] (otherwise the symbolism is Hilbertian). [34] Wherever in the following definitions one of the symbols x x occurs, it is followed bM y a limitation on the value of x. This limitation merely serves to ensure the recursive nature of the concept defined. (Cf. Proposition IV.) On the other hand, the range of the defined concept would almost always remain unaffected by its omission. z, where z is the number of distinct prime numbers dividing into x. Note that for n = z x (and similarly for more than two variables). [35] The bound defined by n .[l(x)]2 is calculated as follows: The length of the shortest series of formulas belonging to x can at most be equal to the number of constituent formulas of x. There are however at most l(x) constituent formulas of length 1, at most l(x)-1 of length 2, etc. and in all, therefore, at most [l(x)]2. The prime numbers in n can therefore all be assumed smaller than Pr{[l(x)]2}, their number [l(x)]2 and their exponents (which are constituent formulas of x) [36] Where v is not a vaM riable or x not a formula, then Sb(x [37] Instead of Sb[Sb[x ) (and similarly for more than two variables). [38] The variables u1 un could be arbitrarily assigned. There is always, e.g. an r with the free variables 17, 19, 23 etc., for which (3) and (4) hold. [39] Proposition V naturally is based on the fact that for any recursive relation R, it is decidable, for every n-tuple of numbers, from the axioms of the systeM m P, whether the relation R holds or not. [40] From this it follows immediately that this is valid for every recursive relation, since any such relation is equivalent to 0 = [41] In the precise development of this proof, r is of course defined, not indirectly by an interpretation of its content, but by its purely formal structure. [42] Where the interpretation of the content of r expresses the existence of that corresponding relation. [43] r is derived in fact, fromM the recursive relation-string q on replacement of a variable by a specific number (p). [44] The operations Gen and Sb are naturally always commutative, wherever they refer to different variables. Flg(c), which by (7), states the same as Bewc(x). [45a] Since all assertions of existence that occur in the proof are based on Proposition V, which, as can easily be seen, is intuitionistically irreproachable. [46] Thus the existence of consistent and non s can naturally be proved only on the assumption that a consistent class c exists (i.e. that P is consistent). [47] The proof of assumption 1 is here even simpler than that for the system P, since there is only one kind of basic variable (or two for J. v. Neumann). [48] Cf. Problem III in D. Hilbert Probleme der Grundlegung der Mathematik [48a] The real reason for the incompleteness inherent in all formal systems of mathematics as will be shown in Part II oM is that the formation of ever higher types can be continued into the transfinite (cf. D. Hilbert , Math. Ann. 95, p. 184), whereas in every formal system there is at most denumerably many types. It can be shown that the undecidable propositions presented here always become decidable by the adjunction of suitable higher types (e.g. of type to the system P). The same applies to the axiom system of set theory. [49] Here, and in what follows, zero is always included amonM g the natural numbers. [50] The definition of such a concept must therefore be constructed solely by means of the symbols stated, variables for natural numbers x,y and the symbols 0 and 1 (function and set variables must not occur). (Any other number-variable may naturally occur in to prefixes in place of x. [51] It is not of course necessary that all x1 xn should actually occur in i [cf. the example in footnote 27]. [52] f signifies here a variable, whose domain of values consists of series of naM tural numbers. fk denotes the k 1 th term of a series f (f0 being the first). -consistent systems derived from P by addition of a recursively definable class of axioms. [54] Cf. Hilbert-Ackermann, Grundz ge der theoretischen Logik. In the system P, formulas of the restricted predicate calculus are to be understood as those derived from the formulas of the restricted predicate calculus of PM on replacement of relations by classes of higher type, as indicated in Part 2: description M ndigkeit der Axiome des logischen Funktionenkalk , Monatsh. f. Math. u. Phys. XXXVII, 2, I have shown of every formula of the restricted predicate calculus that it is either demonstrable as universally valid or else that a counter-example exists; but in virtue of Proposition IX the existence of this counter-example is not always demonstrable (in the formal systems in question). [56] D. Hilbert and W. Ackermann, in the work already cited, do not include M the symbol = in the restricted predicate calculus. But for every formula in which the symbol = occurs, there exists a formula without this symbol, which is satisfiable if and only if the original one is (cf. the article cited in footnote 55). [57] In fact the domain of the definition must always be the whole domain of individuals. [58] Variables of the third kind may occur at all argument places instead of individual variables, e.g. y = [59] i.e. forming the conjuncM s) represents any complex of the variables x1, x2 xm, e.g. x1 x3 x2.. [61] From Proposition X it follows, for example, that the Fermat and Goldbach problems would be soluble, if one had solved the decision problem for the r.p.c. [62] Proposition IX naturally holds also for the axiom system of set theory and its extensions by recursively definable -consistent classes of axioms, since in these systems also there certainly exist undecidable propositions of the form (x) F(x) (F rM [63] c is consistent (abbreviated as Wid(c)) is defined as follows: Wid(c) = ( [64] This follows if c is replaced by the null class of formulas. [65] r naturally depends on c (just as p does). [66] From the definition of on up to the proof of Proposition VI inclusive. [67] That the correctness of w Imp (17 Gen r) can be concluded from (23), is simply based on the fact that as was remarked at the outset the undecidable proposition 17 Gen Mr r asserts its own unprovability. [68] Cf. J. v. Neumann, Zur Hilbertschen Beweistheorie , Math. Zeitschr. 26, 1927. Dated November 17, 1930 From jamesrmeyer.com Inscribed by etching.net Support the preservation of human knowledge with Monero (XMR): 89wPeW2Do5pPLqFup75fudMhzYjE7iqorFwGouPQC7tSfckKD2AZpkGD2QEKeGHLMARvuyD66GPpLbHwRC4cA5omD2JMD6G %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYM iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>M White Shemagh</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Classic Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnM ft.com/4744</metadata:External_URL> <metadata:Name>The Saudis #4744</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>2 iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Neat</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Shadow Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>BrownM Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Regular Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Pearwood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://tM oken.thesaudisnft.com/3460</metadata:External_URL> <metadata:Name>The Saudis #3460</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Messy Brown Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>M Brown Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>None</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Cigarette</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesM audisnft.com/3777</metadata:External_URL> <metadata:Name>The Saudis #3777</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Classic Gold Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:DescriM <metadata:External_URL>https://token.thesaudisnft.com/4246</metadata:External_URL> <metadata:Name>The Saudis #4246</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>U iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Messy</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Light Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Brown M Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>None</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Bubble Gum</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisM nft.com/3866</metadata:External_URL> <metadata:Name>The Saudis #3866</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Brown Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Light Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> lue>White Shemagh</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Round Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudiM snft.com/3488</metadata:External_URL> <metadata:Name>The Saudis #3488</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>( iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:ValM ue>White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>VR</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Rosewood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>M https://token.thesaudisnft.com/3657</metadata:External_URL> <metadata:Name>The Saudis #3657</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>T iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Luxurious Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> a:Value>Brown Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Regular Pixel Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URLM >https://token.thesaudisnft.com/3842</metadata:External_URL> <metadata:Name>The Saudis #3842</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Sideburns</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> lue>Brown Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Green Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Pearwood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URM L>https://token.thesaudisnft.com/5145</metadata:External_URL> <metadata:Name>The Saudis #5145</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Brown Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> ata:Value>Red Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Pixel Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>httM ps://token.thesaudisnft.com/4601</metadata:External_URL> <metadata:Name>The Saudis #4601</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>j iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> metadata:Value>White Shemagh & Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Classic Gold Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Pearwood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> etadata:External_URL>https://token.thesaudisnft.com/4935</metadata:External_URL> <metadata:Name>The Saudis #4935</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> data:Value>White Shemagh & Crown</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Horn Rimmed Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_M URL>https://token.thesaudisnft.com/4926</metadata:External_URL> <metadata:Name>The Saudis #4926</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>J iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> data:Value>White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Laser Eyes</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:ExternM al_URL>https://token.thesaudisnft.com/5041</metadata:External_URL> <metadata:Name>The Saudis #5041</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Messy</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Luxurious Brown Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> Value>White Shemagh & Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Pixel Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>M https://token.thesaudisnft.com/4425</metadata:External_URL> <metadata:Name>The Saudis #4425</metadata:Name> </metadata:Metadata> ~iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Bald</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Haram PoliM ce Cap</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>None</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnft.com/3466</metaM <metadata:Name>The Saudis #3466</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Neat</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Messy White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>M White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Rimless Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Bubble Gum</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:ExternM al_URL>https://token.thesaudisnft.com/3810</metadata:External_URL> <metadata:Name>The Saudis #3810</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>~ iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Stylish Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> adata:Value>White Shemagh</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>None</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudiM snft.com/4182</metadata:External_URL> <metadata:Name>The Saudis #4182</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Bald</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Light Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>BrownM Shemagh & Crown</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Stylish Nerd Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>M https://token.thesaudisnft.com/4645</metadata:External_URL> <metadata:Name>The Saudis #4645</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>2( iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Light Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> data:Value>Brown Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Purple Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Cigarette</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:ExternaM l_URL>https://token.thesaudisnft.com/4403</metadata:External_URL> <metadata:Name>The Saudis #4403</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Red Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Square Reflective Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Rosewood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnft.com/4466</metadata:External_URL> <metadata:Name>The Saudis #4466</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Brown Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Stylish Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> ata:Value>White Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Stylish Nerd Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Rosewood Pipe</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> xternal_URL>https://token.thesaudisnft.com/3690</metadata:External_URL> <metadata:Name>The Saudis #3690</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>pt iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Neat</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Short Grey Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>RM ed Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>VR</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnft.cM om/5049</metadata:External_URL> <metadata:Name>The Saudis #5049</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Short Grey Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> a:Value>White Shemagh & Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Small Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>htM tps://token.thesaudisnft.com/4498</metadata:External_URL> <metadata:Name>The Saudis #4498</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Messy</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Clean Shaven</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Red SM hemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Round Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Bubble Gum</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://tokeM n.thesaudisnft.com/4372</metadata:External_URL> <metadata:Name>The Saudis #4372</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:ValueM >White Shemagh</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Small Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnfM t.com/4867</metadata:External_URL> <metadata:Name>The Saudis #4867</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>8, iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Brown Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Luxurious White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> etadata:Value>Red Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Nerd Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Cigar</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>htM tps://token.thesaudisnft.com/3666</metadata:External_URL> <metadata:Name>The Saudis #3666</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>| iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Stylish Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Brown Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Round Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Bubble Gum</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:ExternM al_URL>https://token.thesaudisnft.com/4122</metadata:External_URL> <metadata:Name>The Saudis #4122</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>z@%N iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Luxurious White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> ta:Value>Brown Shemagh & Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>None</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://tM oken.thesaudisnft.com/3474</metadata:External_URL> <metadata:Name>The Saudis #3474</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>8 iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Brown Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Red Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Green Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> ta:External_URL>https://token.thesaudisnft.com/3910</metadata:External_URL> <metadata:Name>The Saudis #3910</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Messy</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Sideburns & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> :Value>Brown Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Small Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:ExternalM _URL>https://token.thesaudisnft.com/4837</metadata:External_URL> <metadata:Name>The Saudis #4837</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Messy</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Haram PoM lice Cap</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Nerd Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesaudisnft.com/M 3675</metadata:External_URL> <metadata:Name>The Saudis #3675</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long Widow's Peak</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Normal Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> data:Value>White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Regular Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Vape</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> metadata:External_URL>https://token.thesaudisnft.com/4860</metadata:External_URL> <metadata:Name>The Saudis #4860</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>"m iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Bald</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Light Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>White SM hemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Regular Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https://token.thesauM disnft.com/5006</metadata:External_URL> <metadata:Name>The Saudis #5006</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Light 1</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Bald</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Luxurious White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> lue>White Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Stylish Nerd Glasses</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Bubble Gum</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_UM RL>https://token.thesaudisnft.com/4812</metadata:External_URL> <metadata:Name>The Saudis #4812</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Long</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Messy White Beard</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:ValueM >White Shemagh & Stylish Gold Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>MAX BIDDING</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Cigarette</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> :External_URL>https://token.thesaudisnft.com/4508</metadata:External_URL> <metadata:Name>The Saudis #4508</metadata:Name> </metadata:Metadata> iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Dark 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Short Buzz Cut</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Shadow Beard & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> <metadata:Value>Red Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Pixel Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>Shadowless Cigarette</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> metadata:External_URL>https://token.thesaudisnft.com/4266</metadata:External_URL> <metadata:Name>The Saudis #4266</metadata:Name> </metadata:Metadata> <?xpacket end='r'?>#EpS iTXtXML:com.adobe.xmp ' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 12.56'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:metadata='https://thesaudisnft.com/metadata/1.0/'> <metadata:Metadata rdf:parseType='Resource'> <metadata:Attributes> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Head</metadaM <metadata:Value>Medium 2</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Hair</metadata:Trait_Type> <metadata:Value>Bald</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Facial Hair</metadata:Trait_Type> <metadata:Value>Shadow Beard & Mustache</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Headwear</metadata:Trait_Type> data:Value>White Shemagh & Agal</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Eyewear</metadata:Trait_Type> <metadata:Value>Big Shades</metadata:Value> <rdf:li rdf:parseType='Resource'> <metadata:Trait_Type>Mouthpiece</metadata:Trait_Type> <metadata:Value>None</metadata:Value> </metadata:Attributes> <metadata:Description>Max Bidding</metadata:Description> <metadata:External_URL>https:M //token.thesaudisnft.com/4392</metadata:External_URL> <metadata:Name>The Saudis #4392</metadata:Name> </metadata:Metadata> text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAWgAAAFoCAYAAAB65WHVAAAWpUlEQVR4nO3dfWwdVXrH8ccsWV5i7DVJGvNWbwjEtbKEVFlBVMdqEkSMVk1gpS6p2CxbYJVd0TaWEmklilZ9kVD+aElrdUGrqKxVlj/KVhWQVFVNJCerJJRGazVNSV0HQupNYMPGqXFeKJCA+4czM+f6nrkzZ+6ZO8/1/X7+YTJ37txxDA/P/c05Z5q6ezdMCQBAnauKvgAAgB0FGgCUokADgFIUaABQigINAEpRoAFAKQo0AChFgQYApSjQAKAUBRoAlKJAA4BSFGgAUIoCDQBKUaABQCkKNAAoRYEGAKUo0ACgFAUaAJSiQAOAUhRoAFCKAg0ASlGgAUApCjQAKEWBBgClKNAAoBQFM GgCUokADgFJXF30B0Ovg4K6iLwGedPduKPoSkAEdNAAoRYEGAKWIOBAbZWw9ujXc3rF0h3W/i/WP7Qy3O2+5ICIircsWZjpXI5k88kG4Pfpec7i9e2Bz4nvN3xvqDx00AChFgQYApYg4GowtznCNLA6f/vdMn70+4fXr+9ZY93/6+nDF931x3YrU74s71kXc9bhcR5r3fdS/t+L7sv4eUD/ooAFAKQo0AChFxDFLpRmZERg8Nmg9tndJr3X/B+d+lf3C4A2/h9mPDhoAlKKDngVcbvzFdcsuPh3/pOpz5CXphpzv9/nmch2afw/wgw4aAJSiQAOAUkQcdcTHjT8f3rtwKuM7s/3rljR22Uc8kWZ8dNbPyev6s/8eUC/ooAFAKQo0AChFxKFQXJRx/yPfCbfverol3M4zzrCamKrpx7lMldY4iiO366/x7wG1RwcNAEpRoAFAKSKOgtnijN/d8sfh9uR4NJ333Nkz4fbgsX/N98IquDSZdYLEHK/X0eiy/x5QL+igM AUApCjQAKEXEUSNxIzOCOKO5tS3c997x0XDbjDWQLOuICJeF/PMc8WFex+WRygv2Y/ajgwYApeigPYvrlH//B38Rbl+YnAi3zZuANrd1Lg23T44erfLq/Lj2FP9f1yDN7+GSfF6DK0Fe+C8NAJSiQAOAUkQcVbDFGeZ0bJNLrGEyYw0z7hiRd1Kfo14kPcU6jsvNtDxvvGU9NzcDEYcOGgCUokADgFJEHCmkWSj/P585JyKl45Zb5i3weh0lozjWeD11KO5J3qbz/5htZMAauVC+85UPMp2rcRl/h4eKuwrUBh00AChFgQYApYg4ZrDFGbZn/omULpTffPYOESkdaeEyWqMItjhjx9Id1mPXrl2b9+WgCkNDQ9b93b0banwl8IkOGgCUokADgFING3GkGZkRcHnmnznSwscoDh9rccSNzLDFGUQZuhFlNBY6aABQigINAEo1VMRhxhpz+qL9f7Q5ijVc4oxayLoWhxlrxI3MeP/rtr32r9CovZtfKd9HlNFY6KABM QKmG6qDj+Oiag+42z0X1fUz1Nrvm1qXxx6EY199q/OFKB03X3LjooAFAKQo0AChFxOFJED/U01Tvak3qeESiekRJyIoOGgCUokADgFJEHJ5pnOrtWxBtjL7XXOyF1InOK4vsE3XAFR00AChFgQYApYg4lMs61ds3c8RGEG2sOWR5xiDK7L1n+u+r03ieIHEH0qCDBgClKNAAoBQRhyf1shaHC1usIRJFG/f2Ppj/RcwCawZfE5Eo6hAh7kA6dNAAoBQdtCeNONUbQL7ooAFAKQo0AChFxOGZj6ner/ePWPev3DQ/0/kA1Cc6aABQigINAEoRceSoNKqIttf1dVmOiV7vG7VP437zpWj7Kwd8XOG09W+ste5/qZUnfANFooMGAKUo0ACgFBGHJ2++NF62Ly6qeL0/+Rgb89i3Vt0Rbn/lwIepz2EKoo2Ojo5w3/z50UiRTcPRsT+QQ5k+A0B2dNAAoBQFGgCUIuKowlurvhRuu0QVG38aHdt+d/nr/d2nre9ramqKM jpmKjnlr1SoRyR51mLHG+Hh5VAOgGHTQAKAUHbQjl67Z7ITN7ndqairc3vh8u4iIvPykvWuOU3K+M91O7w3s/q3pcc7r37C/bo6DHr3AE7yBWqODBgClKNAAoBQRRwppYo24G3s2Zjzx8HMLRSSKOkTsNw5FRLYcWJj6M1wEUcdMk/k9vQtACnTQAKAUBRoAlCLiiOE6xrnvYHvF113iiW0vzk19rIiIPON2+EysZgfoRAcNAEpRoAFAKSKOGYJow2XqdhznqOKKjp3vOh0/9cxNmT6H1ewA3eigAUApCjQAKEXE4YktznCNKgJjm2+v9nKcsJodoBMdNAAoRYEGAKWIODyxxRlZo4pnH72YeEx/Z/XPJGS5UUA3OmgAUIoO2hNbt5ymE3bho2u2YTU7QCc6aABQigINAEoRcXjiM84wowzTyk3ReGX53odVf84nW/9XRESu2XFj2T4REXnixplvAVBDdNAAoBQFGgCUIuKYIRgd8daqKGbIurJdXFSRZF1fV7jdM Ov/XjFeqH1Zx/6NLoz/8rGf6nyss+0REjGN/uH2s6s8G4IYOGgCUokADgFJEHDHMiSBm3OEiLqqYHP9V2bGlUUb0+snRKNa4rTOKHEak+gcKHP165chk6StLK74OIF900ACgFAUaAJQi4kghzboXXXsfFJHSSKJlnt/rMM8ta7KdY8+L0TnuT4gwzGNHhdXsgFqjgwYApeigPQm6W/NGnu1mYBr/vPnfrPtXbff7KKxDw5VvEk56/TQAruigAUApCjQAKEXE4Zl5I+/AU/anen9t573hti3O2Ha1PRo58FS0vXwi4wUaWM0O0I0OGgCUokADgFJEHJ7Y4oy4qMKMNeKOsTGPPdwWTQ1fPvF56nOwmh1QP+igAUApCjQAKEXEUYXDbdH/31yiim8ejY5tv7v89f7u09b3NTU1RcdMRccc/tkyEXGLOkRYzQ7Qjg4aAJSiQAOAUkQcjlxiDTOqMOOJqampcHvj8+0iIvLyk/ZYI455vkv77kr9PlazA+oHHTQAKEUHM nUKarjnuxp6N2f0+/NxCEYk6aRH7jUMRkS0HFtpfuJz6o0uwmh2gGx00AChFgQYApYg4YriOce472F7x9dh4wmLbi3NTHysiIo+4HR4IVq7rMaZ37//t/dEBrGYHFIoOGgCUokADgFJEHDME0YbL1O04zlHFFR077Qv9x7n0SPpx0NbV7Aw9rGYHqEEHDQBKUaABQCkiDk9scYZrVBEY23x7tZeTCqvZAbrRQQOAUhRoAFCKiMMTW5yRNap49tGLycdczvZMQpfV7My1OiZvifbvvWd6Zbs1g6+l/txGFvx9dd5yIdzXSnqEFOigAUApCjQAKEXE4YktzkgTVbjIGmvESVpu1GR+Je+U6a/qwVd3VBZEG8QacEUHDQBK0UF74rNbNjtl06rtRpf+vXe8fZ6roBMMOmlURudcG3/+/T4REVm8eHG47/jx4+G2ud/0ze9uyffCqkAHDQBKUaABQCkijhmCm2+H26KYIevKdnFRRZKv7bw33D539kymc9QCX92hSRBhM aI4sXNFBA4BSFGgAUIqII4Y5ztiMO1yYUUXr/Ogck+PlkYn5ukj0+m2dUY5wcjT9uGW4OfOd/wm34+78B/tX7r3P6X0L/vbLHq8Uccy//9mCDhoAlKJAA4BSRBwppJlW3fyjO8r2tcyr/rPNWMOMO0akuIkqs5EZQywwX9gr9v0O70NtxE1EqWd00ACgFAUaAJQi4vAkiB98jLR49c7d0R/ujDbXvmkctKbyOQaPDYbbW49uDbdvXrojOuiVK+dduzbDVer09NNPh9vmV96WlpayY9va2sLt++67r+z1ogW/lqHBXdbXu3s31PBqUAQ6aABQqqm7d8NU0RdRKweNTmROX7R/yerq5ywHNwnNG3l/1/aC9diH3l4fbpd0y1c8db/9M7bvibbvWT4/w1WK9C7pLdu3w+yqDY899limz6i1TZs2hdtxXbPZLQcmJias59u2bZvHq8vPwMCAdX+9d9bPHZ7+qrhgzg3hvjOXzofbcfvPNU3/h9Mytcd67MNL629tAjpoM AFCKAg0ASnGT0JOhlcEdvOhOXlxU8arsTjzGxjz20J7xcNsl7jBvHgbMm4gmzdHH2NhYYZ/5k2PRZ7c81BNuP/hfvwi3Ozo6yt63b91fhfs6l0V3f2/6y9+xvi9J3O/BFn3UU+wRxBJpYg1z//GPL4uIyOJr7cfWIzpoAFCKAg0ASjGKQ7KP4jh0OIoZXKKK0/8RbbffXf56f/dp6/uamprC7amp6Nf20Z+2i0j2kR1xbCM+ROzRR5Gxh++4IylmiPu8vN7nQz2N+GAUR4QOGgCUokADgFKM4nDkEmuYUUVcPLHx+el44uUn7bFGHPN8F/9kodN707KN+BCxj/oocsRHLSICH59X6+s0uYz4ECk2+mAUR4QOGgCUokADgFJEHCmkiTXiRl7YmPHEw89NxxNB1CFiH9khIrLlQEyUsce+Oy8+JrtAt2DEUxFRRxBLHJz6jXDf+XMfhds3XHtLzP5fiojIT85F6658q3wRw7pCBw0AStFBx3Ad49x3sL3i67Hdr8W2M F+emPlZERG666HZ8DlxuKIpEnbU5Hr1nQ8Ii1yLyhRemV6uLe0q6ud9cm3vu98+JiMhLP4yeRdW6LPqdXN0VtVpfXLci3P709eGy/bZ9lQTHJ51XROSj/uj6Jo98ICIim/4w+nsJfn4Rt7+D4OevZHn7b4bbRX7zCW78lXbH14fb5z+273/gCydERORfrl0U7jtzKZp+X4/ooAFAKQo0AChFxDFDEG24TN2O4xxVXNGx812n4/MaB+2DGX3ETR13ce7sGREp/Rofp2Ve9JztzyT5K75NXCxh9c7h6Nh3P/N3XkPw84u4/R1k/fmLENwkLLkZGBNrmPuDaMPct6AlGhNdj+igAUApCjQAKEXE4YktznCNKgJjm293fEfxozhqxYwtkphxQLawKXkUR8mxCbFG0nlFRC6P7LUdHnL5+UWiv4OsP38RkkZxBKM1REpHbATRhnksozgAALmgQAOAUkQcntjiDPeoYtqzjyZHFtuN6d1ZF+r3Maqi1mo9isNF3KQVl1EaM SRjFYY81RES+MXd6Ys8/XIxGNTGKAwCQCwo0ACjFMwml9JmEWSeq2EZxpIkqXPiONVhpDnGKXLD/p0en1w8xV6VLsxaHbRRHd9N/h9t/sHyl/4vNGR00AChFgQYApRjF4YnPOGN7zAL83554wvjTa94+b8NXl3k7F/zZ9fMjIlJs3FCEpFEcwWgNkdIRG0G0wVocAIDc0UHPENx8O7THbcF+m7hOOMlDb68Pt81xryLRAvSSvLZ9aq3N14XbX2qObrA0X3dNuH3h/z6peI4PL0Rdy60Lops75vvMY8zPscn62S7XX6v3BcenOfbLt0dj54MOutEkTfU2u2ZbN81UbwBA7ijQAKAUEUcMc5yxGXe4MKOKuOfH2V4XKX8daBQff/apiIg8cF1MPBElcnL+82jbdvwNV11Ttq+e0EEDgFIUaABQiogjhTTTqpt/dEfZvpZ51X/2bZ3RNPSTo0crHKmfOYrBNrIB9c9cTiGrxR6uw+qXJyu+vHbt2nB7aGgocX8txqfTM QQOAUhRoAFCKiEM5M9Yw444ReaeIy0EF5oQTcyKKObFltlu0aFHyQUqdOBE969D8OeL21wIdNAAoRYEGAKWIODwJ4oc8R1qUnNvjWhwaxcUFtrUxbKNDZgrOkbSuRyWMPEGt0UEDgFJ00J4E3a15I882pRvFyrqCHVAEOmgAUIoCDQBKEXF4Zt7Ia5m3oOrz1WKqd9xNNvNrf16f6bKIP/S7ecldZfs+PHW8gCupzsKF0UMBPpnTXNh10EEDgFIUaABQiohDOaZ61ydzJEjwjMZTZybCfXnGR9q0tLQUfQnOOjo6wu1j758t7DrooAFAKQo0AChFxOEJU711Y/IJ6hEdNAAoRYEGAKWIODyZjWtxuKwo52rs9PSd8V0/P1L1ubR76hsPFH0JqFN00ACgFB20Z/U41btWgq5ZJOqczScmm2NP611PT0+4/fjjj4uIyLdW31vU5RTqqpbov4NrLl0It7WMNQ6uScv1mOigAUApCjQAKEXEoRxTvUvt27dPRETGvvtqM 4rHru5eE2zf++MlU501z7jTnHRkZSby+RmTGCPPnzw+3i4wUgmvScj0mOmgAUIoCDQBKEXF4wlTv4nQuu9O6f/fBY+H2tz2e28d5gTTooAFAKQo0AChFxOHJbJzqnUTL8wR/79ejf43//heX6+bcQBI6aABQigINAEoRcXjWqGtx+F7tzoUZPZiRxJ95WCjPdm4f5wXSoIMGAKUo0ACgFBGHcqzF4SbPkRbVnvvWBW3hNs9IRBp00ACgFB20J0z1Ls7okbfr8twBczw5YKKDBgClKNAAoBQRhyeNONW7CKtXr57eGP3rfM6bw7mBrOigAUApCjQAKEXE4Vm9T/U2V6UzRxeYU7mLZD43LklXV1e4vX///kLOC1SDDhoAlKJAA4BSRBzKMdXbbnh4uC7PDbiggwYApSjQAKAUEYcnrMUBwDc6aABQig7aE6Z6w4WWJ6JDNzpoAFCKAg0AShFxeFbvU73rxYoVK+ry3IALOmgAUIoCDQBKEXEop2Wqt/kU6mBluyKeM pTc+Pl5X5wWqQQcNAEpRoAFAKSIOT2bjVG+NEyjGxsaKvoQSHR0dRV8CZjE6aABQigINAEoRcXgyW9biMJ89aI7cQOTEiRPW7dWrVxdwNZjN6KABQCk6aM8aaaq3eROx1t222bkuWrSopp9tfh43CZEnOmgAUIoCDQBKEXEop2Wqtza1jjWAItBBA4BSFGgAUIqIw5PZONU7K8ZSA37QQQOAUhRoAFCKiMOT2TLV24W5YL/Gle/yknWqN3EPXNFBA4BSFGgAUIqIw7NGWIuj0b+qsxaHf09sfCjcHhkZyf3zhoeHjT/Ny/3zsqKDBgClKNAAoBQRh3KsxVGqXiKFrq6usn3mqJdbF7SF240eGSEeHTQAKEUH7QlTvZO1Nl8Xbm/46jIREdk1NFTU5eRqYGAg3A5+1ka15OboJlxPT0+4bd4MfOHlV2t5SSJzmiu+bN60rPm1GeigAUApCjQAKEXE4clsmept3rDKc1W6jvbpr72N8PU/+FnNm4QQeePIaNGXICIiM x94/W/QlxKKDBgClKNAAoBQRh2eNMNXbp+DrfyVJUYvLqnpx58p6jlNnJlK/D7WZxu2DluukgwYApSjQAKAUEYdyGqd6B3EAX+mBfNFBA4BSFGgAUIqIw5NGX4sjz0ktmpkxT6M+oxH5oYMGAKXooD2ZLVO982TrNhup02QNaLiigwYApSjQAKAUEYdnTPXWKbiJSbSAekIHDQBKUaABQCkiDuU0TvWuBZ8r2MXJeo64hxqwID98o4MGAKUo0ACgFBGHJ40+1RtM+4Z/dNAAoBQFGgCUIuLwhLU4APhGBw0AStFBe8ZUb6DUwMCAdX9374YaX0llGq+TDhoAlKJAA4BSDRVxmF9VDvbvCreP9vuIDmocPwxme9tRy3X+zT/trfJi4E/0u9AWAaD26KABQCkKNAAo1dTdu2Gq6IsAAJSjgwYApSjQAKAUBRoAlKJAA4BSFGgAUIoCDQBKUaABQCkKNAAoRYEGAKUo0ACgFAUaAJSiQAOAUhRoAFCKAg0ASlGgAUApM CjQAKEWBBgClKNAAoBQFGgCUokADgFIUaABQigINAEpRoAFAKQo0AChFgQYApSjQAKAUBRoAlKJAA4BSFGgAUIoCDQBK/T9jxTzYyCgPRgAAAABJRU5ErkJggg==" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(looM p),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===M apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snakLze.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAWgAAAFoCAYAAAB65WHVAAAbG0lEQVR4nO3dfbBV1XnH8edGsFgFRKgXSeVFKVXHOlEnaRIGRQYldRxkRif6h8MEqzXTTnRqsOpo+YNq1fFtNE6LmgTHpjOQ0Q4aa9Va1BqNqUqoYwUpyJuiVhCFKETU2z9g7/Psc9a6e6/9dp597vfzTxaLffZeXMziOb+99tp90+fMHRAAgDlf6fYAAABuTNAAYBQTNAAYxQQNAEYxQQOAUUzQAGAUEzQAGMUEDQBGMUEDgFFM0ABgFBM0ABjFBA0ARjFBA4BRTNAAYBQTNAAYxQQNAEYxQQOAUUzQAGAUEzQAGMUEDQBGMUEDgFFM0ABgFBM0ABjFBA0ARjFBA4BRTNAAYBQTNAAYM NazbA4BdLzz5aLeHgJJMnzO320NADlTQAGAUEzQAGEXEAW+U8dT3X4rbZy35Zkf/c/+2Lu47/c+mxe2Q/rznqPt6TR3zjZvnC5qLChoAjGKCBgCj+qbPmTvQ7UGgPq44Q0cZPjriuG7SgyIi8rXjJsR9Wzd8GLePPvaIzP0hx+r+uq/XpDGfOHti3I7+3ljF0UxU0ABgFBM0ABhFxNGjsqzMiGx55j3nsRPPGB+3Xas4Xn96S9w36qCD4/bGvbvi9pQRowbtDzlW94ccW8b1rI9Zx02r126L29EqDiKOZqKCBgCjWAfdA0Ju/Pmq5RDROltf1bZ02Pq4PfrOawY918c/uNl5bFp/lmPLuN6llz8Wtxd9vmr/7/+j+xquY/XxiWsEnMN37A//+qm4rW8S6jXRNy5xfhQNQQUNAEYxQQOAUUQcDRJy4+97//543F487JRSxxF9hdY3CfXNK/m81bxwYus/sZHzVnSc6zZxH3tvSn/ivH0nts6nYoTLHrm+49qh13NJM fO7cG+L2bnU9Off1juO9f6aUc/h+hhv37Y3bOm7Sj3qj2aigAcAoJmgAMIqIw6CQKEMkGWfUIW0Vx8LhKnJQX99H/8i9OiKybEsrG1nYN/g5XHHJYOe7NON5s5xbnzdvf+5j7z4nbrKKo/dRQQOAUUzQAGAUEUeXhTxkcsXck9wnqTniSFvFseuLz+L2Qs8Ki6uuuUxERPpvbq12WPfOztaxA63+9w8cKyIiB85xleq79ZYXnOPU50uT99j+gP6QY3W/7tN/VlZx9D4qaAAwigkaAIwi4qhJyMoMX5SxbveXzv5+Z291QvbieO/809UnVXv92o7zDjj6fP26T++kpx+S0cfsOBAH+B6ocR3rOz5knFnGH3LswvPGxu37VuyO26zi6E1U0ABgFBV0yULXMLuqZV+lLLs+zj2uMrluEupqeuGGEXH76NWt7cadr4FSNxETx6b0J/rUTcm7pp7W6n94R+scB8anx5B2rO/4xLG+czj6Q47V/Yk+/Zor9efW/dwk7B1UM 0ABgFBM0ABhFxFFAGWuYnXGGJ8oY2LE9++AqFH2F1jej9NfqkP6856j7ek0dMzcJm40KGgCMYoIGAKN4q3cGVa5hdsUZ3ihjp7t//EPPuY8/IGTDfv0mb02/1RvNw1u9m4kKGgCMYoIGAKNYxdGm6MqM0IdMnHGGJ8oY2PSW+9w5ueIMX5Qxa9asUq+Ncq1cudLZT7TRbFTQAGAUEzQAGDVkI47KVmaEPmTiiDN8UcbAh5vd50j5dzZkZQZRhm1EGUMLFTQAGMUEDQBGDamIQ8ca1016MG7rvQuKrswIfcjEFWd4o4zPPnH3y8iOngfOPDtu+1ZmnD3uts7O1zyXQO0e376wo48oY2ihggYAo4ZUBe2jq+bCN/4C1zA7q2VPpTzh7c5KOdRffvW+uD31kMMzf+7E2RPjdrRRv3411NjhIzo+UyXXeNqFjC/L+YqOKct49DkeP7ATHVXz0EUFDQBGMUEDgFFEHNIWaxS88Re8htkRZ4RGGSG71WnR12n9ddz3Ndz1M lT001igzJskSQ5RxvpDxpY1Jf76MSAW9jwoaAIxiggYAo4g4RBKxRtGVGaFrmEPijLxRhk9abBHyNTzLsfq9edF1ssQQZa6OyBLnaK5+33h853Nd2/WzANpRQQOAUUzQAGAUEYe0xRpFV2YYjDJ81u/5SEREzjjxmLhv64YP43ZarHHl+u+qk5U6tKQyzl3m+ALPdYf8vKNPxxpHH3tE0RGhR1FBA4BRTNAAYBQRh0gi1ii6MqOuh0zKEO3FseiKb6cee+nlj8XtKNr40znnVjKuXnPlk/t/XndM7Yw6RJKx0ugph9UyJjQDFTQAGEUFLcmquek3/kJEN6cunNj6z2DkvBVdGk3vu//uc5z9+tsJoFFBA4BRTNAAYBQRh7TFGq44Y98ezycHjzgsxhpadHNq2ZbPW52er+GL73qx9Ysq1zz3MF+UtHvFvNZB96yqb0AwjwoaAIxiggYAo4g4RJKxhivOGH5IfWOpUfSot28VwVVXT4/beq0u8tFR0mL1ePci1f+tM WkcE66igAcAoJmgAMIqIQyQZa7jijIMPrW8sNYoe9V543lj3AevX1jeYIWDdOzvj9uq125z9gEYFDQBGMUEDgFFEHCLJWMMRZ/QdMcn9ube2VjQgt1/8eI6z/+Xv3dTR94Ccnfm8tz28I/UY/b495DOgIiO9Yf9AIkrqzTgN+VBBA4BRVNAiiarZVS33TT6mo09ERF6ppoL2VcqnjDnI2f9ywevpVy7pvaH1+mjePF2c75tKon82FTRaqKABwCgmaAAwiohDkrGGM84YM66ya7viDF+UMWb4QCVj0I9x6x3XUK4sURKgUUEDgFFM0ABgFN9npS3WcMQZfWOLRxwhKzN8UcblC65w9k+QI/MPrM3iX30Qt28t7awQIUpCOCpoADCKCRoAjOJ7lkgi1nDGGaNGZz7V1x+4Nm7/QvWHrMzwRRllvzgg2rA/2tVOpP2x4xa9AoF3EuajH5f/F7VJ/6XdGAwagQoaAIxiggYAo4g4pC3WcMQZ00a6/x2bpuKMSOhDJs44M wxdllPziAB1tRK5d9o4aR2v/Dd5JWJzez0Rv0p+IjwCFChoAjGKCBgCjiDhEErGGK86YNrLP+bEyHjIJeQdiVS8OuP/uc+K23hfC14/i9GoZHR+NnnJYN4YDo6igAcAoKmhJVs2uarnSNcwBr9iq6sUBvseOeRy5OnqTfl4nBh8qaAAwigkaAIziO6wkY43CN/4C1zAHvQOx5BcHROtvt85bEfclbgyqfhSnf7YaN2DhQwUNAEYxQQOAUUQckow1Cq/MCFzDfJRjBcZ7J3/DfY4SXhygRetvr7p6etx3q/q6nei/5YVSrz0U6VUxI1V8tHvFvNZB96yqb0AwjwoaAIxiggYAo4g4JBlrFF2ZERJl+HijjIAXB4TwbdLv60c+yzyb9Ov+b9U4HthHBQ0ARjFBA4BRRBzSFmsUXJkREmWIiCwedkpH32WeKMP34oCPg67YSe8L4etnv4jifJv0635Ao4IGAKOooEWSVXNFN/5clbKP9xVbnn2pX858ZjffI8gajyMXM 59sDOnkzttzXmqHZqKABwCgmaAAwiohDJBFrBO0ulxJxhMQaWsgrtkSKRxyL73oxbr9x+2lxeyS72ZVq+erWenv9X07iJu1sIg60UEEDgFFM0ABgFBGHJGMNZ5xR8kb5aULegVgGvaJg8a8+iNu3VnK1oWvRFd9OPeauR1+rYSRoCipoADCKCRoAjCLikLZYwxFnlL1RfhpflLFzn3t1R17r93wkIiJTDzk87vPtYKcfTZb1pQ5jyNAb9p/ww/+M2zpiktkT6xwSjKOCBgCjmKABwCgiDpFErOGMMyraKN/HF2Ws2vlFqdfR0UbEt7Nd4ms4ctEb84tnRQerOKBRQQOAUVTQ0lY1O6rlqvZh9vFVyut2V7MOWu9mp3et8/UjH73v8zU3/EfcHjt8ROsgbhJCoYIGAKOYoAHAKCIOkUSs4Yozqtoo38cXZazb/aWzv7/g9fT63Cz9yEevMb/pwq86j3miqtwMjUQFDQBGMUEDgFF8h5VkrOGKM6raKF9E5PY7z+roM 80UZsqvc77/R49tb1cb8iZUbbNhfKt8a8wQ27IdCBQ0ARjFBA4BRRBySjDVccUYZG+W7ogwRT5zhiTIGdmwvPA7N9fi2fpgC5dI7AvLoPLKgggYAo5igAcAoIg5JxhquOCNko/zRP7ombt+u+kNWZnijjJ3lRhwuvg37tTum/lxERK588rtVD6cnRD8vX6yxY9/eOofTGOdtuCjX5x4+9mclj6R7qKABwCgmaAAwiohDkrGGK87wbf+p44xI6EMmzjjDE2UMbHrLfe4SLV/d+llsVf36a3i0PWb01R3ZuH6G7W206KhiwaaL4/boyYfF7Y83/TZuL53803oGViMqaAAwigpaklWzq1oO2l0udA2zo1r2VcoDH252n6Pgv7OJm1SeG1muKs+3rveqG8+O27de9/ig1w45Vh+f5VhfxRo5UW2O//rTW5z9IXzniPr1GFgTjSyooAHAKCZoADCKiEOSsYYrzqhyDbMrzvBGGZ994u6XkZ7+bPLepPLFGgOrfu3s17FEM 1B9yrD4+SzSS9ufSkUSW/hBp5yDWQBZU0ABgFBM0ABhFxCHJWKPwyozANczOOMMTZUx4u1iUkYVvdUHaighfJOGLH6L+kGP18VlWcWjR+PXY867i0MdesPda5zH/c84/O49vH0/7mACNChoAjGKCBgCjiDikLdYouDIj+CETR5xRR5Th41tdEPI1PCR+CI0qdn90z/7GVUEfc9r1r/8Qt086Qf3GtlZz/Yv/3fG5b+hfjGhFQstH3NTqT1nFQayBLKigAcAoJmgAMIqIQyQRaxRdmRH6kEkZccbiYad09G155r24/dT3X4rbZy35Zsexs2bNKjyGujy2fP///tM6374k2X2wb3fqMdu//N3gv//pu3H7sWlLCo/psXWtdvT3svLJR53HTp8zt/D1YBsVNAAYRQUtbVVz0Rt/NVfKWfiq6YirqhYRWbBgQa7r1eH6SZMKn+OmHRtTj9n0y//KfL7LV7d+to+ce0GuMbn4/h6WLl3q7Key7h1U0ABgFBM0ABhFxCGSM iDWK3vjrZpSRhY47Iq7YQ6SZ0UeIa8dOST/o3NYx5z6yPPO59bFlxh1aSPRB7NFMVNAAYBQTNAAYRcQhyVjD8sqM2+88y9n/8Q9uLnQNV+whEhZ99ErsMZj39g6+JtoK198FKz6aiQoaAIxiggYAo4g4pC3WMLAywxdl+N6N2J9rROlCoo9eX/EhIvLrC+ZnPvb6J56O22ceaN/wndmljykrKw+7nLfhorg96qCDW+OY/NNKrtd0VNAAYBQTNAAYRcQhkog1isYZoQ+ZuOIMX5Thezdi3cp42KXXuYKDDSr2OPbdrfUNJocXDuygV3bUoWONjXt3lXruXkQFDQBGUUFL/qq5sht/vreIr1+b+Xp1y7uW+sd/vCLuW/T5qrj9/jWXDXq9/pvvdR6b1p/l2LRrvnf+6XHf+Ieei9u6/74Vrb2moz/XNHWNDYta3yz+aP4DzvNFY8oyTv3fhuscPvfe9rKz/5I35w36ubx8NwNnrj0/bj973EMiIrJg08VB546O76UbM jlTQAGAUEzQAGEXEkUGVa5idbxH3RBm+FwdYpqOPiWeMz3UO19fwRblH1KL/Xhd5YgR97TKu6dI39Tj1q+e8x7XzRx+d59D/Ten4xYoo1hBpxR2jjzss9XOjJ3ceo6ORpscdVNAAYBQTNAAYRcTRpmicEbqG2RVneN+B+OnOzGNrosTPXkcLjtUd/Te3+nzn0LFFtMLiPs+qhZDxLfKskihy7qpZjDU0HUtE0cbqtdvivq8dNyHzuXTs0fS4gwoaAIxiggYAo4g4JD3WqPIhE+c7EH1RhvfR2Hz/zuZdVVEV/4MqXy98jvEH4o7LPCs0et1lC90/Q4s/g60bPhQRkbHDR8R9z7ze+v/J1EMOz3wu/Wh5E1FBA4BRTNAAYFTf9DlzB7o9iLpEO3SJiFw36cG4PWXEqLhddGVG6EMmzjjDF2XkfDeijnB0rDFUd5qzYMNRR8dtizvb1f2uQr3aYtcXnw167Po9H8XttLij6S8FoIIGAKOYoAHAKFZxSDLWKLoyI/ghM E1ec4YkyZN8ed78Ue8nArFmzCn0eOaz537jp+/mvXLlSRKqNG2559fm4ffWpMyq7ThodP0Rxhy/q6PVYQ6OCBgCjqKClrWoueOMvS6U84S397+L+9rY/VI/i+irl4Ye4+wuaNGlSJefFIFQFrX/+48aNi9tRBV2lo4an7xhXt6jqDblxKNKqnJteNWtU0ABgFBM0ABhFxCGSiDUK3/hLiTK8dKzhizIOPnTwcwA9INqwf6O0/r+08/O9qZ8bM2xE4vMiyRcBNBEVNAAYxQQNAEYRcUgy1ii+MiPnv3k61vBFGeqR9KTf5rtmj3hj24dx+4QJRzj7XfSxKIfeTiH3OaT4OWKbsx+q16PrFTS+/joeh6eCBgCjmKABwCgiDknGGqWuzPBwvSDgkoNfaf3CE2X0/f4YzxmbEXG4IgdfzJAWW2SJJ1zHpMUeKGbKlCndHkJuGzdujNv6z+HrrwMVNAAYxQQNAEYRcUhbrJG6u1z2nePS3nWYoGINX5TRN/kY92dfqX7DM d1/kkPX320XHhH4ur5BoBLCCChoAjKKCFklWza69mBO7y2V/vVQIXTX7KuW+qcd5Pv1crmumyVs1h1TFdVTNVV+naR587Tdxe/5JJ3dxJEhDBQ0ARjFBA4BRRBwiyVjDtVl+RRvlazrW8EYZo0ZXPg4fV1wQ8lh1qLyRiU/IGmzkN2Han3T0ffT2hi6MpJj+/v64/bsuvtSAChoAjGKCBgCjiDhE0jfLr2Gj/ESs4Ykypo10/3vqfud4udIet84Sd+SNFPKuBCHCsGHUKN8ujHbp90Su27aja+OgggYAo5igAcAoIg6R9M3yE7vLVbRznIo1fFHGhRPdf133VjKgsJUUPBQClI8KGgCMYoIGAKOIOESSsYZjs/zk7nLVRBw61vBFGWOGD1Ry7SzK3lNj8+b9L4vT73jrVQsWLOj2ENBQVNAAYBQVtEjqXsyJ3eUq2ntZV82+SvnyBVc4+yfIkZWMqWxR1SzSqpz1G5P12tOmmzFjRty++OKLRWToVtJfGfUHcfv3M 9rW+gVpZaxyNycp4NCpoADCKCRoAjCLikPTN8pO7y1WzOb6ONXxRRh276ln37LPPiojIL/el1xZj/vbSuP1XL72Z6bxZzp3lvGvWrEkd31CkY4Rx48bF7W5GCtGYrIxHo4IGAKOYoAHAKCIOybBZfoUb5V8y9on9jQVPtDp9UUYNu+o10UGnHO3s3/l397d+ceZppZ27jPMCWVBBA4BRTNAAYBQRh6Rvlq8fw867OX4cZbQLeUGA4zH0/SraYa8hDp04OW5/smVTY84NpKGCBgCjmKABwCgiDpHUzfL1Phlpm+MHRRkiGV4Q0OLaJ2S/oR1x6OhBRxK7VhXfN8V17jLOC2RBBQ0ARjFBA4BRRBySvlm+b/vPbf3/19kZ+pBJ6gsCVL9jnxARqWwL1CaqcqVFk1dxPPjab+L2/JNO7uJIEIIKGgCMooKW9M3yE7vL9avfKGENc+oLAnS/6zF0Ealqh72m+KLCm3ZVnfuG78yO29c/8XTcXnLRhZVcD81EBQ0ARjFBM A4BRRBySYbP8Ctcwp78gQKlwV72mmDlzpoiIXF/Reas4N5AXFTQAGMUEDQBGEXFIW6xRcGVG6BrmkBcEuB5DF8m/w14T6ffGpTn++OPj9vPPP9+V8wJFUEEDgFFM0ABgFBGHSDLWKLgyI0uU0X+z3hNv/0Mm7//938Q9vijD9Ri6SPoOe73o1VdfbeS5gRBU0ABgFBM0ABhFxCGSjDUKrsxIizJ80nbUE/Hvqgf4RLvYsYNdM1FBA4BRVNAiiaq5+I2/fDvLpe2oJyKyc19frnPDtsTOdj9bFrdv7cZgYAoVNAAYxQQNAEYRcUgy1ijzxl8Wi4edIiIin6pYwxdlLNvyeeHr9YpTTz21kecGQlBBA4BRTNAAYBQRhyRjjSjOqCrK8NGxhi/KWLf7S2d/v7O3N23fvr1R5wWKoIIGAKOYoAHAKCIOERn/kI4wisUZaVGGj441fFGG7BpKW/O7bd68udtDSJg0aVK3h4AeRgUNAEYxQQOAUUQcBeSNM1wSsYYnyhhYM v7a06yG/jRs3OtszZ87swmg6RTvYibCLXdNRQQOAUVTQGZRZKXupqtlXKX/5Bq9iiujKdcqUKbVeW1+v7JuESy66MG5vOLCz3fxSr4AmoYIGAKOYoAHAKCKONrXEGQ461vBGGXt3eT499P6drTvWALph6P0/GwAaggkaAIwi4pD6Y42/mDcybsdxxhvqAF+U8dknnjOO9PRjqGDtc2+iggYAo5igAcAoIo4KOaMMkfQ4wxdl7NvjuRIRR53qetT72He3iojIBtVHfDG0UEEDgFFM0ABgFBFHSaI4IyjKEHHHGd4oAxZUuRfHUPXnF8yL22vWrKn8eq++qh8GG1v59fKiggYAo5igAcAoIo5AqSszQh8yCYgzJrx/ZOZje1VTIoXjjz++tHPplRv6gRTfMegdVNAAYBQVtEd9a5g7lVEpd2tXvsHo6nfWrFkiIrJy5cpuDadSS5cujdvRn7UMTayUp01o3YSbMWNG3NY3A3+yfEWdQxIZftigv61vWtY+NoUKGgCMM YoIGAKOIOKTk3eUC1zD3apyRJoo7yvz6b1VTbmzW7cXX3uz2EEREZN22Hd0eghcVNAAYxQQNAEYRcUjbKg1WZtSKr/9DSx2PcZfByjipoAHAKCZoADCKiEMkGWsUXJlBlAGgLFTQAGAUEzQAGEXEIZKMNYgzABhBBQ0ARlFBi6RWzVTKALqBChoAjGKCBgCjiDg88sYaRBkAykIFDQBGMUEDgFFEHEKcAcAmKmgAMIoJGgCMIuLIgCgDQDdQQQOAUUzQAGAUEUcb4gwAVlBBA4BRVNBC1QxUaenSpc7+6XPm1jySwVkcJxU0ABjFBA0ARg2piEN/VbnxyfldHEkXvdnZ5ftqh+6yFgGgflTQAGAUEzQAGNU3fc7cgW4PAgDQiQoaAIxiggYAo5igAcAoJmgAMIoJGgCMYoIGAKOYoAHAKCZoADCKCRoAjGKCBgCjmKABwCgmaAAwigkaAIxiggYAo5igAcAoJmgAMIoJGgCMYoIGAKOYoAHAKCZoADCKCRoAjGKCM BgCjmKABwCgmaAAwigkaAIxiggYAo5igAcAoJmgAMIoJGgCMYoIGAKP+HztyR+6Shq3ZAAAAAElFTkSuQmCC" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvas></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRectM (0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snake.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,appleM .x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.cells=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===LRsnake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAWgAAAFoCAYAAAB65WHVAAAVx0lEQVR4nO3df8xddX0H8G+tCEgpYEsKpVARpa0iJoC42DAe6liRaJVFNzRghmiyxSzb/ENi4pyRLcvMxrK4JYbO1EE33RZSrU5FY6kS2ABLJjDagsgKtMBaBkLrINh1fzycc7/P85zz3B/Pvfd87n1er3+eb88999xv+5APn/s+33POgrXrNxxJAITzqqYnAEA1BRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaIKhXNz0B4rrj1q1NT4E+Wbt+M Q9NToAc6aICgFGiAoEQc1EYZR77w8XK84FMby/HhXW9PKaX09KfvGezE6MmyP3t7OV642u9olOmgAYJSoAGCEnHMM1VxRh5ldKIq2si/VjN8+e9E9DQ+dNAAQSnQAEGJOMZUJyszCk9u/1blvqdOvGfWz6iLNa646qU2s2v56mX3leMPfffcvr4v36dq324/u93xup1fr/MobNl8dDnOfxcijvGhgwYISgc9Bro58VfXLc/Vi5vzrm3uXWU/3terus8rxlWd9KDnUeXFza3xMVc5STuOdNAAQSnQAEGJOEZIP078NanuBN24fF6d4rO7nU83JxcZTzpogKAUaICgRBwBdRNlpBQzzqhStTqiH1/1x0k3a60ZfzpogKAUaICgRBwNi3CRSXSjcoEL9JsOGiAoBRogKBHHkIz6RSbtTLkXxHer72Y3KjFDN3fHG9ZnMz/poAGCWrB2/YYjTU9inIzTGub8ftD5U733XTFzX4+8albdPaCXb5n8uXb9hiHOhn7RQQMEM pUADBOUk4RzM1zXMRZzhSdIxTYmbtvi9jDIdNEBQCjRAUCKODoz7GuZcuyd5p5TSwtW+Nocm1hgbOmiAoBRogKBEHNPMp5UZVXFGfkFKbt26dYOeDnOwbdu2yu0uUBltOmiAoBRogKDmbcRhZUZ1nCHKiE2UMb/ooAGCUqABgppXEUcea9x24aJyPPGBD5XjUY8zCnW3Cs1V3TY0peqv0AxfcavQnChjftFBAwQ1rzroOu265p/e2zpxdu31d5XjH245NLA5DUreNZ/wlubmQbXXrsj+4Gb7854OGiAoBRogKBFHjYuvOK4c7730lnJ8WlpRtfvYm/LUbubsxc3uOEd7OmiAoBRogKBEHH2Wr/h443mjvaY4jzV8Je8v/7Z0QgcNEJQCDRCUiKPPLrsuW/GxqLXiYxQvaqlTfD33bMLOHN41+e8lyqBbOmiAoBRogKBEHH1SXthy8NmBfUaUFSJFtPGO9e9rbA6jZOHqb6SUUjr0mYYnwsjRQQMEpYMeIfPhBCTQM ooMGCEqBBghKxBFcfle9QZ6ABOLRQQMEpUADBCXimIMp8cMr8tUVAHOhgwYISoEGCErEMQd7Dz4xY5sLSIB+0UEDBKVAAwQl4piDqhUbYg2gX3TQAEHpoOegH91ycY/na6+/q6/H7cRxP5mY9fXDV/k2AE3SQQMEpUADBCXiaEB+ifjeSydvwn9aavAS8Xdf1hp/57vNzQOYQgcNEJQCDRCUiAOxBgSlgwYISoEGCErE0bDicvH8zngXXzGcFR2H3ra9zR5vH8Y0gBo6aICgFGiAoEQcDcjvtVFctJLfGS+POwb5jMPjnrlqcvDWc1ob73+gHB5Ouwf22UB7OmiAoBRogKBEHF26ceNT5TgPAFYtPb6n41XdWnRYqzjKaCOLNabEHSIOaJQOGiAoHXSNvFPO/5l67ZS7UXUScSCKzrnmJGFaN7iPBtrTQQMEpUADBCXimGb3gRdSSsOJMpp2aMnmycG+bOOSfA+XekOTdNAAQSnQAEGJOKaZD9FG4bjDn5j19cPpM 7iHNBKiigwYISoEGCErEQUqnn94aP/54c/MAptBBAwSlQAMEJeIYIf/61fzXNfOuej2vQBFrQEg6aICgdNABFZebp5TSjRtb436v0T608G/b7OFSb2iSDhogKAUaICgRR0Dz6XJzoJ4OGiAoBRogKBFHw5Z/+8mUUkr7Lj91xrbp2/vtxBdmf/3FgX0y0AkdNEBQCjRAUCKOIclji9ydV79z8vWb7yy33XTZOdn7HijH/Y47zp54S1+PB/SXDhogKAUaICgRR5+1izKm+9Gu/0opTY01huWh7f85+w5r3IsDmqSDBghKB90nRedc1ynX+dXVr08ptTrpYXrOFeUQmg4aICgFGiAoEccc5CcEH/7Er6WUUtr//C/KbXlsUUQZdfLXf7r/+eyVfXOZ4qwuPH9yHXR+sjBfG33fwD4Z6IQOGiAoBRogKBFHl6pijZRa0UY3sUbTimgjjzWmrI22DhoapYMGCEqBBghKxNGBdrFGLnqskSuijbpVHECzdNAAQSnQAEGJM OOag6v4Z/Yg4tp2ar554oHa/ubp7xyvRRn5Pjh3tV3Ec3jW5feHqbwxoZuOl+Pd6cfM9Dc+EUaODBghKgQYISsQxB/2IM7acsnbGtsd27OjpWPlqkyMTvc6oveKr+qHPDO4zxolog17poAGC0kEPSVWnnFJK+w8cmLFt27ZtlfvWPU6r0O+nfued3zFXuey7n3TVdEIHDRCUAg0QlIijz7qJMlJK6SubNs3YduRLrfGC32mN+x1hdMNXchg+HTRAUAo0QFAijjmoijO6iTJSSunId947OdjzzXJbHmvQnee+clbl9sXvvyillNKrTvxK22O89851s77+zXe2Vtm023f6/tANHTRAUAo0QFAiji7dfsGHy/H+H90+4/W2UUadla3Xj3xJ3NEPC887vRw///XJ39WJv93+fd1EEuILBkkHDRCUAg0Q1LyNOC65+2A53nf58bPsOdXOB3eW43YXmfTqF08uK8cvfW1x2/2fuengjG1Pbv9Wa05f+Hg5XvCpja2dtkz+M WLeu/UqEUXFz2lOOD9/7+IzXO1l1EUXxa9l269bK19eu3zDE2dAEHTRAUAvWrt9wpOlJDMsdWSdy24WLynHeTXej3Ym/Be9unexre5Kw5n2dXN695COTf5eqTnq6UyfeM/Pz8q46c80117Q9XmTbt28vxxMTE43NY1A21ZyQHvXO+nV//sWUUkrnLz62q/edcsLkt82nfv78jG0ppXTzh3+zD7MbLh00QFAKNEBQ8/YkYa5djDDlUVI//lzrhf2zP5qqk1gjjzMKV/7gmdZnv2tJOa6bZxFtFFFHSin9cmfra97P72n9fzg/eVjOMzuJOGVuIxh97NmzZ9btK1eubPu+mx9qjYtLxFNK6X0PPjbjGPn7tv/6X5XjVee+qRyf+hfvmfWze1X3e6iKPkYp9iiijV85+aSe3v/67H3/vv/ZvsypKTpogKAUaICgRBw1eo016lRFGSml9C+PvZxSSumzD7zc2vaz3r6W5bHGq9e0zl6fkKrjjkJV7JFSd9FHlNgjjxG6M iRTyfa/OX3gl1qg7Xr5t4nt/2Hrhe9X7DEPV72KUVnyccezRKaWUjrr7R+W2s86qvkvhI488MmOffNsZb75gEFMcGh00QFAKNEBQIo5O1MUaJ58/Y592UUZKKV1563+X4yLaePcpC8ttbzv6mHL8tS6mmccXeayRxx3pns4vyukm+hjFFR91eo0khh1ldKObFR8pxYg+8lijKsqo2yfflq/pKS6Ame5/rvu9uU51YHTQAEEp0ABBiThq5BeFTLmnRraiY8EFn0vTrfn2L8pxHlvkqzRyxT7feepwue2hvS92Pd/ppqzW6CLW6EQ/LnYhtuK+NU1EHdc8/o7JwdO7ym1TwqP7q9+3suL1a5atLsdf/qOzK9939T/+c0op5r06dNAAQemga+TroD9570vleMF5R5fjum65kHfF+esP7Z25T/76zstPK8f55eLd3uVumHpdS/3S11qXRHdyNz4G59TNF5fjBa/r5vR0EGuvnPx5R3dzz+9+F40OGiAoBRogKBHHNEW0M kccaeVSRr2f+twP/V7lPIY8tql5PKaWdl7928mfNfCLHGp3Io4+qhwXceUMrSlq1tPXosWU3rBjsxEgppfT0J59o/eHvOn/0W0hdRhujQAcNEJQCDRCUiCNVr9jII4nPn3NUOX7w+dYjHOtWaVS9XkQZ0735wm+klFJ67pnW5eT7Hvl8azyCsUY//PI/nmt6CkRVrNZIaSxjjZwOGiAoBRogKBHHNEUskccaHzyjNc5XceT7FJdyt4syUpoaZzx49/tSSiktP+uz5bZhxRpVqyqG7Z2fbP1d8wtVXLTSgI+90Bp/qrlptFUXa/R4oUpkOmiAoBRogKBEHNMUqzHyWCOXr+L443NeM+P1PMqY8r5XoozpimgjX7mRVg0u4shjjQh3mjv6yoebngKF7P4bEW7Y37UxijYKOmiAoBRogKBEHNP85dMfmPxZc2P+PNaoijPqoox8ZUZ+Ycw/LLkhpZTSJY/MeMvQbLjg3OY+nFpbf3xfSmlE44ZB6vFClbpnEn7/dz82M 1xkNjA4aICgddKp7vFX107kv/cjPyvH3b3rDrMfq1e4DL1Ruz+/21k8nLDq2HJ+4qLWOe9GxrYcTHPzfl9JsnjvYenjBipNPqnxfvk/+OVV6/exu5j+s9xX7d7Lv69/Q+m+q6KCZJu+au+imIz+9u44OGiAoBRogKBHHNFURRX5Sr92+3brk7slLmm+7cFG5bVBRBoyCDa+5NaWU0rt+3rolwu+f/qHqne/f0hovnoyN/vrxr5abfnD6+dnOIg4A+kSBBghKxFEjjzVqV250EXHkKzPyOKMwH2KNfBVD1coGRt8dt26d+0FeOUa+juoPujrAb/T0sevWrSvH27Zta7t9GOvTddAAQSnQAEGJODrw9wfWluPlbfYd9kUmxJFfcJJfiJJf2DLuzjzzzKan0LNHH320HOd/j7rtw6CDBghKgQYISsQxB1VxxrCijJ/e2zqzfO31d6WUUvrhlkND+exhqIsLqu6NUbU6ZLriGO3u6zEbK08YNh00QFA66A7ka6KbvCT7M 4iuOK8d7L72lHJ+WVgx1HqOs1zvYQRN00ABBKdAAQYk4pilO/FVdjp3SeK5nrjvJln/tH9RndnMTf+JbfvZbZ2x77okGn+fWo2XLlpXjl46qrgXDoIMGCEqBBghKxDHNOEYYDF++EqR4RuMT+58ttw0yPopm8eLFTU+haytXrizHD+17prF56KABglKgAYIScTAvuPiEUaSDBghKgQYISsRBrW7uKNetPU9Nnhnf+uP75nys6D79wcuangIjSgcNEJQOmqEpuuaUWp1z/sTkfO3pqLvooovK8Uc/+tGUUkpXT7yjqek06lWLTy7HR798sBxHWWtczCnKfHI6aICgFGiAoEQcjJTt27enlFJ67Q3t73x301tblxj/zZ+u7ui4nRy7k+Pu3Lmz7fzmozxGWLp0aTluMlIo5hRlPjkdNEBQCjRAUCKOhhVP537jedsansno+pOjqrd/5P7ny/GFfTx2P44LndBBAwSlQAMEJeJo2GXX3ZJSSum0RSvKbT/ccqip6XQlM yvMEz1jdWlXx2K7nZ9kz1rGhHR00QFAKNEBQIo4GXHzFca0/HHy2fscR0u+73XUjjx7ySCLdP/dIovLYfTgudEIHDRCUAg0QlIiDsTLIlRZzPfaKk08qx56RSCd00ABB6aCDm3JCkUqfeXk0j13I15NDTgcNEJQCDRCUiCOgPNbYe/CJcpxfDj5fTUxMTA62Dui4Azg29EoHDRCUAg0QlIijYUVskUcZVa8PS35Xunx1QX4pd5Py58a1s2bNmnJ8++23N3JcmAsdNEBQCjRAUCKOOSieJ5hSStdef1dKqbOb7ef7FCs26qKMqn1JaceOHSN5bOiGDhogKAUaICgRR5emXERy6S3l+LTU22qLUXn+IDB8OmiAoHTQ0IAoT0QnNh00QFAKNEBQIg5G0vnnnz+Sx4Zu6KABglKgAYIScYyBGzc+lVJKaXe2bdXS4/v6GflTqIs72zXxLL0DBw6M1HFhLnTQAEEp0ABBiTiGJL/z3RvP29bTMYooY1LrV9fvOKMQ8QKKM PXv2ND2FKVauXNn0FBhjOmiAoBRogKBEHNMUUURxA/6U+nPHucuuy+58l92cv92xdx94oRwPKsrI5c8ezFdu0PLoo49WjicmJhqYDeNMBw0QlA46Vd/judf7O9cdNx18tqdjDKNr7lV+EnHY3XbeuZ555plD/ez885wkZJB00ABBKdAAQYk4GEnDjjWgCTpogKAUaICgRBwdmLIag7aspYb+0EEDBKVAAwQl4pimuAx778EnZn29Tl0c0u59oyi/YX/EO98NSq+Xeot76JYOGiAoBRogKBFHmnpHuSKi6DWS6CQa6cfd8Zo037+quxdH/137W+8vxzt37hz45+3YsSP705KBf16vdNAAQSnQAEGJOKZpFz+0u2ilLhoZ9VgjilGJFNasWTNjW77qZcXJJ5Xj+R4ZUU8HDRCUDrrPdMr1Tlh0bDnecMG5KaWUtm7r7Qnn0W3atKkcF3/X+ers5a2TcBdddFE5zk8Gfvmfvj7MKaV01KJZX85PWg59bhkdNEBQCjRAM UCIOpshPWA3yrnQrT5n82jsfvv4Xf9f8JCEp3Xnf7qankFJK6aF9zzQ9hVo6aICgFGiAoEQcdO0nDz+WUkpp5alLu3rf0888V46Lu98VX/9n0y5q6eauenXH6vUYT+x/tuP3MZzLuPshyjx10ABBKdAAQYk4qHXHfQ/P+vqeJw+U4xPfdEY53rHr0ardp9i9Z19KKaVVK5f3ODsYfzpogKAUaICgRBx9cuPGp1JKKeVL71ctPb6ZyQzA27IIo1jxkK9aKFZ2pJTSMa9p/WeVRxhVKyWKqGP6vqMi/zeYr89oZHB00ABB6aC7VHTKk7JOcYy65Sp5h1zYk43XnvumcpyfJMw75FyxJnoUu+ZeuQc03dJBAwSlQAMEJeLowO4DL5TjcY8y6rQ7SZivma47SZgrjjGsk4TF5dmiBUaJDhogKAUaICgRRwfma6zRpH7ewa5Or8eoe6iBG/LTbzpogKAUaICgRBx0pN8XqhTG6UIVl33TbzpogKAUaICgRBzUymOLfOVCM EXfkF6/k6mKLPO5YtuTEPswQxpsOGiAoHTRd6/Zp3oW6e0Mz3jZt2lS5fe36DUOeyewizlMHDRCUAg0Q1LyKOPKvKpfcujV75eDwJ9OUb2+csemL37qtgYlQrfW7iBYBMHw6aICgFGiAoBasXb/hSNOTAGAmHTRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQCjRAUAo0QFAKNEBQ/w/rzxE3tUtbZwAAAABJRU5ErkJggg==" class="background"><div class="game"><canvas width="400" height="500" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvasM ");const context=canvas.getContext("2d");const level1=[[],[],[],[],[],[],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["R","R","R","R","R","R","R","R","R","R","R","R","R","R"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["O","O","O","O","O","O","O","O","O","O","O","O","O","O"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["G","G","G","G","G","G","G","G","G","G","G","G","G","G"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y"],["Y","Y","Y","Y","Y","Y","Y","Y","Y","Y",M "Y","Y","Y","Y"]];const colorMap={l:"red",i:"orange",t:"green",o:"yellow"};const brickGap=2;const brickWidth=25;const brickHeight=12;const wallSize=12;const bricks=[];for(let a=0;a<level1.length;a++){for(let l=0;l<level1[a].length;l++){const colorCode=level1[a][l];bricks.push({x:wallSize+(brickWidth+brickGap)*l,y:wallSize+(brickHeight+brickGap)*a,color:colorMap[colorCode],width:brickWidth,height:brickHeight})}}const paddle={x:canvas.width/2-brickWidth/2,y:440,width:brickWidth,height:brickHeight,dx:0};const ball={x:M 130,y:260,width:5,height:5,speed:2,dx:0,dy:0};function collides(l,a){return l.x<a.x+a.width&&l.x+l.width>a.x&&l.y<a.y+a.height&&l.y+l.height>a.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);paddle.x+=paddle.dx;if(paddle.x<wallSize){paddle.x=wallSize}else if(paddle.x+brickWidth>canvas.width-wallSize){paddle.x=canvas.width-wallSize-brickWidth}ball.x+=ball.dx;ball.y+=ball.dy;if(ball.x<wallSize){ball.x=wallSize;ball.dx*=-1}else if(ball.x+ball.width>canvas.width-wallSize)M {ball.x=canvas.width-wallSize-ball.width;ball.dx*=-1}if(ball.y<wallSize){ball.y=wallSize;ball.dy*=-1}if(ball.y>canvas.height){ball.x=130;ball.y=260;ball.dx=0;ball.dy=0}if(collides(ball,paddle)){ball.dy*=-1;ball.y=paddle.y-ball.height}for(let l=0;l<bricks.length;l++){const a=bricks[l];if(collides(ball,a)){bricks.splice(l,1);if(ball.y+ball.height-ball.speed<=a.y||ball.y>=a.y+a.height-ball.speed){ball.dy*=-1}else{ball.dx*=-1}break}}context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,wallSize);context.fillRM ect(0,0,wallSize,canvas.height);context.fillRect(canvas.width-wallSize,0,wallSize,canvas.height);if(ball.dx||ball.dy){context.fillRect(ball.x,ball.y,ball.width,ball.height)}bricks.forEach(function(l){context.fillStyle=l.color;context.fillRect(l.x,l.y,l.width,l.height)});context.fillStyle="cyan";context.fillRect(paddle.x,paddle.y,paddle.width,paddle.height)}document.addEventListener("keydown",function(l){if(l.which===37){paddle.dx=-3}else if(l.which===39){paddle.dx=3}if(ball.dx===0&&ball.dy===0&&l.which===32){ball.dL x=ball.speed;ball.dy=ball.speed}});document.addEventListener("keyup",function(l){if(l.which===37||l.which===39){paddle.dx=0}});requestAnimationFrame(loop);</script></html>h! IjGREFUND:C005311DC5E978AF61D98FA2D8AEA14BDD58E96AAF0058342FE076D9246F63E5 text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} IjGREFUND:1BEA17861D1BE91F6B341270286B2F757510ADD8660B93AB5C813B96B4E71D7D text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} LjJ=:BNB.BUSD-BD1:bnb12xd9xc7sx9vy9z4r5r4veddpdgrvqx236z2sv6:17800630536:te:0 text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} 4DdMPCOQO(:Z2)CAaq4KjJJKEF@2 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobeM .com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:6382a05a-0c07-4b48-acb8-a0747d80b861" xmpMM:InstanceID="xmp.iid:22fbae72-2dac-4626-b320-f3ad1dc9fbc5" xmpMM:OriginalDocumentID="xmp.did:637de84a-0b77-4c4b-868e-c16c4c40c386" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676418198883896" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T10:43:17+11:00" xmp:ModifyDate="2023:02:15T10:43:17+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:M action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:8664d525-e9ec-43c7-b7fd-608caaf6dd0d" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T10:43:18"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M L <?xpacket end="w"?>h! text/plain;charset=utf-8 " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMMM :DocumentID="gimp:docid:gimp:78385af9-69f9-4d65-91ce-0f7a8ea9b048" xmpMM:InstanceID="xmp.iid:78cfe358-7bfa-42f0-980a-9b68518ce1ac" xmpMM:OriginalDocumentID="xmp.did:6e669164-8ab5-44f5-b918-8c3e26a28966" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413525768504" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:25:24+11:00" xmp:ModifyDate="2023:02:15T09:25:24+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvtM :changed="/" stEvt:instanceID="xmp.iid:63b2d616-791d-4a51-ab1b-20273dd3442a" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:25:25"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M L <?xpacket end="w"?>h! text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #171717; font-size: 14px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#e9e3d5", "#e3b0bc", "#171717", "#171717", "#da709a", "#da709a", "#db759d", "#c01d10", "#c72612", "#171717", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.cM om/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:5f952453-08d8-4721-a271-e3a2caccb8df" xmpMM:InstanceID="xmp.iid:c256284a-bda5-409c-8f49-749d59c0512e" xmpMM:OriginalDocumentID="xmp.did:9d042e66-4561-46b4-8e65-5ad34fcd3d2f" dc:Format="image/webp" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676413511967272" GIMP:Version="2.1M 0.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:25:10+11:00" xmp:ModifyDate="2023:02:15T09:25:10+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:1f7e4193-2fa4-4f8c-bb22-70a3f299c394" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:25:11"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:M xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:e65db0e5-1f32-42c4-b639-110623290c65" xmpMM:InstanceID="xmp.iid:b8ae400a-7b09-4265-b153-b550219572a5" xmpMM:OriginalDocumentID="xmp.did:acc6e836-5461-461d-92f9-05608c3632fd" dc:Format="image/webp" GIMP:API="2.0" GIMP:M Platform="Windows" GIMP:TimeStamp="1676413498828770" GIMP:Version="2.10.32" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10" xmp:MetadataDate="2023:02:15T09:24:57+11:00" xmp:ModifyDate="2023:02:15T09:24:57+11:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:90cccb62-fa1f-4aad-a8de-ea0c9b66ee3e" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-15T09:24:58"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAWgAAAFoCAYAAAB65WHVAAAUeklEQVR4nO3dbbBdVXkH8HWlFhRNDUIhTCGNtTD4Lom205vUEAdTsCaIlcBgO2BqbesLZaY0H3yDWqeT0g4vth0dJ4ShMBhsZ0DHWHBM6UA6HSCYvkgGpjUGrCAEY6NIHIvph3D2Wffevc8++97z8pxzfr8vrrvPPuusJPLMc/977X2mpteuO5wACOcFw14AAOUUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoBRogKAUaICgFGiAoH5m2Asgrp13fnHYS6BHpteuM G/YSmAcdNEBQCjRAUCIOKqOM6249XIwvu2iqGE+f92DH+V686GW1n/miRYs7vn7MsS/t+PopJ9X3FqeeNFXzeu0U6dEn6l4/3PmElNJjT/y04+uHnvlBx9efPXig9jN+dPD7pcd33n5m7XuJSwcNEJQCDRCUiGPClMUZeZTRxN7/uL0Y3/a/ny7Gy445rn3Ooe8V46vO3TVnjge+ck2jOa7f+FRKKaVb//rKRu/b9en2uOUDv/uJ2jlOqJkjV7emsj9HJ62/m/t/fEtxLJ8jX+cFK75QOx+jRwcNEJQCDRCUiGNMdbMzozh393Ol506/4aiuP68qWrjg5z5UjG/bvrwY/8WF3+x6jvx4k8/Oj88NV7qbY8b6P3TknLqoo2q+GXNtOaEY538XeeTTijaq1pO7/4F3t88Rd4wNHTRAUDroMdDkwl9Vt7xQ3XS8dZ3wm46+uBjfn24pPb6y5rOrOsxNHT+52frruvFu5qv7u8jnyM999fQlxfgbO28s/TzGhw4aICgFM GiAoEccI6cWFv36pusiWRxVlv4avOOfyYpxfIMvPXXnxx7v+7Is+eGUxrrvVu2qOJutvMl8+1+UXP9w+ueJW77L90918HuNDBw0QlAINEJSII6AmUUZKg48zylTtWsh3YKSj28PbPv+KlFL5fujZczT57Plqsv7WfuiUUnr0I093Pd+MXSq3nF6M/+C8BzrO0WTHB+NFBw0QlAINEJSIY8gi3GTST1U3VoyKTX92VTHe/NFPdDgTek8HDRCUAg0QlIhjQCLfZNILVTd63Ljj7NLjrWdmrKiYb743hbzzUy8vPf73V/9X13Pkn/1bV7yyGC8veSrdRU3my3axdPPna31O/vD/qr/PTSu/Vjsfo0cHDRCUDrrHRnEPcy9U7XeeITue3+JdJu9Sy55g1/Sz655m12T9+YXDqm/1rpsv//Plv0WU3fpe9YS+fN5l5Wcw4nTQAEEp0ABBTU2vXTe/r3Rm7Pcw5195ddlF7SfDTZ/3YMf3vXjRy2rnftGixR1fP+bYl3Z8M /ZST6nuLuqfZnXpS7RTp0SfqXq//z+exJ37a8fVDFU+za3n24IHaz/jRwe+XHt95+5kppZSm166rnYN4dNAAQSnQAEHZxdGFcd/DnOvmm7xbvzYD/aWDBghKgQYISsQxy7jvzMiVxRn5bo3cmjVr+r0cFmDHjh2lx+3eGG06aICgFGiAoCY24rAzozzOEGXEJsqYLDpogKAUaICgJiriyGONV735jmL8/svbvx6OepzRUvUcjdzZv/PNQS2HefjqTa+Yc0yUMVl00ABBTVQHXWVcuuZu5F3z4iWnDnEllMmf0vfVm478r655cumgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCcqMK83bbZv/36cYFm/5v2EtgROmgAYJSoAGC8jsqjbWijV9Zu37IKxkNrb8vUQdN6aABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGCUqABglKgAYJSoAGC8jxo0rZzjy1/4fjfKIYbM bvqHAa0GaNFBAwSlQAMEJeIYgrpvwx7qVyPt/XH2wz8ObRmADhogLAUaICgRx4Dkscbhfz66/UJrp8T+dpww9Zb2uQOPO5YdXX8OMBA6aICgFGiAoEQcPVa3Q2O2A0u2ppRSWrx/ST+W05UN258Z2mcD1XTQAEEp0ABBiTgWoCzOOHxZe3zgUHt83GfL51j8+KU9XlVznsUBMemgAYJSoAGCEnE0NOOGk2uyF77V+X3fe397PPWW/HkXd3Q897jNA75pxbM4IAwdNEBQOuguzLdrXnxM+fHvvLM9PnjwhJRSSosWPTW/xfWaW70hDB00QFAKNEBQIo6mvtX/j6jaM90vbvWGmHTQAEEp0ABBiTgqzHfnRpWp66pembt74/Bnsvf9fvmacgvdH+1Wb4hJBw0QlAINEJSIo8eqoozDX3lH95Ps+1LpYbd6w2TRQQMEpUADBCXiaKh6N8YRjaKMXBZr5Ds3Bs6zOCAMHTRAUDroWcr2Gk9d3h7XdsgVF/jS0pr3Za8fM /sxgu2m3ekNMOmiAoBRogKBEHLO09hrPuNX7gSvbJzy1q/yNz0cbeSQx7wuGAEkHDRCWAg0QlIijV57fhXH4K0Nexzxcc8vppccXf+x9xfiSb/7xoJYDPE8HDRCUAg0QlIhjltbuja52bvRJvhNkIE+wq3Dgk59r/3CxiAMGTQcNEJQCDRCUiKNKj2ONqXMqntFRYvny5cU4v2GmX3HH5Rc/XIy3rfibYrzhgQ/05fOA7uigAYLSQc/S6lKnzqm41TtX0mVXdcr/c3p7r/Hep58sxqfs2p1SSun8889vuNL+0DVDHDpogKAUaICgRBwNTa24suPru3fvLsaLFy8uxi9917uK8cuffbYYt6KNE088sTj23e9+d4GrbMat3hCTDhogKAUaICgRxyytfceXXHJJcSyPNc4999zS97ViiY0bNxbHtmzZUozPP3y4ffIJJxTDPNqYr2OfPBJFPPPzn6s5sxm3esNw6aABglKgAYIScaSZt1O3oo0nn2zfTFIVa+TKooo8M 7qg7N7drV/sGmPx7DfObZ/LbvlvRRivqOOKGjp+Rc6s3xKSDBghKgQYIamIjjofuW1+M8x0bebSxUHmU8eUPHVWMmzzZLj933YrXFeNDXztzzrnHvnb5nGNNdRNrtOKVPBqi2jC/dGHc/emfXFaMP/4X1w1xJf2hgwYISoEGCMrvqBW2b99ejJtEIPn7cm89tKYYL1u2bM547969xbF83OjX4xm7OPrPr+4MyrhHGVV00ABB6aBTSldddVUxXrp0acdzqzrkljVr1pQe37FjR+nxVrecd9VN9etW73Hy5zcd+ft9/Cc/LI5dv/Gp0nP33/+2ruc9/k131b4vPwea0EEDBKVAAwQl4kgpnfrQB4tx6/sH8yfY3XjjjcW4KsJoqYoy8gtq+f7hsouETS++jWK0sf9tZ8/rfcff9dWuz23FGim1o40lL3xJ/WfMM5IQZdBrOmiAoBRogKAmNuJ41ZvvKMZT56zPXpl7G/YVV1xRjK+++uqO8zaNJ2444chOgrP21pw4M ZlpRxTd+9fXFsbWnrS3Gu5/4+pxzuzHj+xWP+tli+Pp3Hfk3/rfP3zH7LXPU7eLoZudG1fn0Vr4nurVXepz2SeugAYJSoAGCmtiII1cWS3TzpLZe3Op81n0/rD+phz6xvf3Eu252NPTdTfkPX6g4qcFNPFmscdSZpxTjg7ffk1Ka+WfOd3k0sqfh+xqcf+ybfqkY/1WzTxlrZVHG7OPjSAcNEJQCDRCUiGOWVrRRtXOjF7HGIJ4Ct3P3c8V446f+thiv/MgfZmcdSCnV33wzSv7ukX3F+LkHH5vz+vvO+OVBLqe5LPFq/bvsuPOLpadOr103iBUxRDpogKB00BUu/8bNxbjzzufRct2th+ccu+yiqdJzL7300n4vp+c+mj2N8O677y7Gq1evTiml1PlZhTFV/Tts3bq19LjOenzooAGCUqABghJxVDh5++PDXkLP/ODg7xXj/OJhS1nskdJoRh/79u3reLzqCxny9+UXGhedt6oYr3/o0Tlz5O+7+23XFOPTX9e+M GLnkL3+z42fPV5PoY9Rjj0na+5zTQQMEpUADBCXimGUSv6m6LPZIqVn0ESX2yGOEJpFCfu5v5y88H2tUzZcfW33X5e0X7io/ZxDK/i3GdcfHuEcfOmiAoBRogKBEHFRqEn2M4o6PKvONJAYdZTThZpfRpIMGCEqBBghqanrtuvJL9WNoZ/ZUsPw7CV9z1tuHsZyxMv2Go0qPV0UfjAZRx3DpoAGCcpGQnpjvXur8N5nFJ59Seu4gbL73rcV42THHFeMLVsz9Gq6qc6vsPfS9rs8t+7xBuWDDG4vxoH/zueWz1/dl3ovf/+G+zDsoOmiAoBRogKBEHPRVHn1UXUiM7LYH3j3n2AUrv1aMu4lG8nPKXqd/vnTrjaXH33HRJQNdx3zpoAGCUqABghJxLMC2Te9p/7Dz812/7/Eb2uM/Om3ynp43Slo7MFLqbhcGC/ftFW/s+Porf+31HV8/dP2Nxbgqysijj8hxhw4aICgFGiAoEUcXKqOMnfObb8l72+NrbzjyTzCMM qGMUd1UMWr9ijbLdISnZ3ZH7hQe+XoyrYo88zjjmw5f0eUWDp4MGCEqBBghKxNFr0xcWw8c3tuOQPNbItY63oo6U+ht35LFGhCfNPXTf+mEvIaWU0soZPx3ofPK3z6x/X+k5NfPOet+g7by9PR6Vp9iNY6yR00EDBKVAAwQl4qjQ1U0oWZxRZsmWZnFHy7WPDCbuaMkf+UkcrfhnVOKGXsl3b5QdOzTIxQyZDhogKB10j+Qdcpm6bjrvqvNbwQfBV37FMfMi7hAXMiY8zQ6AvlCgAYIScfRIHmGUaXKRECbNM88805d5fSchAH2hQAMEJeLokYXu4oBxsPPOL87rfa9+9fze10tr1qwpxjt27Kg9Poj96TpogKAUaICgRBxAzyxbtmzYS5i3vXv3FuP8z1F1fBB00ABBKdAAQYk4KmzYfHMx3rYpe6HiyXZ1N6rUyZ+/MYzvJwTi0UEDBKWDXoiybrqLr7yy9xnohg4aICgFGiAoEUcXGl0w3NnsNu7WxUEXBhkHM J5/22jnHvv/t/x7CShbmxBNPLMY/fuFLhrYOHTRAUAo0QFAijobyuCOlLPpY2f1fpT3PTJJFixYNewmNLV26tBg/8p2nh7YOHTRAUAo0QFAijh7ZcG+DqOK0/q0DGB86aICgFGiAoEQcDMV//tOXU0opPXTf+iGvpP8u2GSnDvOjgwYISgfNwLS65pTanXP+jcn53tNRt2rVqmL83vce+c9sUjvpFyw6oRgf/ZMfFuMoe41ba4qynpwOGiAoBRogKBEHI+Xuu+9OKaV070/qe4vFH3tfMf7Avz7c1bzdzN3NvHv27Kld3yTKY4Tjjz++GA8zUmitKcp6cjpogKAUaICgRBxDtm3Te44MKr4tvIon4rUddeYppccPfPJz7R/O/vWezd2LeaEbOmiAoBRogKBEHANSRBkpzYwzds5vvvz7Dq+94cg/46RGHcee+ovF+JlHvzUyc0MdHTRAUAo0QFAijoimLyyGj29sxyF5rJFrHW9FHSlNVtyRRw95JHHwwcf6MncvM 5oVu6KABglKgAYIScfRR5c6NXBZnlFmypVnc0XLtI+KOUZobyuigAYLSQQeRd8dV6rrpvKvObwUfd8/18aJdP+eGOjpogKAUaICgRBxB5PFFlSYXCcfV6tWrU0opfbRP8/ZjbpgvHTRAUAo0QFAijiB6sYtjEuTfG1fnjDPOKMb33HPPUOaFhdBBAwSlQAMEJeJgJO3atWsk54YmdNAAQSnQAEGJOPpow+abi/G2TdkLJU+26+ZGlTr58zcm6Ql2MK500ABB6aCHrew50V185dUk7X2GSaWDBghKgQYISsQxIE0uGObHuokyWhcHJ+nC4PLly0dybmhCBw0QlAINEJSIYwjyuCOlI+NtK5v9U0zqnuf9+/eP1LywEDpogKAUaICgRBxBbLi3YUxxWn/WEd2+ffuGvYQZli5dOuwlMMZ00ABBKdAAQYk4oKG9e/eWjlevXj2E1TDOdNAAQemgGUl557ps2bKBfnb+eS4S0k86aICgFGiAoEQcDW3b9J72D2VPoqswM qbdm98ugYw0YBh00QFAKNEBQIo4KlVHGzvnNlz94/9ob2n/t4g6gig4aICgFGiAoEUevTF+YUkrp8Y313ydYFneIOkaHW70ZFB00QFAKNEBQIo5Zit0bVTehPB9lVFmypf16N3FHy7WP2NkxKjyLo/c2bjivGO/Zs6fvn7dr167sp5f3/fPmSwcNEJQCDRCUiGMB8gijTDdxR2ucP6uDaqMSKZxxxhnDXgJjQAcNEJQOegHyDrlMk4uEk+A1Z709++mOlFJKO3asH85i+mzr1q3F+FVvvmOIKxm+005uX4RbtWpVMc4vBm7Zdvsgl5TSC1/S8eX8ouXA15bRQQMEpUADBCXiWIBeXCScVO24Y/x//Z8Z7dDyL//+8LCXkFJK6ZHvPD3sJVTSQQMEpUADBCXiYKj8+j9ZBnEbdy9EWacOGiAoBRogKBHHLBs235xSSmnbpuxgxZPt6m5U6UbrFm9PsANm00EDBKVAAwQl4miq5kH+dU+tA+iWDhogKB10hdbFwpS6M u2DYOt5Np5w/+9nFQaCKDhogKAUaICgRRxfyuCOlLPpY2f1fn1gDaEoHDRCUAg0QlIhjATbc2yCqOK1/6wDGkw4aICgFGiAoBRogKAUaICgFGiAoBRogKAUaICj7oIG+2rp1a+nx6bXrBrySziKuUwcNEJQCDRDUREUc+a8qO+9cX4wfum8YqxmO28qObZ6o/xuElv/7RIsAGDwdNEBQCjRAUFPTa9cdHvYiAJhLBw0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRCUAg0QlAINEJQCDRDU/wN3nHWGHe1aMAAAAABJRU5ErkJggg==" class="background"><div class="game"><canvas width="400" height="400" id="gamecanvas"></canvasM ></div></div></body><script>var canvas=document.getElementById("gamecanvas"),context=canvas.getContext("2d"),grid=16,count=0,snake={x:160,y:160,dx:grid,dy:0,cells:[],k:4},apple={x:320,y:320};function getRandomInt(e,n){return Math.floor(Math.random()*(n-e))+e}function loop(){requestAnimationFrame(loop),++count<4||(count=0,context.clearRect(0,0,canvas.width,canvas.height),snake.x+=snake.dx,snake.y+=snake.dy,snake.x<0?snake.x=canvas.width-grid:snake.x>=canvas.width&&(snake.x=0),snake.y<0?snake.y=canvas.height-grid:snaM ke.y>=canvas.height&&(snake.y=0),snake.cells.unshift({x:snake.x,y:snake.y}),snake.cells.length>snake.k&&snake.cells.pop(),context.fillStyle="red",context.fillRect(apple.x,apple.y,grid-1,grid-1),context.fillStyle="green",snake.cells.forEach(function(e,n){context.fillRect(e.x,e.y,grid-1,grid-1),e.x===apple.x&&e.y===apple.y&&(snake.k++,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid);for(var a=n+1;a<snake.cells.length;a++)e.x===snake.cells[a].x&&e.y===snake.cells[a].y&&(snake.x=160,snake.y=160,snake.ceM lls=[],snake.k=4,snake.dx=grid,snake.dy=0,apple.x=getRandomInt(0,25)*grid,apple.y=getRandomInt(0,25)*grid)}))}document.addEventListener("keydown",function(e){37===e.which&&0===snake.dx?(snake.dx=-grid,snake.dy=0):38===e.which&&0===snake.dy?(snake.dy=-grid,snake.dx=0):39===e.which&&0===snake.dx?(snake.dx=grid,snake.dy=0):40===e.which&&0===snake.dy&&(snake.dy=grid,snake.dx=0)}),requestAnimationFrame(loop)</script></html>h! text/html;charset=utf-8 <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content=""><title>Bitcoin Bandits machine</title><style>html{height:100%;background:#3b474e}body{height:100%;width:100%;margin:0;display:flex;flex-direction:column;align-items:center}.container{height:100%;position:relative}.background{height:100%}.game{height:20.3vh;width:20.3vh;border:#3b474e;border-width:1px;margin-left:auto;margin-right:auto;left:0;right:0;margin-top:22.7vh;top:0;position:absolM ute}#gamecanvas{height:100%;width:100%}</style></head><body><div class="container"><img src="data:image/png;base64, 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 TkSuQmCC" class="background"><div class="game"><canvas width="750" height="585" id="gamecanvas"></canvas></div></div></body><script>const canvas=document.getElementById("gamecanvas");const context=canvas.getContext("2d");const grid=15;const paddleHeight=grid*5;const maxPaddleY=canvas.height-grid-paddleHeight;var paddleSpeed=6;var ballSpeed=5;const leftPaddle={x:grid*2,y:canvas.height/2-paddleHeight/2,width:grid,height:paddleHeight,dy:0};const rightPaddle={x:canvas.width-grid*3,y:canvas.height/2-paddleHeight/2,widthM :grid,height:paddleHeight,dy:0};const ball={x:canvas.width/2,y:canvas.height/2,width:grid,height:grid,l:false,dx:ballSpeed,dy:-ballSpeed};function collides(l,d){return l.x<d.x+d.width&&l.x+l.width>d.x&&l.y<d.y+d.height&&l.y+l.height>d.y}function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);leftPaddle.y+=leftPaddle.dy;rightPaddle.y+=rightPaddle.dy;if(leftPaddle.y<grid){leftPaddle.y=grid}else if(leftPaddle.y>maxPaddleY){leftPaddle.y=maxPaddleY}if(rightPaddle.y<grid){rightPaddleM .y=grid}else if(rightPaddle.y>maxPaddleY){rightPaddle.y=maxPaddleY}context.fillStyle="white";context.fillRect(leftPaddle.x,leftPaddle.y,leftPaddle.width,leftPaddle.height);context.fillRect(rightPaddle.x,rightPaddle.y,rightPaddle.width,rightPaddle.height);ball.x+=ball.dx;ball.y+=ball.dy;if(ball.y<grid){ball.y=grid;ball.dy*=-1}else if(ball.y+grid>canvas.height-grid){ball.y=canvas.height-grid*2;ball.dy*=-1}if((ball.x<0||ball.x>canvas.width)&&!ball.l){ball.l=true;setTimeout(()=>{ball.l=false;ball.x=canvas.width/2;ball.M y=canvas.height/2},400)}if(collides(ball,leftPaddle)){ball.dx*=-1;ball.x=leftPaddle.x+leftPaddle.width}else if(collides(ball,rightPaddle)){ball.dx*=-1;ball.x=rightPaddle.x-ball.width}context.fillRect(ball.x,ball.y,ball.width,ball.height);context.fillStyle="lightgrey";context.fillRect(0,0,canvas.width,grid);context.fillRect(0,canvas.height-grid,canvas.width,canvas.height);for(let l=grid;l<canvas.height-grid;l+=grid*2){context.fillRect(canvas.width/2-grid/2,l,grid,grid)}}document.addEventListener("keydown",function(lM{ ){if(l.which===38){rightPaddle.dy=-paddleSpeed}else if(l.which===40){rightPaddle.dy=paddleSpeed}if(l.which===87){leftPaddle.dy=-paddleSpeed}else if(l.which===83){leftPaddle.dy=paddleSpeed}});document.addEventListener("keyup",function(l){if(l.which===38||l.which===40){rightPaddle.dy=0}if(l.which===83||l.which===87){leftPaddle.dy=0}});requestAnimationFrame(loop);</script></html>h! xiTXtXML:com.adobe.xmp " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.0-c000 79.da4a7e5ef, 2022/11/22-13:50:07 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriM ginalDocumentID="xmp.did:b0db53a2-b8db-498a-9632-83b5f082f5ae" xmpMM:DocumentID="xmp.did:C20E3134A4E311EDBD49B1772AB5B2F1" xmpMM:InstanceID="xmp.iid:C20E3133A4E311EDBD49B1772AB5B2F1" xmp:CreatorTool="Adobe Photoshop 24.1 (Macintosh)"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:ddfa6129-0a5d-4676-8f0f-1dd56542dd08" stRef:documentID="xmp.did:b0db53a2-b8db-498a-9632-83b5f082f5ae"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> DjB=:BNB.BNB:bnb1udyqg067wr27pdnteparr3cvy365hmc6aa6z5k:47123739:te:0 text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #0000ff; font-size: 16px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#ff4fe2", "#f8f7ff", "#ff4fe2", "#ff4fe2", "#ff4fe2", "#ff4fe2", "#ff4fe2", "#ff4fe2", "#f8f7ff", "#0000ff", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #222222; font-size: 15px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#222222", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #323232; font-size: 13px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#323232", "#ffadde", "#7ffcc4", "#7ffcc4", "#7ffcc4", "#7ffcc4", "#7ffcc4", "#ffadde", "#ffe481", "#323232", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; s = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.classNameM gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAJY4AAwAAAABYBwAAJXZAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cBmA/UGZFZIO8TACQAgqBynyBnT4LghoAATYCJAOEMAQgBZQvB4oQW3BHcUN0w7TOCb9uMgCga1ObW1XngGzuMLNymwimLXm9MziajbB6ouj6z/7//zMS5IihCbUHPL62blsMYUKlkUZmlNDpaXjV6pqVpwAArLeqootw8/KeDNDKuPtGH63RZN7KPFPoRuUolWpLS8u0KitVFYiqXgarref8hssLDW1Lad9g27ZHnXPM/cOs0nQ0wlrYZq5lraVVmi7vVjaqsnO1TrU9ygjttFah0jm2Slya1m952tITLT2Guu499uN/BBcBMQJeaw67OgVxOyG89jGGw2a0CH85JglM BJ4fUc+vPS/kNUhkhXuSA64B9d/T/xsRnCLzJIrBxGSNZOXktItuq3jvwDg849NRDD7K8wpHuFDMqKBgJISpmTOnAkBDBkB9RMSSSEQPBDIZ0GEhixpDBfDsIk3suWVFLNAEM/r/1+8cWBKqgckgg4Sb8Ci/a7bSKDEZiPnL3qL/9A83pv4OLGLwkL8kRQ6KQC1qoUIMqUnEmon/dvqjVJlpZ6Tqh4pgVCsETSBDRNvb8O63/X1vaArLL9rKtJApQY/r0MF9i+JqLSO8NADSEOmBgkS1LQ+9U/27ju2Z40hkKA1uO7fI47ZgFhUE8IIx/rb0/SWdoWWg7dsKGhNe81mlZst7ng/8v1d7u/P/4BcoeVd2ApaJKoWUQKolUuaJsa9ONbRBtkq6PZJwfjuMQIIgGGt0YoLl164AFG1sDY7CNjShZwYIaI6IMqqRKG5QwCp8yCgtfzLcSFXx9I/LDfzhVdZ3ZlOaEJyEAPO/vB3ouPPhABSCSTRWCrtOLn11mAf0sHeqM sZiw7yc5orHvgCqH6Drgnywo8xFkgkv47qX1ArpDa3T1c06uw1e8KePnAgPz0q6SUDIBcSVbvlRhwhqBmScjynzr91/bDTLfrMpcpgCCOTALbAZ5nbsGcC2r4iPGl0jy4kEH//X56m7lNXlI64S0I+Z2tETWCHKDRrXB1CgA+YJc4jCCmUO/TVGSAQxjwRC8C/n9fVdd3P0Dpf9LlU25QJrsjrc6gJJdWhynp770PGO+9T1gfn9TR/6AKCDeQdAFI6RiCdHwISYwJSvYh5dL6lvQPUseBmEbSjaQbpbTet8gptU3ecjyl1mHO5DGlD1O2LcuYaS1NmexhSQGDbrrZTj2W8EUDDIwDpPh//APVe5o06WMsWq35Vqlg48uA574Z72iutDcLR9nkvkjua9zE7RlZ47Kb25sHRFcgOeWUcxUK0EhQta1VFd6UqFo1Oyk2qIlovkd+8owEiRSs5PnuUUiEVliEUQiNtJ9RCGeQOCROQzQ80By6EJ49DHA4+7L1mu4IV9tM 9M8b7DqWaFeFdldIzv307+/UNld8HUyYwjhHgBLRmyBzKzgAhjTmMXY4cYhJQkGTm4d0F1PYjeFsgWG1R1FoLNDA9xLN/11L/A78VskrWumTyD2bn2GXzKgk1syQja+tl/djvx9cZYBClMjHJFAUBvft6fS8E2JxegnYPJ4UIkYStm6Ht/hX+rZjLq3x2hmByq6ifoNljbLbo0hU80cqJ7DdzOiUFIJUNFCjBc/C0luw2EADVoP6Hn/m3pwFfu1lY+42f2MgEIfeNctADuNXepXQ0SRSDijxwt9vriYV6Qo4TagABclw/JnrfzdebhmDJ/hdeZf8hEDq67oB2/aUZcHJfA2AJAgEAaOIj5qYDkILAEQcZADviYAZMeZTvxKRYrynpyXhuFwQh1gC4AJwf0BROU8gCl75W83NQI/sbxKvB1AY6n/WDu3iIV0OMMcmlvBxyrtss4/dQ1mwdWupy+DCaYc31N8NDPB2uo95mc314aK67S/3fU96hZQSyq2rHmOwit1hM MdWRMtl2zY6o0xEL73O8078Zi6s2J2Te7jxfj4FTxa1xPtoxP41HCx3OQcWeOy3g3J3/+SNYxRRFjuf2fJyQ/0+2fKoB/NMXg92ldNJltE8fTcRdYw/2CwjLUzRjPTKaumYV0Fry2iBdZLxf5rOgFxUJLGCrRoaS3JbeVurW0rtJFZf4q+1k5u8vrLT+5gugKU5tbunkgH/L3syCEnsDhOCM0gc+S0YMd7qVV5pmxNMIS+SnDPDLWRPSANo2I7I6UacGQte7h8dlWntk2lT1UXEaGXWhRieNtOaeyiJ64l5YRmklZDJ46WZq/Vy2QX7GgFyl0BXs+hvhkhpwPWQSiR0m+Jo2N/M5L03iGruvnKMKih/Cf/jg2zxPyQbjvNEWzCEu/uAlKompc5TEYkwb9FenoS2kCeRM21nBlXkWbyhgoCdlucfCNjnWuLLAcvm80AIgWOp/IdrIjsl3KCaeupoc0lkeWQieh0eiIw5qO7BMlyTeyLwqPOIKz0LgwslR9iEjT/JCM cxJhbcDkzg3l/UZnXlTSiMF+v01aWmSnLT/FpxWZem18mpRWH8NpW6tvow4Yo2CrsaDXrQd4VrQGomw3Y0PVvevkwBz3q4GtSSOQ/XepmXALewYGviNMEDh+9z9PmvMYusw9g+pyhgQv21vFHQiAPoglnG1QsCbCseUjDnmpOv/YRCmpvkZJQRlK4cm09kru60OvLPJEDw0eAEj6sBdg4Y6npZ7Us43sgr6Hzhfj0F5S3Y+UN3kojCChLJOr7mETUzZVPBTFDKzfIde4TMX0zr88WHvsV++TWEddITiOLzk18eBGWAcnAiM0YiEIituibXV4ACGBMA67xMjcpswyy9XWpovZ6eOguJ1XEh/1AcWlkZpcaWcq+lP3FYCkyF5ZhqDTtz8rREBWY8Tx+oGlWyj+5OwfxpUE3cJ+HOw+B2ToGcoiG0jQzOmzmO3+VuF9WBrvJBcjcwa8aHGU1KQDyOzDba2oWa6w8M40ourbtt1R9jH9XfymlEE7a5EdTqoZsbqRtIHfM rQRZ5H+FmXANw/4hX/wN58yRm/S+3wB/5VKTgOPMB6ZWYGnlLbDajRV4n7jy6W+UfmCpVbJjijAPuPCU1oeYsnC/8x6m40J4ZR4v3YiiqH7gT8jUwdloXCj/jrrpoTumPvPYj6rrL9J9wMWOmnXEkAapcVSsChC5+LuLv6jOGqV48bE4+Xbhq32t+w8plGvvPkXOZfh9eXWT0Iob/JAbrdsjdo3/NFLzjKgH5yJ7O4ME4SPbo3zOVkrfjw5Z1ID/TfUHqKyP0tqizFEWzBiuL3jy7U7prDrcXQU0p5s27uM6TGpzFM0ocJHrqgPkx5R9XWuZiTKHOJTq+T852Fhy6zPL7WZ+K7igrcE1yTOJct26INKPo9GuAC1C/QXSneR/fP/L0U+6rpMH7rbhTakZsN42qaFCHLeZB4A6wuyw/vSuNfyuUn5OdM7RaSdlxlLCV9K8pQYbPILy3QQj+toGBrvb1b+LTG3YqaaWK+2uEwSHMfHKngdZpabMDTami8/J8xNOn3HWM GopJ3b9ww5spqBs/pQq+b5n9ppxq5d3rz8Qr7oCwxltNZ68beybc/+T2Xf4N5d6/3lqC5kp5V2sVrOUBmv/GaRUTq0anReh75FifP2FaoJIMvvC/4SqZjqIc73EnrHYXNwd/MFMkTy59g8VD25LVE0cHq0QN/ozdO/mh7uLezhTdak4G8XhCSH2/4kNGPXitwQQRaLBFEZKUP+mak0vu7+OwKOdvVNtE2it44r1ejwxibPvCCXuifVIRX4u6K7QUtEDFiEWPUD6bP+xskO5f4iAbfWY/WGI7JjXJBj/KZSO+OWbgDBuaA1DEt8bHG3S6hDc/eBkd4IkLxFN8ya3Q7DMp61QXoDZ4QJKaUJtWrymr9n3qIQ4XORgr1pMmr0MJ7LcIx3hVySw4BqpkhbWB1+Hh5PdQxMch+x1/yZlSkjiyPpkX+oyDC0DxCm5O5CPcxMnER71i8v3ptTDT4oAWdgxqGVLpDdsNWNpELTJG75FIhYOmF90lluVYagHqZA5N7koTu9+BM FFOUM5L+kU7zUk4VS4SZXFo5yKUGupCwPKi/Bg6ml2ks43diA4uvWe9jjuvXQQ+HE0vUPQf4Ir5TwaD7C/iVxWEBmUzX/YRFsbQCpyWdFCu61bf3Sea47UWHvtACwg+XfOP+uw72Y4Rr2jmW97rl6af+vbKLghnzVAP6Hx/WXYeiWk/3t9pp35pKsbK3m4Xt9FbB2QLHQhWvOVKhayfy2oktdRHHj27hk8FWcFnyXAC4rhe/h5F2Lz6FUOoXi9uItKdUqRxNVDxhgUGoFbBuls+QNrMbpQm9Hs+7mIXRH/Sblo4pQInQQycw0UefHFYoPC6uzLf72SbnZjBOxzvR4pmkQQOWGLLIaKgkgDUgeH7D6jQnU0FiDbABbFEim5ugOmVvaprEZlNE5IOkxXtagUoUbslTWEKAhV3w3JwAFUXDz5Z0U9jL+69VS/DInbYVgag7HsBVJ4G8LU4DDZK2MfA/m8Yh1XPzSFHHRjjBhEkngRhuloWs+NNGEPIKnGTS5cLGZCyuM 63WkxbpikWXewkCo96eNBXZOBisLFhDPYPSuF+7ZXBEvYU6FCf6HwwvL/ekrG+terLGMUumTyg+Ty6ZI0x7VyinNYIVK2JCUuW77ZTcoehc667K4GLbWOwEBn1pz05yVAjDSzZMq23X6lytV46LlP/RmnrwNz9rml4F8ImVKbc1LZvUU0qt/iOhzC/H+5C/uFY/61RIsKvYYj/5mjeEB4Ag4owiLCIuIMZeYk7jMsrsMOzElukwN6nVCh12G5WQ6Eh8C1uBbVWl5tebXl1SUuN0lMWFToaPQTHiLhOnhKAh9bHBEE2xeMAADZOSruRgmRYLI5lsqx00EnlLtOq9mHfo3jGOnKjoq7UUIkmGye5dbLc9gpF91W57Vv8RMY6Myak/68BIiRZpZM2bbbr1S5Gg8996k/E+rrwJw9Nx58REjJc0Ppc/MRMC9wzUgmShW6FpGDVOOcWus6XPcUS2mTQL9tipGXhGuL+89hUuJoKw9EYkXlrRhHRuQg1Tin1poBRRcAfhMM cuEQwrgJwzpzgvkyUKnQtIgepxjmodR+uZJqdxU2g3zbFyEvCNeH+87ZYNMuBYETkEOBAKwNrsRZrsRZrkdbiXC3vanlXy7tyoJUocdlFxQX8JjhwiWBcArh3MhFUDoyIHKQa56DWDJZgJAd+Exy4RBCbGAmefMfe6Wc4f9HGmynDGlvsVeSca+6p98b32Lj2OrHiqJ/h/EUbb6YMa22zT4kLqtV65mO/J9BjwkxPvQ01Vrhk0yy0yia7HVPminsava1tQmLIVHeuBhkpWLxJ5mbU+LLKwHC/Csf0tbUymkwqPXgbxaQ+ut4gJajhVjHXbbyVRaj2MLi8R9gs0B+bYtHlFme3CBDA0SApt4JcHBqQcuQXo619L1B0AeAPwYHLBOM0gHOROeEkfb1jCZxTTuTmYarrKjLNzuLmPvpjUyy6bHF2fmXEbOECrhMOBAdaGViLtViLtViLtBbnyoHrhOVdOdBKNLhs5cJBf2yKRZdbnJ1n/B04CV13gHfKhQOtoMppCEYM qZw76Y1Msupxwdg+v+k/xtQ2JHnJggxzdlKh88HLHxsLgBSwW3e4rDzQpX2wW7DH1N7mwwdof4BXfLbxQ/5gR3Dr2Phpc7CMC+jAfPXt37Qo5FN2evHQOTF6D48NCCBMzQKyPZEJ38Ei2q1hPwtnBEPCHKJgEi65T//O4hiz/quhseYZ7zrCC0siPdSczCx2pu979TkWmoVKE1L3DoiZpvr8Ro6cYx6OuwEcXFoYmmfc7EvktbuIPoxbirihaFFkzGgybGoGXZrZMG+QpcvZcde553tcRx4QlpT5GCDfOXKtttMvhljV5MjY9QJGfHdTXFm9fRD2dThj+AOGx+6TvwqMf3HR+j58Vel1HvG0R183phBEPFBbeO30THvvAbeimINNBnO8ZnK/K3rtawhe28KD9RQzFbmlYbL+JlXxc/gGycUUYB97DCrch0feuEtNw/E5P/d1RS+1DB7xC3STcn0YwgVMHl2uwd6+R4lUWHe79HLVOsCkE33eKyuKPyH8Qz9204n9M PibGw5K7h4HtmKZODHoTuD+82xCDLLIx+GIfvJ9C7isjc8L5dwx74nN77ecTdUtjrWuzNaxd03OLDnZ98rxWr6CkKDg+vrHApxSGhVqH5R+ATnlx+/9JsQWkzUINBWNcnvWaCHAYhAEgejlOkqaBdH2D1z+mUM9sKrFzaHKVh59D0XU9VzepTILEfBzRYp5N90r8aBrFiwI5d0UJEQCEoJH54IeyydHQkhpzEB9KLcxKxrlW7xCB7fY83nRBu6Ru5c51jnf8V0Qn3tuBBsi/MZTFk7XaE7McE82PZ9Fesx91L5gQaPHnqgfcb34rxuEJjLli3F3OSKHEvRiTKYTDaW8fOr3DBBbr4FRfuXoSKkqCGzuwzKuzhIi5/4LC4rd9hGtzle/0ZbkcnlGdNZrb3rEafIyY498jzOpZpYMQ0FxwxfV/L1D/yNC2REZP2K5Fv4UYmiUFTqg91V53pItQWzqJge6GbMYb3/6xIxJSXlhnbkX9A0yIaRmpEFetFe5oc2W7qIopM Jz8xFiq8HQD2EzKT7K9XSFtqF7l+/32vB663EQTAPLR2TxBK1+aH76NRT2N3Qr8JwqatTlAlj40QemSU0lkghya4Dc/R1UHpl8bm35/H30/XiOtjODkNcgfET6ODLSjiGG70AIJp8AMcbFGglQrbI/tIw58pKS9ybeFHx3nIVLGMAWE7kbsH0Y2yR08tu75J6gv0aVDxD/fZfqd7tAuZHai5hxrgHK39x9Fs00U6IX7sq89utB48GiQf3I20iHIZ2xI6g37re/gj6hSGLtpRUboWV93F2pUHcDm6VmlqcfUhR4J9SCmWOud2/h3flAwWG7tTM+nk8OucirolOFqo7Dhg7+cxRxu5SR7wQNxk3rKRIugUt68FGYSVvurTUUg/yerrirU0lNMxGsinGAV4r1uySZcqVr4hSemE/qhMkkWmgDUv2wc5GySXUfZMf2py0wF7Ekkwzdtsby802M1yZakP9Fz3+buj+RbGDnSe68sjRxU/PdM4GpOpylBNOGyTk8OoDNdwM 7J/cLHU+S8LvWaiotnm6F7OCVOowCOz586MRVLYXEkQANv3LUoxBz6ha6W2VH1O52Wu64FyG/J1e4LjL8TzWus+lgfXtpidfWsHSe6iA7N5uMi0Q39m8mR3Ouz/bVk/CX7eHxhv33L8URrrsR5JsfZZGH8jlrga1F1LZNG5WGe5HNZS5vIwiCMqxlWguAbDWD6eP2jvOKqbO0IC9QKbBQVAuj2eSVARy23oS67j5OUz5tCFQ6HdlQNzrXYMTmAVZiP5UMrcJNTBnWbQdLN3aNqo3tIqNuy/0OfEBlKoPO76+wmLnnYB/jV4a++ci1Ax/h4sBDDuk5OMDkjTF7njOOhuThmP573Rekrfbe05T+9eF3x8cMr+Qh1n32TrjUQXVWId8GOx6z5WF9w7Z8lVd1bFmWyiUN1aYwzMuy/AIXXYTX+1OMbt990411NN1R22KUfDw7GyD0EUTBC5rgE35eKw5+ZmEtIV3uxod/rv4vSV+E5Ge5shjxvPuEQVjQZRBqIqODuhzM E6fByYc4GiRuzCYMxnSImUaedECGMjpcE+opMDOfS3aGSXabOFFrtZbSqDtkuyGsDb7WjbrefnbNkeLimmaBv3MMCySsDL4STQaNQNMdiyHXh+wXGxRKbQ2x1QGRgRKfdCNwyOlqhe05gcL1NVvQr2WjFY7dl5twRNjvBGBjREWsELsBYlUWGcNB3feYe33evyC7u4UEW122gD0zodDiS06sPO9v3s23Pn6nL4cx4WIzTGNBCiu3OMtqboWf2YHPLbxLzguLx/sqKfkVjn9YD+9GAAxwOk+Joc/Zja+sv4qaIxZypVIf2g6mhzAnQ8/0jBvEHmdfLgPJnQ4ZSGaQKB6NSCJsIw5H6IEJ5KPVcG+nKj60s5Y8bgy74vitL1cwssZsddRO9APQdfHQ+MnSrPKPx0xL8h/AVcYd0bQmfnZ/kouJdlKAXr+wCPj4XFblm1X8XvoQbc+HT8Vy82JBSP1/imnYTPjGvj12EKJ5R4y8QJEJCXMvmJMcTmlLJ/VFYC7BjfahM KQ15P8rh1K3cF6nbfy3wsdOFP6mo6U/yj0CpOqS0HnkumWqItZRe1mH+zcYbkP5fpYQDZeJ1711JLJsV5H22ikn3UviPPgCd3Fua4eOAu4746/V0yJOH+xATgLlKOB+MvgXZ6afQSdWc+K/W92y78wq036Sk/7e0Y8RaxXW3HjGf5DcRvwDV58q7gUsEdmCiQgHeN3cC9jVevjBc2L/PoVq5lfA7cIdX2EKhXd4WmoytRW5P3J+JLcfMxTWOzipr7qvUkHS/99L0trd7YOpbqOYOlA+vRq/NSrqj591cbe6Yq5amh37mF078aKAlb27Hr0O3UbexT4pCeE6JXPaRXiRz/IKYf+99w75G04wnmak6pZQVkEqxFxk4DeZt8L+nJwTbhhF8IAQCdAdgAcAGQGq5xJw+JRefKQ+QVZmNxwcNF1mUsojn4FurXyyTSz+1AqbAQvw6zYxxB7kRZXlSWQeN8gGeu8s7yea8ISuF2Mh2wmzuMOOEqfQumrEwWNmGNwzvgKtZM M8nsPprRYgCebEbY739M3CVd1xphlh3Pq6Y6FM8x42Yo96NcEckOkWafInb5O2JGbSBp7XOnd9AyohMpot8PzTAK9cr+/iJFDIoWDZZNQYw/djhXPs//vT+ltv12Yk/yssYRxNk1KUkMpG7/ZG/fwNa8kTJJsvOhZ38dfkNzzKJdVSWrhzS5nNGvPs//7p/S134kXymmfPpYimUBKEiMZG7+lI8Zcvz+P3PC9rRAu+LFrESkSy/AcW6gO6WakVrypEldISF3SE1Rq0rbaoJsImqSGySolzAE97ffFN9wD93i5hlLXoPhpd3fUxC28pE3pAIbDqHrxtam3JoFJZF9xE+/S5HR0mJaQ1Q+ngTQvPq9sWOLMWI5IwKZdYO05dvc5L0UM4xSe+qyr4lE8XVGVg1+qnmqL21w75Sw4wQBXR+hZJQlIAtKp+Kcv3StlnZKTR4mi+dV8E2NPqYVt6lfFgzaiQlOEsp9NmeA8jID9bHc/pbB+DQVmgQmEw26ZE5gSxdZPGFUM yUEtDNongJNvGQeKzbkYuc8d9uwLP6CNiM9p4+tO1Tt/sP4AZ4uuHLopTSPncZJEIQbKt1wvx0m4ZTodujbAvUq+gArX1EYuuZ6ygxFEA58IK4WBjWhCjkQipx/VmJf0nfJbSYdroVvuP8Xtcuhmk4VBSv9CdMfZxPjxpM0bskNJ1aX8R/SI1L0YRMMXnqtSR9/eQyCEFVgWpOJg8IHxoU6NuwARRP4+aiuq0veMHZCiXG4wmSBhJgtVGbFFiv8idVR06bq11T+XTg8oS84ItGwTZ1t4pJF+IZhKkBWk3SBrUbH9H09HkYuWj9TUWfVFQksX1wnz7Drry5ncL9VtFSsxTlfMl4U4LPqI+voKFVtrhdvvTSf38gg3CoGtOPG9pBnwVOk92TwIed1UDvg3ekz3t8107FmsDwLWwcbEz8nYevfJjJfwBD6wA8s/dZ7Z3pT/7//XUovrH48QcwKXX8vEOUkg+MQsybONixHP4afSkmxWcJ1qxZf/fxYidTsuys5x0ALdM lx+qxP/SUuN9XBms0qpsa7mIFS0IEnE/uKVwYUE3tCCXHramSTbIH6Rh49XcLdYz7yhWsPNM3WaFgLUQH7jI+7bf4eUZVi6/ojB4GINHMzVT/Jmce+r+WuEbUHoObcxhX3p/7FisIxgauTvwyzk9htCOUdOVfw31HylczC8gqLnEO3AmcghmSD9P1FL3W7SS1n+Gsw52JIOrvc+J+haH0KZh1eKbhdWOjluY0vGTyKmlZ5VM5ThTTUDlmyaVQZMosVPaUOJXoS2NWC9YR1BeamDmTlzkvY7KTLLN8EeQQO6SbWKq7NRYYaFWkSaaCi2KDoUoodsI8FkuaRpNZvyBuEjtDNC2DHplHMXqIzUhm6E/xhFfGcIPXPIbqGTcmN8KNdnlH3vmH5LqM7m/3yw0zgxpTIUQ3aUUfV4oDzRafKJ4Uo2K0SNCmu89XIIVCzipcWvHY1XGmrNNIUVBZFlJqHksHTllqsBzdZlWD5RkmF5KkkVQx3MrciNbkjchRRifNS7w3cj5M neFpL/PyG0wm9g6GNp19nOYY+VsYdobwvSu5j8j95SjU6TqhFx5aJjKka/5BEqUaoF2VVfDoTg3XKagK9T6WMjRPYp8oUWloL2ZmhFMkMK3aTfDJhPYM3lZWrUzjT8sB6hlJqFvYyNEeLffnQPtsZEGtlR9CF+0luEt1lqgUN9s9jfalMVFE9obcg5tGeW7sctU6KhPIL8PNOQH1RtVm1oVWlIXWPBzYHtZHtUDLWeyM6JVxdmJAm9FqWb2zwVKNlHVnoGZHpqUaoZzVGpjOVWGaVbktZKDkPcfhOeDGcxM3yqSkaYblncwY7kVXTjsq6KENj5Cb52gcsc1gzWXeE8jHkLm86x3OFqVqVmErmyqxEZJArJyOe2uK5wtA6SQ90Tkuh5qlBbBbJTDsYcqzRMscew/IgmIjW9sDhxJtoznIOkrw4KugnfY672IsDXN5fnMgXRqzlcKd6ZS1HPSon+doulxOs9MoJ2zNUJ3ZmZ4rzbY53hPJt5OpLLAiQX8VZ0SR/EbcM UC+S7aGySE2jor4TlGLHsrGBSTSAT8FxnUpuaMazLfOJiOt+5E0ROVWg2HVhLYPeMiCOTtjslxWQTEbbe5S7PFEIli2hZnCn0lCkxRKelVIzy0Dv7IcbFbMwQFpPRxWFrOC3/XdzTOlH+NOr3RH5z19Y+L3E7Sbmv80ilraWKU4WhlpQ4MDlR6Gmx4kEDx2fjKscVTBpzGb01VkxonjCk3mAhIcuKy4oLc1PzGRZWKp4hGy6XTbAnVeiao0u/xJuMS01bsiOxVK458pNvYs81ueHxZWDL0sh3FJ2sQUT05FHPX8N6hoAfVHBB5BQYAVkzWBnFppiN5jGOx7H/PLMwneLq/cgS8qwWF7lmcZnil2c5fPZudDJnt7s/xjenjqaESa2e56SzXOIv17ycEc9qjb9f8ciYNw9+P+yEMhNvQOJ6i3L9IaFms6Kg7HsNLO6QE7joLU1VZvKWGOFg3laPCt6f/65w6qdoF6mJq5y1Y6tgrYBdGApl04BKLmRJ8HhKa6gslNUM ZMnOEh4tOYPEw4tpByZHGZKliMbyOSzKoI2XN4CwjDevofEoalsw00pcIRksmO0Jo4mOlLaVfYkPC06RgW8EmV0psGqg4loaqY5vSNllRIFVFyKWyLJssFWiKEHK5LqsleDZsWbZYU2BrUpXPbHGaMUzHOS7Hjmb0o5TjyxueZSRZrS4K4myc46e++xEnk3F2mtEN2zF+HsaPPXcj3j3dd5sK/MysbOawM0XOGRsFvMKoO0J8Ft1kqcCQqpCeKX2gXqqZbKrYri/X5OM7JBWYmq7KW5dYV2HpUpGwWVPRLOuSc4dZbW6TVudq9GoyckiNImOSuiiY51XKKf3iEMVdyNXWZc9JOM/RTTybESanKb7uxSh1VtAfDynuR4zG3ezpnEk6lehSZ3PiWS4RMYsCIhNVPpxCZOYEK9U7+fQBKxlkrMw7QnwCeXSBCkc3JOsqbF0VsmSwIbHMDXCjgs3FkiWXq2xoKNuGZFODYyiKdA2dTCMj5UkVkEpG4knnqRQaqQpMXSqM yakPKuoOGu70sJ/fJUfpoKbI1Kjtro4TQsLoj7ox5OCMrzll8euyZ/aJijJI+Hl1IurRV4yp0nD1aivP0eTM977roIyaT20wvm+hJnkQ7ur51MVMe1swoY3ET8TK5ihSDZv5rZZNuChRIVygLzANcNaBtCkhRYsWCWhWCc4Vcr2pkZuSSQllEjGqc2kTlqjs3mNpVjZkVM8eF2sc8GW/psq/KA+kX2NMSxUWq+XCZfG5RxHWmyOtz5H5k7TB7LFNooTKzMoeWqlk+cwQxNxIrGYyJTHLd4foUD7cp5zuCLmlrDPGVZbR3iIMK6k2PqPHmh2i+Rp+gvV3t1M6B/4rnyciO6ZQByAaZCXlUipLvqlJIkDEnpVQs1l1e2uG127DyEcuV27fgwj033yUHW3KywuN1tO5I6xjtkMaKAw1CmiWopkJSCy1Dz4TcdaUZyfDhUiuDyIxFRmE+kBf+nD3zz2TYwM7t1RrXGNsX6wtSn8iVlKaEUtAbmo5FRg6dFlyUXEFSyPJM NzN0JFNUMNaMs1A/bZ4tJc2z+qOBw5bVYfIGXn8bqf7CRfKyH8vtUyJDMsnwumhwZ5XfMrRjJKOZehh4I+nbH58jl4HJnQ155QL7yr25/gf/99X0Tp2//XuKkH4S9b55qdl2geoieD+lSGyRz0pTyj3Q2SpmQS8UDKTn5NI+UkytqSQUBydNST32kW9Whe8IINMyrM8/lNXz2xGALKfgybbg5abthpnsunTQxbZIKUhVCR8UTOisaylBJgsKM1QLaXJVLAUuqDeiJJlcVSF1IqJpKrhasT3ntHWy/5HTYGmDt1eZ1fvAJaa4/zmHPkfU6llddW24FUi1QjpQkH6Ty6UTWcJvBPpU5NHIVmmpR0GQ2iMdz+aAPGh8pmon88388eMq/ffNRhe/9O9x2wA7BLUokHB4yamX5fh7NoczmTOdFYYaYqoss7KUpFSMz7UyaUf1HSV2kmkdLVT6bFOZ+hlAm9dmCBT0gphhidbj3lH0e2mvmaURj9NTO1N6PboTJDDAOSkFM 3BXuKKa4OL912YMtGiA6cxGfhltRoOa7NXRH3Bn0Vg3WbwBW4yJaBG6024HbwsZrIVhqPwP4sOQZOsmTgJkcccA9g7nm4NNtx6NJNT0gBrTnxiDsBuC3a6EX7bWicjVRzm686G0WnDK4IJixvzvCjVchfhtoZoNYibjd/Le5VvLRhJIXmFjF3kZQ8+4f13H9vgFKIv7jiYOmy5qDKJFLYSFZJpCjBZZc4F26HpoII0aHmQOOpLdcmzITcFhAECVi5thG4t7GsTPXTi9wNGuEZWhYNxIIJ8g1eNrEvP1bwqoAiAhnKtgQ4HfVFL8HFiWUSC1kKaK7OjQ4s1weAeweritU0GzCrZB3wQvmr6+ynY1Y6uAMeK9Y1A7dPpX14Ws6daByKJStmyFXQF7oi9MM9QB/gXYX+31W89+DwKnIfpokLxAuRTOjHUGoyRu4AjmuzQWTosnF1eLjG/LVLcTHGZRJLiRZVqFdJtmQvoL5l/n9teErlnX1kbsCE3gjghbIfoq+nBCOM a3BARWMizFovsvUI5dmi2D2WfIsTFYRidCxiPk2jBzAZmV3c5djeSxQ+LjD0KfxWGetUkgkHz95Alp7flfyCQPJX5jwv+EFFMQaaTwf6TBKiUwVYuRlxkdaQCDkSWRG9o+u81//SKRSkl0/U1Rs8/B4bk5a5JPN1/mdxLvDdVCSeZjAlPkzm7Iuix1uOrC/YmD4jxdERXuPfAYr7giXm8jn5UzAelo5KKcdlQgmF86HdS1a3TwT9x/d7LJVE9TxRRdETGVL8leUf0XfIz7tfOvuy/XolnY8D6+JMX5SuUV5SflOnZjKwI2bWIpHos5adF5zL/7ev5a+Yx6e0dQ9dIenZlel36xiOUBLlNL30K5UnxfT0vopnvyfD/cyQP7GTbiBttduDO0MY2tN2B9lmPxd99OOvlsTsMXXdt3Cq6eDAHkdjoCgC3j40e+acfXZ5I4InKCwAQAjAVYDVAAUA5wGOAb4AkX5gYyhARZsi2X6XHj5qBw124PyHQb63NAGspWFqC1ArM QXNH0F5SEBlFTVjcr6yx7uqd/vadE7d1W0l/grbsZWbpt4E8KN839DFm4raU/w5/Sp5GXsKJ2SSbI0mVF4c2g6mCiuQ7KqpBW+lgHNRG4mwdpKVGWTfJDjQJIEyWscBt6iuO2gGd+ZQXzNOljRZHOQpZu61CTtRYaRG4fsnZb+rM4E7eVnyxpctv4IXD7KX78ELg7fa0yP6A5ExxVNLZomAnfjZWzprHdnAYYP8dr4MvpDWsihJGvDeQoPq3dssq574VKsC3zbPFumQhhllXSAhychO7QC3l2lHCLusIiM7U3xLFF9NhfynxbC2m4cRAYkVXBuayrAA9EfDeOkjPSSSm/l04WQXAW6AOXunY49Sl8Tjph/2Vmw1mRCyJ4/JsrjeBtMCpv7LV+Cqq1oeUOVa3M5AwpPm214WlcwZs0vDBGirVzaXfhzywSxLpfwuHn3hq8rAH6TWVKN7AXeSgITMhAAH18WrX90dOc/ExtPv8BKItdgN3hv/W7jz4txKHIAOFb2w+M +pwze5bTanG8Vtl5Rk3GrwrC+b8Uv7WrBb/q+PmmsTpx8O2Pv/tMPkZ0fNxBzf4eQgTVQUhjUxGI8fb9pKwD8C0urptZBU5eKtuxSgotqACwqlGoJN+5/nMKSdwWa3eruZCyvtevOrBGqjsf9xbab7O0/p5F2LjNZg3bMB1OW0tAX47BB7qFjWIlK5xAQnfVvbU8mP4tZxA30BhLvzLwL7mdqKsw1Mzcry9TVrmamahCr3SzVdG0Z+d+f+nmTSbCcNN2nv+ivIZOn0wV30w9ZU0ljC7VRU3pQvy0G9LI1Onxrd08nCfOy/ovBQX4X6lOba3/12/pZ/9wiy1xnArPZix1CgufJ+Oiz1656/PhFXBdMxHTAyvO/yeaRKd8mZL7chmbysNA02g5lGmUVmT8VMwiDFCn9MbwTMKRV/bRE9pYjjV1ijX4SkoZ1/ZPd4ffof+2mkPejvZlSp/dEvmn4xr6qqrHFilG+PhV+1iLq5M0KtqVhheUuTH+8ISrS4MI0i+g8QxlM RgzOMh+Ue7oqzfbwxyczfPDMuFZSnwKL7tIjzdNlB+9XGcunPTrGuv7yI1X+84Gdrb9VTbSawgP0AqRaVAuzAzFditlJIVOMi+sJ+jOdoxmrF07R2jWlQ1f9SbszDGRXP8UZeEpuyZkO+hncsbWNpvviAb10L4TvkN+RPgzWLKfQEDympupJS8/xwd2/5ynSsQLcYTp/eZVQUrMhMUw0aaa54ep4Rs7Kn2zE8MPQAhszBeGb/l5FX4KF8qJqVGHL+liiJu3KIWwh0hrrPemaXjMzY9Xr+n0D+v5ItZB5A7IxRYglzSQTSWTDswxnPl2gpdObP9Fsse65TIksKklQb7n+ZS60mwRbW6wFR/dn7FdaqdJ3QTLh7y54QX/W6ohlguqVnJrdhmdok5xdxHuaOeof5qeXfz1Nh3GEZHIeXT1jcXrJGD52Wy35NRcc09BlhYXgUwsMxJ4N5FqMwvuiiHz2mgb/j3+AYKsoCkH+hBk7qRoNfqBS34m7nA7ir3rIosxEPCPBM KRK+SlnI/M8F/NkjH+uj/Q/jFVEB7VI3qIWfJZgc6NoND4KTWzdx2tAD3Pt1qxdbbapmt5LiNGa0OxffyH7G4J4v5O/T0ugn365CVzUvUGEnHNvP7lCsy2eYwui6Bdnqw+cr3QztGjNPPe5cWW3ZIErjQuSNaQ99NaooyHal/udjS5fCMPmmMXh3Ad4ZSVpbJAUFZWZe1v5C1TNHXYvTfvV+zrQq5QRXsWBRaq/5vXceUqixk/PAwZRmd8ChGOARVgzIWmmWihPpMneTrthSqfNNEnF6KIVpVQlDBUt0jbZJzIO/tSSHlyNzEOLJpEHgAQH4V6FBcnz+VX5RimbqSNYVLK8B5WWatws5HYF8QFgpFQRaFTxb4qceoeqyN4KjKB4+56zMJfPbJzqHl68vY3YjKDqt8eBOObooqmFnqBjr0sio500hr5AYNvnARD5lFkQ++J8ZD3/RT1jVs8RL5azjzsnHMVobLR40xVyK+9Rh3tfwpVzP+lDf85XX4kptbu7y5x59M 1mA/uQ0Zp+YTXX+KP/BSZfgHD/hh6gyNEr7R7D094pz9UTzq83TuIEf5LciS14jNRcCroKSNiiqP8boqfT13M1OkcLzxU6NWEy0oVbFmFr0IWQiNVgWtIRRYyfnDeWUY7OV54pHBUFVVWyliql3Os5VonX1ekkPJtB9H08iFPBD0vd33Dxh+kNt/M8Q1f/x93PMX+21NeLZ+rz/LGiYupeq2jIkH//UXfhV2mjlwONDqH2DR54zbeflxqfERQZ6XB+oPQHlUWZK3g4pin/5Xl/y1X2zmKWVNG26/i86qDkDUPvucW2Misn+VdJ1KRcmQ5ERx7ogo1WJtztUCpVZz9uRP5aSfyEcEtRwQ/F0W1cdiZAqZgLWYkJAC3QNkBOnQXD5TF9LHhhK/rKX81XUjAK+ZB4N7Hyjbdm12UUElbPLihh114M/mHq3LWjZ+IZn/uQfzDwF5ZC0wk5V54JkjTZR4ViaypXMxGLp7IUS/+kcOpf0PlWGEyVrEVsUqxvmAhN0Le1ZfM TG/Eby851uvqE1FGKHhexyqmxcLlAxVCkRseIpHYi91ueK7SL+rfNoCfWwm4BpyQMubbAbGBFGkQF1dysms70Sie758kgG2xAtPZkkGUz8siIyK9gZ4GCoMwfrvKLK3ilOdI90v3SGp47d1qRLrjZ5zvfxy173pTLU77jiO++jrMf0FupKMadFYio0LzT2aKuYiOpwFGlZKG5dnAH97+Orq++usD9TX72Cd/KoPTWXlk6Za4N+d6X+JELWP8vKi833ua1X0LVz0ENl0qw76NasMijz3LP19HwzT/ewkOf/2e3v3yYLw9+u8LXVvn3kum37fh33JjkY52faeKlpZ7NXQevLPVNnjdx8JEbRAdXe0PyscH/W8L/t7vECT93g/ev6lcMqyen7H+I1Verp3I4dq+J/cvdVRS5FaFpmbl0jJ1/UPayPeL1a1g/sBN2P+CVP6HIP0fTv0t7XD7mW/4Xtz6LPud1md6J9M45S1Y0mhb3cxGP4reZvJZvPeu7+ybdq1OhlxwM eyt+WyQ+WuTCIymdihjRRKYU1lZJOLSGDlpx04x+QMoe+NyRihGMVYpQTXbioSFXIu0M5H8ZvTXqu09HCnE6uLzEwNUUJsITU6AiNNE7ljWPPBa1cvzKYqalIiG9SfpTmSuytn9Z4HLGX9GLC112cLNMCqKR52K0NarLkodJbGLBTwopXJsCbY/h7dA/qJq0Xu1i7Yo92hLio3IBG0zbIFMvYqh0HPIHJnuUpNmfsGS5O1oY7ghaUF30x6gJbRJGBjmIi5FBHSxEKufi3Fj/JwRFahxVU/55j+aZejiY8kegxoMcwDFwXOwZuD3EYsHfchbzbQKSwcUHsAi5Dxh8osx2fajEDdz/u3aGOR1UCZM31WLr/f1q8rftWKntZxM8RdsWOO9h+zIOY6EQjFdpueB3XXYM7009tVdzp+lr4BjRU1rLCMlslroSaCuRS0r+wnYodcgMkb5hJbOKWVo/sXetoUEKaXC2Ixmtf2NMDi/ytvfholaGBqBPVZ+Hm/JsyuE5jNKRM r/V4P+YGOBMrI/+WzPzD4ihZb1fO0GeN09DiMg0X2854p7s6CkNb70THhElZBbgf5Gcozv3R6DOFgb3el+UBWd9C0XeHIYQk2lxdI7Ox+dAPATh0E0heh+MvxYoH9mqdhWOUCcOdopxeTS0QfQrx8swtTeFHFPMfCmNaGMWrKILQpos4GN9j2ESUFN8CFeIkbk0o/aGCMEZ+6SjE/eQwV6vWKVfMMD7fTUXBsJyB+muQr5m2Mv2MGbgXXRdod7NIh+4uvpYkhw24dNh9gxe7o0uNyR8hXeRzYXCy88IEHqwk03+yjc7oDDQGAiIoVyvqzyzmqzFUPNPvYn1E7MlacDDBCsARTLIhyE3LZO0aXkD9Xe+KZqUKhqSYJV+2rURjDoeSnZmYyuRU/ox2cSeyJN9OHFbwmavAx9c/UJdzRJpiUPZWTejP1n+LVyG3R1aMISMUV96i3KUdTx1O3ij2UVMnUPBdQllxzHXNOtUde9X1EjJlx0I+3YImmWdiq7rbhAysL+pUM r1YEaxTouyDFUKJ7CbZmvwnwL0zvLP7S4xmRW/vchqaRfx5JNySqZWtKjhNny3a+SD0oWllwlJfaTZbu7Z5myfFql2/1k2YcYuhQsGz/M8b2h1EGWsXcfTZXxMiwQOhgiJtHdX2zT2KNhSXj1JT9p7DAFADEzRgMvCvrCLWHk5W9ysIIcFuhX3Ku2EmzPPKUeVhImzLLO/j4dKIl8fd5YVwiBVCUhoRdSWCi7uoFS2SNMNGaO0OFJTbIm2VqBuUa6PC6cxSTdkpyNCQetKPi6xJXKjP2cOzHtaCrWUlRO6ccM85nK0LQpEiIp/j0Od4JfYXN/ZyoJHmUTobSeQv+EOwucbHOyhc7CKdHDQO8NUjWrzjT67pTIkM5VmsIeqZWtlBtTIKVYyCeHXO+0oovjc1HJU4thbep6rhOWMykimywzay2svYUeu2NUO5UZ/JS+jPlwl2uHKTlJmI0UG8EYUizGvJ2Ts5jeKJ+dRaSt6exJl73dn8UeX2uiuxXWkJQ1DmyoTHZM QxWhxBp5VONzEoX9AhGjNe+k9el7mxCFcJTswIEvCYFmDd8kF2yVsLZZ1djQsGLaEJW3CgZXoI5cGuHlQEj4abplwsDCzF0mBhZwGgYWhNxAJurNB5Ghr1A0UqCp5oGNiJiJGEvbSjPLimepZBUnpRIrJUjPYIVUKDNtnEUE0c4NpqSeGuHaQkqdTrU+oIeJE0BekwIC5ZhMKZKZIZm5KFaKFQMHcKESGJJxEF0ptbjsTRMUSLlTySij996XK4vflA4rXzjMaeEQp/Z2sCvy6yjkCdoTyDcqnQ0hmBi6GlVl+t5HPGmUFaTF/CqSLyUhFKG3CgK6bhAMztoLd2feU+3wdhkPtwEBizQ23Ebk7vOfWGtlUtQjudc/n7P77cHgsYAoyAhO6KXQWKshUBWsqKo5BrhfQCjr10H3v7nCJNPoKflI+pOlRTP+Lo6+yaXhansEGMj1FaY/TzteVcIQVuNCzPfGkBo5oQd/5T0r9GE0fwKVZQQ3v+2IB/q+pWLygU07ua1BM lYX0WbVYgkv5Id3qrjzW75ozrztN1Wa/nJErtCvAkBQBwWmfDfqgOffqcLrhBJNc42PtEjV5+PK7i+Qz5B3FkScc1UZGAC4AJW5eRnZ4EHKN9zk6Mt1LCDtxrSwLuDOZ2q5u5jXiwEGspdoUfrkP7FaifPuw9s/fuIPd93ByGHkmkFC5vkMzB+1KSYll3lv37V2FX47V4IfL0+XPaKWIpKYxl7Gpe1Jllrz3jGh1M0VHoWHnKwMpVXz169H85+1iZipPm+O7hWrN3lN63M3eA/4zYq8kxgbYSwhQVlDVIFTiwZZPXSh43Xd/pup30H5FfsIaSXsRDuanhDAHWQkHcJXyky9ZNujG09kmJK2HDEKkjDaJboxVxVYgtQZW4j6Y3ruHmP8KpeVsZPKFaHdH53tDgP53WBOu1t/6irLzl6wt4a2ny05cyDVWo+nLlZC621SXKEqE5AsY0TMnzUc1fnFMVnCmIjDnLnUhs5BYkxxpOQxJofsgvanTapfaIVIzKVsg5bAFM RtgjgyuBpmzgLVaXYIaeEAWmBW8U4j7Gcven32T6fSmIH6/IycGU0J4wJKXNaqiL+HKX+n9b+E1NPaFrkTwNC/sFmxkeTuDGEdRo8z5ileXFUMIjTRJYlaUbF4LCOd/mIOMXb/f6WWZKkOZWFiX5PIceEitnjFbwYXCWu4P8fpB8oZvkcOSObT1JGVWGsH0l9+n3I8iKllDfHFsfuiHSdPltks6RIKFJ8kq+C15AuSwc2HMLBcl8SOkxLSAiFHOT2NmT7Arcu8dFt6DTHxBC9TuqdTuh370UHA6MlEh4OufH0L//y/ZQsVG6MxtAWJTRcy2DLRNVxiRLqfTtkd4KgVaZIKB3xnRxSwNJLBrs6DKkROkqZsrBSwM0VySUzA5X7q3x6Fr3VQnhmEFqJNKF4jw//x7IOcGSkrGUwE10b2jlRMIOvcLAditDFJyhCOyAf4IQD9MTxqUSVU2YLmN3OGXIbCWsg+yEQu/b1lkVYbYHxkj+/ncDpwEES/m+Fwowl9JQz1KwM YM+iNa8rLp3ZC+a9zMD/ZgpPWn0R7RBM7QhWPWq4BchVNUqOtaO8q5UnpfmwqtoZgAvUMIHc6Ybb2w1HXArpb5t8uRgiCMn8c59guCeAXFGV8E/FDRXTpCKPOYd83+EGDY2FyhynAGct/RoUWWeFGqXc/zooEsuwn99XC+y3OIJf3exML0SYf7s0SuTEfY1YUeutREhmyt0XgkLG6/KtdBDUVF2Rmzr2w+qXzFy0tR494ynGjOwdcg3hqyOE79z3g3qDvGrDhO92f98j9HeY0xANPYgAAOwJqIeCkBFxfAi4dgFsDuP2AuwCIVMXJMYFd/UyDu0LxngNiAiU6IzTAOahNyAidklzO6pdI4WHTIC2xjCIMQF9zBAAACDSAABAAKfI6h50c6AIJjKYlKfUQ30HGQAFlSfEo9tCOmPF2wQ49WguRy+DoJ3GC4yr5wQbObq8LdupYXwT5JdQH9GP2CbArlmWJYjl7La4eAS0159X78HUDtkD+IL7i9tpzrEnmJVQCkoGM Gwq6SzNBcUEIDHmmDmq/627jwIV0FbXxweCMmaHPmRq9FHPa9o4jOaTpZHUBeo8/gGNPX097GFGaLklC317o3Zn9Xz1IconrcPGZngsaxPWHNRhUO4ePcB/QMeuZZ+Vg4bLN74yDGaFWoFGhQbSGhmtQLNO4HaC1PtcjmxPs/ts0FX+vy1uQHsYd3nA/ZFDjwJmtyrng29/EurWsqZFATkVnJoERUGKHVbxUJ8ZPM5/jE2z6am1QOGO/6R0SX3xtx41hf9rC+e452hPK14nN8J9bXaDUA31jA+6UOcYx3TvQWjHnhKraPqrQjxAG9oUQ9G3ZUEibgkxXYiBpTw/MKumsRMeVBy8M9wkNlYpRPLFOJF6KEfjJkqDMOiDm5kycLPH4Q1p1QYulHoZ2NZxWchA4Zt4VlBbEBUp4X4r/MCR0UqVLkUgzP5/SXwrITSh7lQd/AcxJ9YRwil32WFMTKAyv/FROYDrvhIv1BT+jJ0x3kwc3cdNY9d6uBGK4tBn3Zs2q+5M+M hrwSpIRMZyFBBKUnI4cuACeq93L+dw6DfU3PL3TPhi+FGkNzeDiMKle/IaB5iOC6IDOH8FCN0ElgzJ38Rk1DJKyLnItyJiHhBk6LcfAJLD+Ynsz2uz77chJE7IeWHF5vw0XeD2ck8CSY4n1BwrNBsN+71hS9OtrgQ9Y97OPTMnfobDzGvtfjQ536wUEZj1pVjjkSDO7pA1Px1SAmMoJiXa4++wtIbCH1uIGlIw832w76zZt/xLdK5r7jwkYCVsAUKoASVP+ETDut1WPXEwvWZRrRYjCDmpgwFWr3wsuhy5its8P4TJeEcJqI5BZUVcjmIqVPlAC2FqdP4KgfIDbmpFfIWEJUUvirz9goanE7VFkBL0T1ZhBduW6ZVheSZn72IbHyoyTM+WMuAamumA/bZG9N9c3U9egbGYSIaU3AynSivUIMeK/gFSbBNqpiVx1lollMh3dThEJlZv7R3fMQXRsgMOYHiSDQZ1SDmOgxCY0/7SGd12xF82XMKor12LZmNMOk2Ct+M tGb244dIzHR7G0qO0YGxIoQQ0EYc0k7TmD28X0fAOXn5mTm75bMp7XES0fCkhOapWE26iYEtIUebflbbfufl585CfmnHNLK0icDH0LWVVA9A5EGPixbCJMR4rBRG8iYR4IQuL9jGGPsVQzF0Z3uaBAwgolHpCHOpBFyhRtkxSRQWblW2AQ5KxwkZJkwB3iVwDGLZPc8EA4z3NBRPwjDfHSvgicWu4pU/dhzgEg3ME/Z3fiRfCUCys0ySJQkAowOiBjb7rIQY6tggk3O+GCG7EpAKyFcH2D2lmrJ0QrwIRh2ypCCANRIjtFNa6G2MJUaQxSGHHQuKFeEz7Mvd0DSeQApRDWuveH4uIYiXvbNEvwUMk2mBjHNyJnkjQecrjU4fRMTqQkNaf4z4YtD0NpUqk/8/I/2/R3YGonKAONJN2q8Ix/1qP+fCN/CxeULbfWHTnI+65n+iqGLSQESRcknt/oEBPOU1r3uLeGYShq56iNT+0mUZnVFM79MrRElXCLSKnVvga1bsM fryIPRFKSvSPJv8XNEQ6MdierQpZ/J0uRRtBUrcoGAyAFVkEhehCBev03AR5J6M89dgqPe/QDZOzHuDuGUkX+7A523UiiZBb6VR9VYpeuS8InIvw/YUfIISFDNcxuIuiV+Vb+t8XQLXf1e8BCvHKKuCJIvpcEzgRSxegpevC2FOF23e3JzNrApp5vZpJWNp/dS6V2/SXQKi1mVJWGwfODczAeZsEOqBSvko4qExeleEtICe5elbmZRZeR8iwv7bJdi8iYa7Ezmf4Y6v41Iwo3ZhEK/fJRSVc1emHM7/6CyIGddeXmQO67HLPmF0sP3Xp2MsiH23YKIttdC5RCzg6JUxDuLp+0qt9uAZUXy4L/2DNu0Vm3tCMbpcRA9MxaKn6dL9Hj+pMgksjTw7H5l9px94E1HpseXgw31l8EsSS8QiyCmHaZvIJIDFGPKgF+WUuy78waCzNWLPsiazZud6cAdytta0RLAWhLUTMbyVvAtcYa8dae175hxTgeYgIOh82DWlyRFCqM lUCFLTS1qzJXN2aiJ7wDuCjY1yjcHUBPQDSGbQQHdz2a3hhgKaGD6MK7R2gB/vEPsmQqlzVzx8r+FwFuQKgyLD0p9+XHvIXGEFokNBPAd9V2pQUOQ0hbQp/Lq4hgdIRGz6+9EjRrHEceGb+Mfv0BDo/Qx/ZqgSOZgXzQRK8ncqjCJzxNdeoMfj5B/8wi35zWiIY0/+IyCn1yr6O4fLpoTmVpU1QckTqHzYizFrqGEjcSnockWqgqYH7rCKnPDAMsk+cFunmFPfFrWEGkxbCaYzM5qfnNjnEZAuKKOFp0SMABVj33g/wnoG3bMEBRQGCnpa2pUqw3ALaKjHXpnH7a3/ipMaRZacL4Mof8zqBqD3jmAfd134no4aIIwhQ3dBZmUwtpksn+R/fAKogROoPFzI7uxuHpjBZrbWKZm6LRO9qrqvuErPN2wiKQ9TcudPBy7Zwi8lzDgQ+1ZAWossIxroWH4qr7dHCzqNrWy4+OghmXj0bPeaewoOwDCZrgGHmzvM7aEkYcM F5KBtirRtkbYxVgF2YJ5Sjyob/ZnnzHMmh4GSsMylaVhhWkwE4jduRZ0VE6ADI3stv7a/Wh90NbIY+ovrBuGxeaqJZvEeBiXH2o4QP/FX+EIv/u53vRd2DOVTUWUdr6eJIBjsyjvOjiA/R2v4AEeaIgoR4xCD0o4QFkqHeoZDTUwwQwx5XN1hxLuQoJtfmGniO3eqLi0kzR1GzASXKwMpGrPNedWQGhFAwbDxwY/qD5AVWHih7uWLVpyiS0WcI+yI1dV2Eek8GsCzP3MK/HFemrdgXsVLTgnCuZtfK5Wqcx4dK2OaZ6e7OLPyfB6twt421/H7Ktnu8TqfVuVmIpdWrWHvahwYXa2nBQ56gh+rk5rmMA+3kKGnsa5zv1d4sXqQTJWGmG29fe7yHI9qEta2ed1KQ8y21V1e4d0WIVRq5e6WrOHSloIUE7plFEM4uBWOfK4X2Go/nq5vkJ/rT+RR69dtYz0H20zoN07jOW0bakfKdm3kzXYnWWWvu/jQHtP2VXOzCX3M 7S3YgnCv3QZjtllnm2VMF+HsXz+3yM7p6ZNXvquYK3Titmy/o9lu787zu9u5fmPZv1X6wRy/t8b17csvqbr76O/P7NXyWn/1D00k4yrRrq9/01cPPw8d190POc7867T9jCqbUb047mWV1D3Wu4q6jr9ajstaq9e40+nrxS+iZN7qHbJHcKrR1a1F4/en/Hmpe4fOZkujT+nJe+uq5ZkqRvOc/U3Uv/5jP7m62h6U9muBf/LxezWTyjSLs+uXO3anCPOSRGvrAH8/xrHXMtB9q8fIQsw4fr8PUPsH6ydA8FgT6FrF+83fp03J83TXH+U9Ne5qW7PGo2Q7e9yi3XLj23wrZ//eRkWhV2Pg2rIodnNyM2nN+6T4MRw/ubGT8jJ+/DwNRfz9/HTN/alP+1IL1O20hbx9yTUnZgY9Yp7w6Sl+rrSq2dxT/htKbrEXxABvSMD46d07hfA9iA9awsWXmafdX0ejLW5TYYUZrZFhP+Tw5LkrcRobXB8rxebuRrvUNb+EzG/FM gnVuemprhRHNa7j9LcWleVcPQl/P8awfVFtp/ou+jnvvf+L0sve0PvvUtflBnRtURlPlsPWS1cslo7ZT1+WoONkKo0dj+RKFFjUKLvYasPmOtZzi49A/YgXxWY3KvIotkafXgdvp+G1QwLK/IZy2yWeo3nOQEaoVg6+VWywBVr7FO8k5LfNy73WYCGz5LGziwYExecBZRL7J00EafR4BhvlNTNzjG5gNmo+JbaGJAHtvxgbQH90XjLXbJjU3ZbfPZlMNzeZTdhO7L2kzTZS570ih9g3Evlm3Q7ZlKS7f5mF6qhYvz3X5ybbzXQus9vy36bvt5CnX5AGogVepa1q62ikBVqMa11iih2kjTaoRkqlUqUteq/JtUCACBGmpe7sjpk19fKBf3m0JGJeV/iDW/uMHzZPT8p2vGGq8cneqT//1l4c5KDDSwFrbDoWXhTNslSbL6fTOBXPdhQJKMffWrn7xdNObRvYsornd4C7LBDzNwanj/akhlnKssKfDNTKNBkAa/MnAM 7fQacVhe89/VSxMNcXPGut1CLYc++KvXwgd/BXlbFgAjn7nObTBZ3yzoFHpsvxgrk3rJfb0Xrhg/2racyK1dApT46S/XfxFqC631mnppN5mLHZ0Yc4Ia9aIzjUTd3V8RRr+tSELGS7F1oR5NJu7+WahcvMgLo8HeISWKN2HJCO+TG4/at9M3P+g6qdGeEs/kbXadwD3aTWY/vSnBVRsj7g0lMXn0Qc0ucfZOTWAzeX9WDXY/VMnUVH96FeoV1OTYs+ZoI21JZ49zcbqG5kOyjcz3lF7XyEB/5Rbn059BQiFLxDH+Mk5GkDEpKu8PIjJsJM/PMTlNu3nRISy9Jry8+j7uGbc6EWAecbepw94OpJda4hpxx3BqMa8uIpw51Zrv2UynWWWBi97NqVwdalizO+QbI0WIsx5ZWZYONHnI6uXXobBfa2gqJsmHQg/8OJJSBcRmjscVUjYaRGkRqEKnBGtjHFvwzUvynaMjry/jcAp+Y37+p4/5DRMQ8sxr4Aql9cuGwZ18M iB/OLTlvfOmrdQslDuHvUx2djLs/99TiQ5HObMOFyPnaZ+rOLLTrttlv0VrwaZT5HeT/EtQ/Jdydincleu4rrmUPe7aX7XkDGcfXyz+oN7ToJufzrd5GgwWG92HBU53kHuXrWWK/dpI5O7y9tIyJ99n/zs4r/+Tupp23PMsy0PaEMmfHw+Z3enY45Fp/tQ8fygLJr2arYHqp1yq/i7TZV7NU6qhm2KfPEX2Y8pMpS6J4fOnOXYo0jbjDqI2MqoRbIU+U1fU4CzXedHTswdsNWzKUTV4apnHgBt/AVxq4ce2FQxlY2VkjeQppYXi+XEy/gFr7CxK0Qehi7YctmhG6YZWNU1myXo2T9n08cJ9QkUmthV3PtqnK2ghNU52qkPlVJqkBSBdIrFf8ESxe97nyspjeReitNpMaijtQhUo9IDSI1idRbhJGaS8TBXmHiVgs9M9W0N4G/jh12an9mMnh0/EkuvNCX9zR09yB1rR31bzOpMZyMhcgmbnHwFGSutSM0VzWGUrAM Q2djF4Cmpq19ziA8AzWQOJ605FPuDdoNUla45KvtzCfvJxletSd6q2bFO9N+sqtQ6e8t8qzzB+zoHlujoWUpf/Unzj3hO83dd7c8d2zytqOmn5de7kw/i9pxmrcZQVoaMn8bFQXa/ll+9ilVnwaH2mUBSj2UYSpSzRtG9tzj7MHTHef8DVEKGca+qMlwYw63CC5X0iik6v9v8/VZ+Jt9Y5ssrw7Y8nJbEwFmew7OcrSC8BOvnWG7QrnLJUi6V7aX28rzRZjPBwljygWtu84qI/6e0l17eK4pvn/zc/2W/+fh2p3BwNjxFU3gWrroiXdAu6WnTdadu1HL9Q92YlHTdYmScw8YgwIbmKZyWK+WYpRndGctT549lJUFvxS9cwEaA2ulix/tu73HcXpkbS6wz9Jp645D5uISJoYQfhBPJtu0io2qiSSd1zbFmZ2EzyZHNVjk8sXha4mHqBqm76YDezDVirvZZC+WFDhaV9JxyqU1265Pjsbc8+URzq3SwakNOOGbmQn+M ILqMnxUYb/B66cEp0crHseHT6ouNx+z0Xqeir6LZTjM41D2b0eh6938WNdl48c5vZM39hvtN8y5bXj3WHLpaMdGdf58k5FzatXlqeNbD0YW3JrVaVeokf8QsBRnRTBdv2UmcK+SEBLipB2fg5okwjR3J7vTRKz4kpwxyMS7KQtw4FFkQ/4GGefZAPNvuIaEhb5j6ZtkeHaGAm3HGL1w+VUhfT6JDwpxMPvcRss6Rzq65UXavJ43VaLe6iRq8Z8QiC4vGco7vR1A1ipnObzM/xaejHU+hFnr3XWpUX5owMzlyFEumm5s40nKVb23izZNVlWUbGutp5QabEZ/NaS4UoVQYTF05dkgUo84KW0DWcY3Cl7raWCEdxzXHaVyAJJSwjDI9JVhynCfEW0ITiMGE2M5pqun3dQdF4iZ/MyYlYRK5IJA2d5jl9i7JWWhiMUZg5SmGk+/q+p5LRvU6hHin61JmhfOSHv7qCziU0/N1w6wr815cxuMTrt2P1smzf2f96hZfukGdM 2Et6Xt3aS5Bxx4YbYNrPi2n8GpxkHTuHwpt/c//2GYVY+7NH9tnIAjwbGOE7QzxVrGvJaVF7J50y6JPV55vNondVSA5Vz5CNUHqCpS77ejPYarNd9Lu3aj3otI4QANk8CbLeoqZHGGBtJYrAe0Xn94LR49Vux/fSIoxtMt+P/ttyN/VzI45JIC+ioNVdMJxNnDnd88Xec2Lqpy52NW9M++KKF6jdvD5M9EzfZhMdrP4gGsrd7yZqJm53Crnw3fBl58R++yUeOO8bTVHuHi13iVaF/rBrdV3xbMXdaeHkj53e0L/8HWc/StR726j6Hiq6U+AYitqJqHcrLyyJuigMFIFMbS97jxAoDqktkdimy16MyfYiyfppa+2NB1JWWglE7Ez6dsetKJ7hawbjKmvz/b6eprDuyERP7fKIJzfFTm9ZhsUOo+kMmk38I1qHxnrlnBgaeYsqAU9rw5+IZvW3FADyV+8H2TbTJzuXSpna0F0opKch4t8z/kIfnisnTtC1Evikkz1JM bHVV5HsFXIhb6CZQm0zYlbvRqxH5mymv4mjI/3BrCzfSstH75i0FdHW/Tn6a8xd9xNmrLDMM75oIozExHFkRjZgpW242fg8PT0Gc6UIj8PPN8lIMYzEyqudj4OVaQtbE9nNnh/haqnNmIxojgd0DxGe3BFSSNa+0dc63DnlzAWm3M/IVOxrtV5XH+uvdd1V+ZlLhta17BhNXXa9PKeXvPl+4cCkx+a95qLpO1mPIPGHB9s/u2SJ2/v24vUewyuno5a/60Bgs5sPo5SnWeuUbGJPbstZ2C7pA4/QqiXXVmZdY7a7dGxiix9I3JPJBvQ2Ei9hZ2N8L02ZT7rijsYNHZA0WHL6yc0PwF65m/Dixl3urWym2hVjasrk0Z69pansUPKWQc+tfVNKaWPtdgETLv6ZD848fVfxCw4HHU6indXPCXOv5e7Hbf46v6Wzw7yX8+RMf7zdOH8fQ0PsOJzgzflsEdp7/dRtudQc47mNm20Hca6A0zHuDy4xn8YRX4y4WWq2jd2YjM dOUu5fq9//XopPnmcXhvEo8OmR3J1gn6XjgHoqhoa+asJAQwAaKd5RHcON5RY5MoaK2iry4xaHMtQUerK0by8CmXcEPLLkF3MS7ZRva2tZ5v9R+h+KN81o9/S1ZuE/Uk0gCl7F48Z5jx9AQ9PY1tDRy1v6s9vG8C1w22fOkDPtePTNW155+jQ55j5TUvCX8n8bwz/E86/yuYJNI3L/5aiH+qOg+yOsk+pRnopGtDTjMcJNC8Fz2RnkcfqsEDLfhj/MG0pum7bW0J3k+wPKw7aNlPJvh1NW6aKHqrCxyYu/3dd+b/8yRnSAz5aWboQJk/CtHK75flouuvCrlXITFwop5sO1+HB8pYLa+irRLwaiar2PSWxirY24cZepuB0GmDPGE5Ky4nsiYglvSpGB2ikzi1jVVBZHYRb/81Xoqg6ku5y1CPnl6OxIlb5mjZMCezJd/bTui50tqeuTPBDGUZuCww08fX4X2Kh8h2+nUnZqrb7amjLTdxwOY/+L6r/Cef+tunPdu+M rNL7VdnuPzz/C+UNtH6fQBw78OiJ/lsMaI181oieBvnH/f+F4SuYr+mjz0e67qDq1O5Hub/ONTozpaYs8TVHn0HxtYsodXFWe4P43VafrnwUCnjVpfhbo9hwFQUaxeHnyDrOvDz3WyJgPMTBNS+0ZBiVEE2BRqwpEV4jKsl6Roh0sWFPux2B/cUS7CpyasRrWbZ3BQkCN9so2nerPsiFkNwztsBdqiXEPbSPpenQyCc+mSfcOykUJnm4V+3bKsgNTn9egP06LT4dpr6bQ32B14n15zLMB27r82/rwsWrSueZ6jQ240O2v6rCNlNbYxI0BdE5ezVWRy03qUF9Ff2WYLB+mlA6/PoLR0+7lCDHaaQ0G6b30GpRQyK3H9Cipo15+zY2DGf+IoRq6W8wuW1ZkWVHyV8hyanbRsBLDSmZ/ahdnZlKTugncD6PqjBXy5Hrj1z/11zrJvh1c32CH0X8aLgqf4X2gfqZz6NdsR5W9C+oZi2j/9a+VTOb6GfBirEnpybr26d4M 2GApAEYGXNVc+kUsa2SbZq5Csi2kP0dDvCnBVlXcX0JlHdUjPs2n+z9B+9K2+ray+ZFRPi2eGY7bx2b8gJw0MPExzOmPfXEZlyZ/20jXKgViOuBiB0R5RG/2gG3539npiQDYWzBHzDvvTnLYR8Hd1cjhmg6xzesnPbaE3QrYfIFqjVmbYR7htEIti2ilumYROUVxcwaiE3go6QkiJ0JJp1JVVsVjOnOhVqKPOZgRDfPF6T9ZbydlBCBJY65o2R24ijRjKjKlRkJtb5DvNFuX2o3/ZiROqwKjKacEpiXQMw5BWAtNlamsFTnq7mFVoWBRWsSoPG2tt+b+LLubQ+Mw85qdp9ROU9UZfHitPyVPR/vr/orRP0Pwhi238wF9fwv83N9TWZhT9qaX2rOvz8V9ZNOUO8jO7retxbTRy1sMx7xN34j47dvXwUJF/pB4dV13fWTkqBdy/qnRUtuOkTi8idYjUJVKniUhdIjVGJlKj/rpARwV5k62bW25kuT6Lgbw8+SU8vAvM rLB/1w9bPTSPjtdgW5m9ex4w/NU+qLv3zmVkatK/+slx5e9kMrn6FGJv0RGitUEbnINqO+gxrKixrpKtpOWoo/BXkJvUtgmpyf0lpx2jdvzDtpOXHUzgaZjZVhwlaNMFNE6g29VtxT/mGnXgoNXvYqfgNrAxUZtn++HZ0ffa7GPQwNPPRiKNnMI/QHLHpoeayMSgst2kbmam9GpfnLHN4hdoGa9w6h/6aEtmsHPePldrThUASU8faWqtsDTb6qtL+hNYZLR/RFBvDWkNXNl9X4q4ZZcI7xn3aBSsVbSLfge3jZD1Am74bHbBy6QHfT00RWS8YPybfBRcVccEXeHdIrnnX+Fzjo9SY64J47tPxkEZxTMG2eZb4AsxtjLozrUZhhplFZosp7ajmngHvOxGrV3gy1DdeblzFm4mJpo/kTqoBO3rR1mNATacdMYa0MdnlxkgrbaU2q/tROYxX1/P5uxPrRlSZLjICMBilSXoasXqSELF3oqmEqwPtvUpHw+4QtOtcfkNM abeXAz+YAakolth3+PrRVQjpDDpYxbIZnVm2W+xM/w52UKdRYtie8PQI5K1oifOs0jgZkjB8x0b5Pj23haB4cftGH9n5UIhg3MRbdMmx7ap+5GxKDohGinQTtKVveZLTBzA2MRVENSs+xg6qtKm1lUg4Hqhdb17ORa8NokXuhgTt6hCN3fFcOBq63jjGPRA6mdos/J6zVam2+PzSvz8wPk2C2bOmcbJDtMVmzyZp6ZW+v2hizTZ0d1trOiGsM27bO6rS2MRLeGe7hsOT3cGYiWQrZGSbfceOGAfIV0aJCWff8IIYfYLIv6rNia78a6JKKal2nihc3EudN5TjejuAkQpyEOontjbIxFhHTKaICqmqytHNUWDWir7I9KnTHQiKo+uCYWWEOblU1n2gqcxXSzxX+v6gIa1fi0A2ACk9FN4x1R3lHur4Se5FxgDBUrUIMukPoWc+DF1YMQ3P+V9poaw5X5AiXB0UhB47deG9sGOtmXN06d2x0r3dPn9WvS9ypPNzuX+BM aPHpz7ONtObQjnnuetnvQekndvktc98DlTkciE9qXxwgzbWQPNbu5y9jsUartTmhfHrOE4e4qLo9bCkpbSCMEuIrsD5GJ6vqgeix+oEtxFLeWEjeRezWa7YZYb4QZWnrNyl16GECoGa8v0Ew92u3A2RHQ0dZD/T2bDhwyK9jwNipUTTNL5X+3f1/Ey402TQ66/pejzSl2gvEtrOlHWd8SDnkK2lJIWwxpy+GWkk2dw4z+wh6CxH7lS5Cvw+/fOe331uwDiMHCquDRRyE8xu+ht87/kZdytCmgXBPqug+Jz2jQp2QaNnTHAVeiiCWVScxh0eGD1urrp/xS/uTMtfkFgjVbzyKKEiWIkkWZovmiUlGjxXpsMGzUPdGQGOziOSzGi2PEceIkcbo4W7xCPCX+Q3xD/Fr80QHvQHSgO6gdxh0+OH11+ikJk7x3ZjoLZc2xl+N4Q5zjitNvzzXmq2Jgx7o9HIeY7fmHDzzu0/ok27SjTFuObct6g+3toHd85JLuRAv/CcFM e6Jma1aB6lWiXRjWkQfWf0f7X0HSNxkN/im+YafjmH1945TeZOHtz9trsxdnzs6dnj8went0xu312bHZ4duPshtl5sxmzobOmWe3MPzNLMwszMzOTM6UzAzM9Mx0zRTOFM+EzYTPGGd6dA3dKby24Ne8WY7p6Onw66OrLkfUjIUnhAXN8Wjx2AyBcdywW0Dgk4eKCXAvuQAcRGAlncC4UkEMSnBSp8EMu4jAPaahCVqu+UTphYBsUgFZcmwCM4r0MwCz+HwHsOv9d+xiAVQJpAG4JkgPwSrAmAL8E6wMISmQJICxRVABRiRICiEuUHMChRJkBHLto3vn8hZNipZw1auSq2WIyy/Xw0WeDOYYNMxg1yuhP95i89KoFT8UAI4SCgQsDx4gRPyFC+AsTJkCkKIHixQuWLFmIXLlCVagQ5qqrwj3wQIT33ov01dcWNf3PiBGiSUnF6EIu1hBDxDviiARffGmJ055tjJDkl98teW7vQ5Ba9p+DceXQNRhfDrZBWjlnBhMM q9MfBxAo7IZhUBccFk6vqGsGUunJqMLWqvzqBaZDLkyeBdMj1lZPAdCghtTVnUKZFSyuffpEzQoUMGa1y+h3HCFX4+Ko5cFCjV69aN91U54EHbeG0zcgI9YoVazBsWKNx45rstVez445rcdZZrc47r80997R74GHrmP7sY4Qujz2+7F7yyfcfNW0F+jTOWmKenxt6oku60yeaF/5diC0ncxX0zhckZ2zgBICY+I8X9xiOF29oOwp75h1gI/DjP3JUvUEoXzFkHGR9LU97MmzO1QxDq4bbjyo7KwG5YRYW/S9QDT/8/1YbD5kcGTAVDTrUUHacxQhG0lifRifGa9ILeNjzsECkchFnNnp6ugEJuAaDwCjuIuSSvviTxUcTVYSSmxjfyRQkiqGhWQfJVU6S0Lq3utrVS3OQ+DYmn4mLrkByLxqIssaK7rqqh4upPgFheVXh0r6X0IQRJ7kwJ2xBesyCc5+IooMes7qmnqUeZ1b2dfeIjQcELsbO4UuFFS9Jz4quD4RM n2spyI2W0i6nqsmkdLz9TrIfkup1J424PggDLEtqXqU64Ulb2uPfRdL0uOESNm775CQvW0tKKhZgpojkPrphEj4+ia+urHw218oj8Cp57ExlTNdQlHyifUNAULOFEan4Ntp/uqJ3XbbHaKPFcTG1k0spvV3FWjT5cjnqcmb/IaLSFzHkKbPSUFcDGj5Xk6ywxC6oedlKtahOaVixSx+jteAcsXT4BKrPhJcgonUfEChzhXRFXRUAyOT6IdoTneaaJfRhCnALgfVldXTwrKC7tleWPTuMfy1XtXlFbc2USKzuOhAwEjgQOBZrYgaF7BrVDrbBpl3Zpl/k65Y1p200hDCkDxXUU+ODjo5lyMq6ZCVF2nBOhYwuDAfeo3wU00MT+EGwHuB6reCWO6r4JmBXehqtre98/oK4vetDwqHMRccFX4kptFqf5Tbh5AadzAchIhRNVFOf8Vxg78zzos3Xc7VFdNX/1+xDDeYR/X4AG3+/g29N1kL/4FPjzHgB/7ulcm1uDV05M OdnGabqe9Nk6Td+PisbE5FGc6mWoHxbE79m9fD3tduTfKZcJdvvULk1vuO+ZffK510Qff+hTxRf/6jZPcR6w446EjRRk5V7OzXNn6qbgAwyJO88Dcvr7v975f+A74/jwkH/i+OyQfnofce2q8yZYUZ/Y2ZZv4vhoNs+n6dgmrItAyEzPmpgYFbT2hXiF2Oel0EfhL+69/RsE/+L0XaPXaoZ/jERxc1eqjgQXjbAsBnXPBQJnTnlygljMOowTREbKCq+95XBGm8Rh3FimEORSLvp8rdgtT0M8aAPsMO7S/C7SHu1MThNNTyJPTDBOToAqTL5bKnOjQh4K3YY0ZkKLzFGv0mIhFYEw6zRIWGbjxUv+SOHLzhalh1SwO9oUUtAhPbImR7N3UjNy+oJJVi7qQaapZLMckf+G7SF3XuR4zbdNZkMahvC98SIYS6lWnfKgweY1TtIo1NUiP8xb0eAqAa9f41mNknWxWuafEhXse+RLe+UVgV9CMWDKEPnwmMvzA/WlpWCyM 6QWVbdkK7T33s0UV8eIHvzjEaHnowxzpu+WBfB5t1uTD5kilWz6/tchoZqvpmKXeTkv7ABVE1AeEraZ7L82F6KuxgJIOeDHuj7TiVs7WjuuqMCPnMYjg5SbO1RcoqEN8Fh5g+ijP8W4mKSuDZqfDhpi/AeF4Afvnhh6zx4yACjyhC1ODRgPFdE0VbEAs2b0N8bxqnMHXo9M1xjTdiVoDTLAU+oZnD6oXslZ1X4mzTPofxdVinapLqSqoyO1uwJZCBFKBZKLdv2C9Kd+W2DaKgrgyWEsJgxdlittaEeR5pbkKbSmhupI51B2V2NF5p0tqWytFaqgLzZR6f4eGIVk+0AnAmCKShGoAJgSzmzxxfR0YfAY4RlKgDh4imkV3fWNRGpBg4RUslC6tOnC3SLnmWshrFd8bq7J1bAu+/ksO/fj1C24F0PAAfRZ6HeQerOpcEfCQaJqJh80ef5cx6rtAX1qDrP6uh/Oawh4h04HDnemL/wfcb0lz/xnERdd3zVado8Psk/9SM /76gswgwwDc11ce874Dvse3P6B+s4BUlorMGJA/qXiPWWTthsiKhuhbZyxYZ9crl4dn59ot9/QkKH75qUU+OxJdeVsYjcDJ9cDeOTMDR6KPo7kV/jcLoO7BqXloOBkxso93dPWDvHRBnZia+Vy8ogePoqJeRnRpkmMZN4Oav+6kNarVkG3n/Ka6vupwswqB0W0XO/F4yldo0qnFh/r3GV9FFuq6aJlVl24dFYv6/1YqOCMpZQkrZiR403jPsNyNpwKb9tKvcJwZq0Snf2q9zO/wb19743X2Il5HyHfW/23bCsfNnkMDpBRKeEa+rNeFaqLK6G4RRe5DoMfX/5rrIfTcI8w0kHfdCEfJ+IOhQmBOApvDO+OwZ+gmlMwqv7Mzrc9mmg+l4czz3T5XFcMApwTopQA2X7P/VRfLCxsMrne2rEVCJ0zkQ5HfoFngeWBnfsO/DGPm2PjaIvMgavW80dhaG/veX7G5mj0mGWDyP9F0aT65HbSdMH7r87AmCVXwHZpXxd4I3M OkNEbkmybFwxDYW/J5SOJ+JFYpUlLWNzgt+lQJ5U3JVntZNprc7qV9M6lLR+fj0pBILsKmKgwhcSC9p3KcEpNsVnMalQMGjfyGOXYET6W0EzylFYkejou2aTr3JdQNr4n5HmOqF4CSiVOT6ax5tybWYrubSv9PHrxXqEK880uVj2g6LofOjXKKpQaVR7j9A4qCI8YtmAf0Xm1C0S2vkNYbSY9FO7lsPhoXLtr8q9stUdtQ+Ctzh/amkmGmoTVTiY/izjuTZi828+rDlZn0anUJsxX+ZjR4ImVfZeINgLaB6J6iTNsVADm0+jQfZoL6FxBQ7OIS96nbIC9DuVGrFzmM4xRRowdfXvXaIo5lMndbvtOStnjzM7iB/Kz4X9npVhlcFQjkZ1W3qoROebOsYTmJh48EGKtltn6mMWfFJeGXJqBCibRptDKOeFxuo6xqlKqmcArzImzKa1FiAZWkojSV2hHbFhQZEQXEd0Rn5Ri2VDr8FdKqBADHy0fNKmFfaSVUOls4KTM jUg2+wJxqu5tVFH/RUfWxjDJvqzO8wRM3hetZQpomeYF4sKWTd9E55RYGYRb9cPGa1h2rlqp1afbIvxojxVLOnrueoLgEtpCgDTNhzkOD1wjMvfl0/CiGVaiChGKyQBfR+wWh0JEaEXk2EolEuU8R0JbdsYKkXOg0YL6G1flRQOKJAfOIj0N6y1PgWXOySZ9cfXNz7MhEkwwZo5jhS9WYcnFVBruKJam5mq0tZjlKdYDjVMqwCmAC5WsrRBP37hoPuOhhZ8B43QMS4Qkx7IzR2P6EuORvrSd4qcBnGMyncVYYnzQJWS1sIJ6x9DJv45VQ6cu8UXiO4eRQM6fcwB8RX2DNcJA2uhzVx7eFoc+BtdiD1NYcGSkh0g5fyEVHCCe6/mNBwBlYtIiuiZKOPiaiKiGiayftGXxDfuyHJRIZQ008v5KnigdAHd2KCzGGYdV+1Rt4f5A2Q+PcMmpf9NH7M/y06wovnS1N310+Ak/8gykGqrBhFXEGJaAIRJO1sAg8fiCqKWjM YwprVnNDiLMw3lxd618sHUpKa03ORNHZRZw4n4N6pwY3WB+qVEOLFQmvjIZRFxGpbMiZMNEbbF8xuEzbWEQZLHufZ34U3lzMJMvOPjya996FGJ87CcLyudCWs3j2dgGGo4NNAAu/3hKuQ+l64BhXv81piyvnuvVfl9ni3u887k8rmwkRoUM6FLMptIYUO6IJ0DqPdd9IiDAsozgHz7xZgwHaPwOuCLwpuLhCbuum44OYh+QJwg6sVXxb6/pbWDMSiOqUAQaVBJrGERSiB2ueB9Z3OCAnG7bui/L9ydflW3mzdnogBTop3n++jKNveVTOh0j+AgD3x/UjxXvOZI7FpnGhFQfD0nVgIlWTCvbkTr8gvnj7+EgOdSuHnQLBCQgECOatxt/b7T/jzPf3FF8uZ9fBRBLvql73V7WGoSCfiVY3AOTiA2qUwCGhRZ40q41MTJ0Hykzx/Ms67DqR0HWMrr++tIGkmWw6t5YP/VfYm3y/4I+F/ghH/n35egSYj7DPSa8D/pc9M fgraL75WckOJstoTnT46WxLM3aZjHHbdo+Zj0Y2f1a7zmEn6Rrblebgf3RexeRvvXx9ChwEby7UD5b4lFhzoXTLktAF00Lb6nynpQD3oh5YvpDsaMUV7UQifNRSVYnELv1wJX1Yg+f0AvIuZQAteqlFWO0gGrazEgqfb7sXIb/c1Gp8GXG40YjDKM8j11cR2nU6eSrKtSlqN6O2mdOSNY0IQfao9KdDkRjByLFFuEaVAn5BzvbpiJQc3ljSqtOJyqY0Q228RZjevR7G9cu/9E0V+qk1jpHFMZzCpsNQzjlZOOJaOtHuNGNLIcJJnDTaONi3Fy/KRVImlJsXv2RpPHyEOkE9pSEI4LHc5wUkQW5aG8oZ00oukcTkfksrAAyGHR5yOiYSM7onLoDlWig4ZJRlDNaNZxaCWkwmWXuzDf6fV4o3c+Q71zZzj9zLl5MEIyHA1GGdsb7lovC9S6FATbRisAOxn2id3UE0OYVAp2rydaEcoNVGgRe23NOnUVlLjR8TSpNjIM awJWCtD7f5g4z8OyWLl2Klk+ciKUk7dChSLFeJ6YgDxkhFeYKmo6w1H8UcejTJJQRs1rKqgjEfjcaGbEbM1VVi1Zj1Et6f12e9gDijXIyg/kOKkR0i7O2qg4FITSniwDtWDGJ12oNZt5czCbXJf0wdjRtO/0XevJarxGf0IqAZLPRaev+LdNHrMaG3Hdt7WHd1Ks1mDwsnWIEVctaLV8yOh1vpyqjYL1dWLnlKIRh+ka0I9yiWxhnYEw8YJUmMbi0qfLqhXiJ7FmebHrQT+wJglsH3VktllL3N9oIWMafrqw/mha1IkGGcL+9MLH50Fh9cJDalYIBVWDYJB2M19ASK+rNaQHij5ciMCxJB+s1NCeooTqlxrGan6lFAypS4l1WnUoFXqMVPabITCdWMBV6hhUD3lZLy3EiVj1ypJofYx1QEApa4zrgtgLRgKdUjqKgl0bbiJe0rgnCdZI1i8TbjRZJ0W31jsFr8Q1RfhczjcgYf5zRylHKNGelaFmcfoo1QynjrLDM fb2t0ttcgAi9r/5uxZ5U1Vf8kzUT0vC0oWUQHHqS3hIac9ksD9/zdqFTWPLYKAFMCSaRW+wOcRIYd3hfksbwxHew5NapTUQmVQDt+QG3Gj27Muv/mSEkpZMFonXF7PJZPc+UAbFtTdud00vKtvxQklSuvSgqjM3/sf84NvNT4i73vQCPx0UYDvYpcoUrjkSuPLGCsPxukiYd+jIzdzTrdlDMb1xBi5D/21NRUDnhpAIyomMFXO1wej3DwTRivNGUE1ahXuvUuSXlBLKY+TgNrGwjdSNMlwJ5AlLW8NOLL0UPUQ6c5SQdfr0lQzaB2UK34j7qnfrVh2L69MVHVaENz31Rw9pioCd3yM5HDPGV7il7mlxCNwyOqjSrPImKpdJoWq1CFJv0YlKZ+qI+C8S7SrVlFQVJsphnXkcdY41UQA+9hO9Mu0kosUwXb54poOvYvMyx8JWRxiUFP20V/3/XcmkIDwxT+R1Yd5ArVWPxLdOkRYTRbIDXy+SE+1IGhctdPjMNVnvRM iDhlZfKDyWDlQDKrwSlyUiO26oteUT4vEiV3lZaglqnk3MaZ+OKimgWuOhOmC46V1j/vToAm2RhcX3ZdqzGPV6gRSTODWlB1/ZgjbMV5z62ZKG+IgHKXO2ZhyA7k9QGrZDEQLqo4hqlTHySiJZMXeAkqRLjmY8VmTSFsMmwfPqSJz6OZjiFds1K3oBKUnpTiu08VCVhURAc9G9dtkUAeptSDqlfs++cYnM4p002PpL+WbnxiE0g2PZ395eurlTlN7727q5uOuyrIDRlsh2boIi9ikebB+rlT+/AUsCcQJFgFRphVFsANR2iJDNQ9DtxXjPo3/47yY65rkgfVuFXnVI0k1qFaSHum94UcKmHpvw3spchn7tTDDy0kZtQ2TCkHzk0rbwYhpcfrJ0yuz/svFCuheyHM8nAS8bt6hl00hHgQaVNrpHwMxE4w0xWqd7Ku30F4++KKLDWJXiijWevtWtRY/WLxj51bnM7JPA169Vr4L0t7yrqu+MurjqmCvCUL86InYhnIM 5HZfgNEdVbeq1pvlIEXNt2+QEBHsgORcLyxPZMEVpn2l4Xez/NghhCf7krem8OGARzNl6NX/GJwEhB0VmNeMkqbb5w6PueGkdIK4LzEvXcuY+sKKSrlKlZqV9Rxh9sxYtDYqunZENg4hFM3ZDhcqrzgO2NZqrfcDWlD2agVICKQp1BVunX1dCQLhl9HsMXnz9I0BXCUf4zN5v0p/OxB3pQdnZnHrGH41wHxsoJj4oSqXox7Yglur7t9P9ROd+NvhPrOTH5diy1Q/U1McVGPgP9PfFQCCvgcljBKKrlbpWzoYG7SKHG8YHqkOBTpXaVvsNTbqljlcNt4Ra8VUlpTZMqAUiM8+FwsEB6W+Ji4gIidV5FOsQGqf25tv4+JL59iT7+ojooXd+YwrUhVoGwwdMrvltm6g486gEtyscs2vMFR+xkZLfCiDnnDpkOHTaePqA4cAp4D9PLVIL4IxiBgjF/kymv1gYAFSRzsWQzgFxqMj8WMVQaZlsc15MTFRBtGJLWSyzwysM lUbFn3hbajFKz/pU1dHFvKq8+SO3pofPn1mcsCloFMH9nAWoW7MeatVaJWPdHlul8zGq/VaiY1Sg/QIGePun2+mTYRM6mHGDQEmcBKF8806iNloo8W5dEQ5SZgoXZQg+a7d0Lypc3t5StyvEw8c/CMBqjOESZU6gMUPL0IRS93MbET9A4uYQEFmRkGfMAN/qc87Dz95xtnP6YgEAdJE4oarQ+xRIuKUhl0FmkWB3WEu48uJTB/ICNm4MFHM+TjsGyl51ddjb7OOw8Kbv/5sBNoOrUsTieLMi9R/nK17TxpVuvuyIwnu9jJFKGecuVSfnw6hBlj2JQDSA+vzC9ALLspUd6rwhp8+uytfU2rLU5fk4XVp0Q0JaF8HIW0thnzYDitnuayclVx5iLHgIqQEuZh3wXpPsZiAoZMVqTamCu+nbqxa5ETsx5wfFI2yjdv0ahKyebsAZYANSSdokrNSHpcsDMptEGdv/aPUB7c/ny/N0nds8HUn7aJ5vdkrmZHRF4yRPhA8yM PZgjoDD6DwWPacrqiX0jTgItNozINRoXmsnBtMZhkHk2uBpIErpQp6PuI583oNuOZ06TQ6ZQQxeXs4FdlfjKLkQQx/K8LU2mIdwExI4cHovMqNR7OHodTxTOFHo/HyW0FIDAesdZO4tlCQLlnaV/vihWuA0v3GPbcffTo7p6HKKnJWWKUutwcTBKp1ChxNrpIu+4bnS9K1jg6rpE4jTk5DZrchP3KDe3RW/2soixSS1w/bVRZ8aTWR6JfxFD0hjYVkmGbDVmGzJ1jj4GdXx/kG3IH8uW/DAdeAhc+PdgxkGv4b6fc8PKAAYB9i1caHmzfqWyDHDhD1+GgfurWL3n+OcM5QPRN3o0veDe12o23EK/8KP30v1uxeGaVlHzjYZG2APmRh0/HWRwGAg8rB5GR2z3QioOJL1uDFaMMyLriir6DXmINrfQlahG4qtyJdc4qC2XdWONi/cE+tFvfs3s3lDZvrjNWuHG56/euLpKnnPpXVzDI0Z+I646acOLTPKKn3gcKBZFM V0JQRbvOIIQoXLrPBG10cATO6ubKg0IVwsV1IjQw5ugDYZCrvXCCMcKELAWzPuoXZUr5IZF55qvIW8dw4ycl7patFMjQG1aDsRbNJInFriqkXMSGid2lO91u59J+SxlnkWEU+GcQQeI2+8AnCNOQEMyOoLw1BQF/EhGh551o0dAoYn4xglN2UBtnbOOVBpSEoUfiEoMEmV7YKsp7SKUivoMaFXWUjLRoUCR7ZjalyJWXQKvhS5EPWdI0d/P6azDRw8JWG5IzQT3+e06MHB0eH09sn1zdHG8VSyT97cU17E5P2/D42nle47Vj9woY9OpxaI8jZtj0uzhqFi4y8Ya/KHd8eHx8RiQ+N69xkp0BNb981JcQfgV2Pi4uPCwulasLjP7jnppU3I8QcH0+6SkGYByjWMV324UNTavLbX5cPRgcp4Ra0PNISQSjEcas/If6Fp3zxU1Nsszk6Ji5hSxA7KCjs6+joEoWbsikrHXAwRw/ulsSM2UjCcgC3/Ei/pXPnLvOzSswM NHmlpHg1mwI1UYPZGWhriZknkUr8MzkYjAWVMv61ciMVO8mAwWOD4ixuSG5OhxcX3BlvGvudT6eOKcJksXKFw+7XI5POk02skU5IdMJdDWFgLKEcfuOy4IbkBVGCBP2ibX1FUSZQPaNtcf9p5wJNQFk87FF1Xalm0TymJl947FnRsBS7XHjazs/hG2IfwDzcvFgMjOBRFpGPe6fmV9W/X3IUFOHO1iIk1hmJlVN1DWGhkfr977vzBiUpIGeyh0tYlDGvEoQW1Zs7iknBZyTmGTkRB4f2xKEo/BYVdd6zMkXsCjd4j/28v9ekWE5kEzrSV6lCdqksurph/Xz/Wr0U500o/kcimnq/BF4WbnQVCyUqRaDNTKHDeDOxK9NNLRDq5SCepqmP7MTYx/Nh1Vc5CnVyoc9b7JfJKJn092UWMeYwitqem3pufzs+3E9vx89PdfAJyJgWTvjlKgRKwKGgRT2qgY/+7HJoGRWx3XwlNPzD++BadidkgDZr7vLNLWA07XPdk8uhM iLnFOAF23Ce7ljUeB4IK/BBrx1fmJ1iXkRJwetzIcddS9ya7V9Vh4Y07wMgHB6R4UDWMc73ZF00f/nUNj/57FO9fxBnEm+68YoLPzsbHxzA0qCe1zcjGoH/LUq/mmLVz2FLxxfPHUerEQ6QvWiHLtGjwiV7a9iW8g5/ciF/h2jdHKIQhMMBF+POIAqgh36FDRLQvWc1uzyj8K+GzlakL+lmIHvpVoy22Es3I4rHIWO4dN/HD7l3+yBGBmB4uVx2K1s23TDckskXcmlMmuYLEq2Exopsg7mWVIt2W3s9hxLFYHE8wSNP95BkB2DpudzeLksOCN3ERb8C1WSsr885j7aMw9DPotBv1uLWehcXyh+VULNC6CfEe6HudKE5GvyPtG9DA7lsvfuQ8IfZwnSUb9JA+NBMJYdls0YgSP5FMU8hRkP3Ff/72IzWrQsW7fdd60zbRvWPK+cvCG2n2ZXnGLnxjGhdqEAgnHRhw0vrH3fSyKUk+p1GiWSGUW2fKNETKZs1niYpQM KyEZZzMBf/nFizYGjtBiROvPIEc/YQ2Uu7PsYtnNgEE5J1unVTiy7+2xJtjW28lBADpBQY1yo0Ga0LK1VyetTjw3r0xvlamNdDaC8bBcxQo9mRjOXMRuPSh3mU01kE6WV4otRqzd+AvhKr/7m0PAEwor17gwKkgoOmXgurkb+QYGLIbDqcHxwvIpfJHBgscUCgZjNcgAUm/0RswjMxaiooE7/2KH7XvDzCPS5651TngfezUFeQGAV/eii/oDYXoUPfBaBmr3RObX8qx/iLgIeRHl/nsPu1aeHY0DdKZS/zinghafmw8v7ovvew89LOJewIRuMmIR/a13vvLJhR7bBuY5kpZWCEIcR8KrIPaKXiIi3yw3pzoof+B7/Yu9y78AuRaYWWwy1k7ayUSasyi/YLcjpFjZldH6KvUFuAKbIwC1ZmoENzMAsmxKdpc4Z+MVL9jwQbHETZv1SVYFPlaEGz/VlM1R5prTjSN04bDcJ15HqrrrhmIVduuwsD5ziKg9LGzYjY3HM p2FtYp3UncaTBhbq4dqvKPb2cCw2S+A6eqdG/Y1VMgG2zeHqktmNEJsS0J3s5oxefx5SvB1Oe5uGRVo4BzB/8c0YDaq/h00dOD3ulPd98AX5h83Mg5RqCZuU7KaBHsyUqZ+EZ2IS97X4PYWxBbafGmrDUJzNX1R5CT5V/5M7VzMX7ppa/TsoP6/tNbtWbupppKW0xyrjiqwj6pT5qTLPYl13YLA8Kco8ZPc6Dy9LtX+lhOLiP64KYuNO1NjkqGw958Qe0zb4lZ/Sz+wM2YjGTWFgZ0Iz1G9O/nuj142oL66x0Yqn290xUS0tgxYS9/WTdIY+a2Jt7gho9i/vSwL+fvKk3Susn/HZfhymVC32vnbjmfPAQda9HosQgDYY6wjAOeJKctBuEuIp1BcvBbti1EylwEhYS4rND1R0vXJwLKS9+7LthtMdDzSY/I18qZC2575dkmx+r1zln+Qx5K0qJIfKsrbzxwnYHCxSau9omSDI0o+o8cCDytMJm64vIWyUn5y3/r+eM H9t98gpRiW4UmkGlU1P3UVZcwASYnJ41H0s8TrVtO/+bviMWGXYuK67fti9qqve3WohUhkBsPnR3edzrhVVmfoiEoM/nAhKJV4Wn+zrOSeJGK1aT9e3kv9n6dNxTTIdDDT8VefNe4a+bvun2KM+rliCH6hrdr3momIjSm51PPrz3vtevd2joNbSSS02hMIgNrxcBwO27UljY0iPbEPrGDYRFwEAS23LAivy8YjsKivdw0m9RxChKc4I5EvTuHOQaFbYRTJhYBKsj0dX16+pPiM8XUpq/tTY0TAg4tBB4NmWNnV2L4cbU08bmfW9TWhYI/erbskITLKpLee8F2A7vU4IfLwVRWawsaHurx4pa5NobiSQYZRQcP2pZ8mu+xapjEy9LO1etaSflBfhe3GRedI5hIz0+vwWCZVh0Ff+La1QwGDaEuivjRqF6OIEDh8qunUxBQpRKDGzv4kiWs80CjTmIRmWJlga1NgTCeiM7+aNezMPOUfIUAV4FuZfb1kdyIO54rNMAM p07mfLzJ63Xoyn2XW9aLKCnSlJKAl8yqqNjNTcuvyQ6f2uaTS4uIesDLtWFyDIpN7piHUoUR/Qu+sKLNKrG2Kn9r5kUytUzqfPJgj2A/wwOAyFFNUU6O8oB+e0NySYzv++7PIut/6h1ur1guAkAhS3p70J8ULsUS7NdO6insr82SqxenO8ayXmWW/kfYTrTxeuYKhNCeGTN4iWnlD8tUj2laN9nbl+SxeQsseedPF0UkhZXLSwaSFMqkQOsQZQkBsBfuCTGItAUfnASQbsieIAlx/ab2NbTzZaAbZUCbAJ0FPiuGuMHckFcRQq4o9zBRykPAlOJdS6NkSqEaDpSZbv2AqKQhHES4gcYCs2oHo/ykj192GQBAQRHDi+Od7f9IMID7/fiw66y6MGQ7BO4C5+kjQZLUnlgJJk4OdokWmTfvIArMxUVdKhMO1CviFuyAwGAyHIFQCBGn70caxgFXn7fXe6c9g0DIYFwyNdb8Bdv2A8lxzWeGvMAQGZOcXNE8ASzuRZJoM vHAqGR2Uh5FAWGBxRTAJz4MngaVESHMYLeR9baA53y3NrDxRUxEAgYDgWRn0PAZVxtRB5iygWxnOHCCHc6J+6Lcs+pM0JDLacPx89IDzky31Js73NhK5WwNy0KFjACiLuQO28gpygkFs+Yfq4QXcUcnwadq3WzQqBoZx8MHC9Hg0ji+FOICocAt1S8jGx6zVT675iNxSwkgm+LeQ5Ohu1KgxD6BrO++XsLFTfEEmT3J4h6UZHR776mWROsNVfZGP0VX2PkcqE11OlUlk4V5qm2uusVTkbnO3n/hApjH5uA4MkdGJUvsNf/5gFCHQ9Ar8Xi92LR69Bk8r+UdK0Almc1LlTJqBpF253usI33G2CMjAvUfCgMxvYUN/e/dX2kmCJi9Hnkq/Rx0Wa72Q/MNyTCC3aXb6/Hke3ZaQXT5CuKGB8jX0QB434KWxqoqMuI6krVrTY9U6PCph/vvJmvr7IEIyc3monR53vpSAvIm137/j+E4EmP9hhvx9YDk5P6To5sdYp7NzM BqmmPid+29PA068c3HQF+u/drpNIlXLVmntGDavJYMy9M5VI58ute2nfCe5qHO/rFC7S7B+094buMXoXPLDa4K6dhhLaBVsNwWuz0vqicrp82LP2wVBM6P9QAfwD3X8e+PetnlotDb4rF02Eima/51W02mTNuzzlsb3+YwxnzsfZx+Vwub4zm8Xk8YCFyG4gnZ3MVrgBxwhx+iu4gNeEz7aV0KtqHRJdxO1nxaJzlEnAZNysEZSYAFsAj5TKfI3P4GMAzznQ8cQkxRh5fyHyulIt4InsTFwCXIj4hxAOeIyBdlr8/rLs7bH9+vsMCL03l459qgYut2zHbX2I2YtxBk5rJG5+NN2XB0XBj9kbPohCH19sBwwucxvhPJs3I1dDS8wLzngc+Tw1MNVa66dGKU/GLRH0KO9iWOCyiyNEqt8hXmVMS/VNuFAVGVgiH0bRX7VM2SNAeVMe174JHm71Ok6VU7+uQd/VSj9plcz9qQyQX691dwOYwQx7QPmrw5ET46kimwGvM w0/RNnrnAoRcplpRL9w1nrt+/ftnA9LmYktIiKc3QsbrzZ2BXTVfRg82Fas7MTEVR6JKzPtVEz6Zh1HWNd8VmUbSW6pggC+xzfD6sXandWKjVaGODY80aM2DTZUSmxbh1w6P1MLOk0qKf4x2ucamAhwWiO0pHU3HdOtaAfuDp8FTAFFr0LXDKQjqpO3k0knwzf6rf23epXVh5ucVeos0R1m7NTbLGp1UMRB08X+qRUeJ5UXpnhM7YbojbSKvdAaZ26+LUkf8d9ZzqmFrJ5TkWt8ZY1QExEVoNPdYHqJUGK0CKbHqsiyjPbK5OTWmuyqzQRTwC3lldUrzocqbERRMqqFvBSbRPr10fLJZp0l0W/VVaclX/VV+13tpoBcIzWbGYHFIONYFyf8WbCv29sZqkZZZ+hSlljaoxNOr3EFexsoy+MWJDjG0OI9cmDqd3/LbAwXHBN0cHtXiBYgvoP3GnHkYrY8xjRdh+7j6aE1DpFoQWSoxSZ8eg69SvDkESZ4cgqBm/SFcM S1vA4jFRIK7UBvrwPl2PJPigkadgNUk1V+hDwU2RCOwGvF0WgwGfa6YQIImkIJ9i2CXIbNUDG/Y/qZ/QfKXBCi+bejznq7QNIEBKY46tT6e6sYOk40ezYiRHsx/WbpjYsN6LgKQJVBtZ28F8usf+/VVFKO641r+VlEsqxvJxioWeK0pQBrjHRkQnq0OcQlxLWXFy8HXPFrefLm/ZuIuG1yJ5RuzQSHr7C5g+o8sFDMobk1QiRg3j7FZBapNLw4NoKkP3Qw48hESDI2KqSXSy70SRVYzdX7TsbtZU4DLN5hF2PuDBKqaQI9XYaoU0KVEvnImHacBEEClYneBwOqdtFWVxJuVO0GOT8iTiN6rPSNEBCAwPM9la7yhgmdpTc6sXYiYrwsLgGsWkO0a7cp1rJhVN1fG0Zdz4okRmArN+ozoEg2uTIvmvBtNjNTUdgyDuWpsyihCyojQirACGfpT2AUxbDDdM8tR00tnHXdvgPjxsIEql4hNmjRuFIB1mEsFDb6emAyrSM ptBz700/jG7OpEARYsVkJRcMUxAJObjzYK1CtXmm/w3WLRutrJCdwCkjzlffWUJi4GLsC6YKHz9WhkfGRkS72KYp0URiN0rbahyFhIsSX7Ki8jvb/zqnpNRk4VJN72QPbN7b3XUEwOOWOcwh6HQjbN8GOs49mBa54wXH8QM3JEShsTyC7p7RqKd9KA6ejk+Dr0bBcKKINCidO7Akh+GAJqG0w1HM4FsLt9s3Ai1SbFETUVyT+B2QRNWeEG4GDViAF6eseZJx7jsFi6hj4kE+f/mSWbf+TQJTW21EWrvy8LtJiwrCzSfSH+wt71/9A6lev9pvYmrQVAocxVcACW0mWbGzMhuLJnYw9suVcB5atFmqEaQ72/uFBLvYmP++I6W/BKHHpDzjyRx9V7K3z1is4Ue9FrldaJGQ8D8t0D/QIcnNjV7pvKNro8WBBMvpWMTNRtU1OjlYVZ+xN9Lobwe7cbmvrnoHCZbw7l1AvMiMXYMkTE3EWk23BSbEdK/Di7SyGzLg2zt1M Xczav9qrE0cBnZtWhndMc4778h0C3Hjb5mKgYT8b7YgV3pZY8cFmsF5ie3PatVt+3t18fM16Y++uRWeztPu7u3MAvz7zj4fE5eA8llpJJjqVcpMSRMimxlKsUahFVtIBSRBECZW7oanBtEhBGKadcdGWZ5HEKOX+6iFrkXZTbPV6B7s0yeTi46gB8j0nZElhXF7jFY4eBl4ni32zA/wW7QaEWKOp1zH0cMgoDP6nTLWmAN3qVOPjtxIMgch3Yy2QNguNhQih8x/2Y1QGlC7S94CgM3aus1ItG/vpbhlaFgUMzoPB1vPbob2hMLQRP6VgX9yhRtAOGxkID//l4hAKtIOKm7CorQ9H4+WiU0ODFNnlnx+95z+bYCjbX26AFaPJMuHrzATbGinGcW7MDjfCHu12cWuf9dKi9pwWN6Yj5i4CnJxIwrcs/NJFRb1BIIQqsR4H5UPgBJKoGA4vQqhdiUQjYIAT0BI2G2yZjCKzKaCEKXQQQEQ1osBJcjCQxwGIItAZOITvM Jl0PAxC2h3sm782I1A6WlA5oLvXAk9gEMmg6Vpyl4C2EIOCIaiakqpcEL4IgqpcoOBSO7g9G7HJ8iUxHIWBgYydWiERY1huwAREn88pzCTdJ0T39WmnuyYV7MclmmLDNmuTVUyXfD3zNphJmyH97wWWtD9syw7xIW0d1iZFaOgUm4CfT8KMiq9pdIGjiM70tNPgpqfJ/SNShcqBAHsxznRPp/bFHLREEiPjMmwwe4IX2DIpSP7UEeDi3455sJ8RaJe5U/xoi/U2+CFi9+gLJqC82eh3E0WtT4jQuwR09U40lbyQ71gm06g8xAj/HzkudGBYd9+UR0SeCEpHuj8cxn4adibFRk43x9QLlZ7d+q010si20KqfdaiJgA2JFw3TAe10ZCgOFExWrBnAOlrelItPNwTivHdObOFwbBD40i1mzfa8sZPCBL9oioCSYQFhSSh5yjVLle81RZBl8wFLZ+a5UgSL38R7kSCdMOtTBpGzcbkBDFBBGMNV8KFggvNkAjdW5wKO8M 0gfSHAoKI7lyE58FU9zaTT/v6bMBgjkHhVRAQFEsyJfV44AiUmkIwkfoNj3w3ZqcR+8BxKWh8YnsHE4tXD05OfBMT225NZMLgN4jE3WAsEoLPsQeCRpDYta7qLT9zdJXAXawkDpJoo6Guh4iU0RDXURppkJhLKsbjidhqLBGP50ks0VKCjlgstyiIOoI09LjUbBESA5OlhECi0AK+Q+pZ17hjb/WOdT0kIAIvi+Df40fIZI7da7NlqCOlPOdu58wTzXOa7bNczVKp2dWVsG/sOv9pGCD5EX9OfKrgk6psMDLv7ZODFwvWYSEIMAeBoKFyWua2sXBM1mLjkW1xa37a05vo/CxgCEXEh+NhSKonGnya8ZX3usBHF5Cl+K7zwUBhKIoHBp+K46eJerk2iVSszrfbZmzAo1amIDFSKrLLURQ26y8ahp43HrfGxMHQy2k+3seG/ibhLHiYE8QBDcMkRbkteQsiT3I5gzrQxSmedlkEDOoApTBgeEvhKqohg0DtYFIWjhAM 5BLgjgUMcmUdl9FFxzaayufiBATzyOwq9KoYrQ8O/vjuHQD2nzseoMWDHB02b8kVZm0oeOG607YQ2khojmmCbz7ITemBNmkYQcOghGXkISeSo0ICBBYaAdsD870xFf8AoOcTUTCG/X3kbOY7YjhxD3kYcRm5HTJ4TA2k3K/clsIDUUx2n2OxE9mSnJbLkQZdfp6mZ+uU7JvBq7LmNHEdu00P8tCY34Og/2FCv1whhoHCUDxilVlR4svisBSw3VpFdkygSVR2j022kcSwfrAh9HR5wK8BMpzt0irvoXQHx9Df0126MrYwhBf02feBByEQIsKeOi9MS2N7JlAtUCLwoZOokBdIBarI3G6/FcY99GSNEE2KJUQSfrCfGEgIz/wshGPaj4Ic6wsF/JrmTKbdsbJFHUKiLSPQFTbGSzHouGafDwDaHaKRtaFKjmEBA30S5DN9DEy+jsb4n8EyuluH0lUZ94LcchcOCQCDhPttRRAfiELzrPBSLW9qmIxIRXQgdfACB6EeM GZRCIJEKGwiYHkMc4SkuhgWi27gHC+YP2juZ/hUjAYefeXkWisN329EZe6yYJWAp/HBF3zxPPx9vi3LjdKGbJmatdcxEYW0TQ9/EIPGDZsHiJXtJ3cP3o2gSGtoX77UfFtNwidEN4FhdPIQ4jkZOIK6hxJIV6uRAxGaDDArnmgJGXC+oCwUYWEo0DzvXpGb1R3mAc09MZPY7Gv6HGkM3ppg2IMXjLNm2Itq2XVVNbgRhHFQO8FEL5RukiOjyR+tkCVEWblYFSgUmK5tCRKEcUki4Zy3WhKH7uUIkuCJrawBDmEE46BUqVSr0z3yRtl47481Jw0wnX8Omh2UoIRJkdSuevEWIlOvmyCUjBz9oXW9XsFVfNcdWo6n2z0I3CLYeqNnbs1374qA3WW5eDNx/Ibaref+/TxoeWtFx0e5KRQLQHVB1gMLy/4+3EKX719nE8oUtUqe9FYfehEbg8go2YxCLd2zMIhoCYfL4dM8uOGWSHkK84OECyo68lk+fi0YkY/FiXLhdM LGt27qn3tIqPf47nhRinQRrNGWIdWgc/ucYOa0lLNYFz8sxgv2IsBbA3Ex+3ps7kvz4zgMK3tG7FUhT6QjMiIq7h1O6/1FMbCrKpiWmy4W47/+j91zxGf9//BEc44lbEY7z8IY9wpb+ybqCuLe8ujU/ljuT+e9ID53A54/ekpJ+lewEDPAd8xZFE7YKTMKUli/i56LrVDBL4A3NVEO87PgPzka8hSgtz0D8/q3Mf9eDAA/vBh5PbQHICiYMJ9BEk0mN6Hnns4D73g10XkwY+b0j2sMHWyv7mwWau4NI9mwKikKuKYiw+pYBAVkPMfhlB+OxcmjQGBp8EmP5u5jSCkSBSX94CHRG5SDOm+AUX3eH7CKnpdTM7vkI5bcSsgzJ29dnH94kITq5VVMqabUdt04OMvPkQFILzzJPIUoKQcqcLHrnONOTNS3mqw6Ndr8LDBpRHk0F47RKGpV5+OM7Aew76vwycoGGjYcEsNJ/RBIUK2IDGmyM27+Fmq8Flo4yrMruNRkQhM yl/31HCeRhl7YUav0JIC0m9WH9EhNTOVlIJG3wIzzALsOAXa8A4kwbkwlqAYkRTpX19m3RMWGAovLBDQUWRE7NHqXYIlTSwDOzdVeIhA3eQ7ChQnp4dIXDr8P/TjzExAE8/A5Ru1Uoruy3jL/o1M9LFxtAwJ23lLldvlSvYYS3Dnu/EWiMRcfkngKVNp6lwIvFm0r6DhLYMuJAlYfJKFdDwKTnyZOctKO4tDoXZwlTh0GGMQ6lvVLJCHW4TmEJubyElITfQ5op3QvD6XQiHmw+xAX0z8B0I/puohSmvkJeFLtrpoQFUI3oxzWTR0sLWJEKoh1Uzfl0ji+neQC4A4pD4y3WkJDjIZAnZ/PHbc1tza2q1ubvFk1OReJAJVP3/I5TKrxwDA79hcVa/Q2MDAeCI7eGQUoB3LVjPBXRtZKupLZKf2qYjyQw4Ce64MMABHgB5vhE8yBgaH4OagABX3AEWUpJIKs+ChfjTnK1MkS/4ZaMiDTpNicAj2iynqwSNwWNtBzbCpM CMREUPHbimpcHVlE9J5OyGczDlUKOwU1b2w6oA6n+KqjCn0et2Ep0THa0YnXFLyiGfFi4WLF/iRp9UMydH1rgDBTxYcBr9EzRfvRLse7Sw+ym9EChWjXMqwiFlXmCCcgEx3G7az5crZ9eAjy9e/sZXMOLHAai1xWI7NY1+IU+yDoa9giAd3EZvP7hPu4LVK2oEOlrFEXwCL8Tenfa+s2lnb0hNoycgsF9dHr8RICv3p1G4gCdS+Pv4E6R+ZvOUuLmhDGUUxK/MzZKdvNr6S+BRieITNIMiRl6Wma0URWMsigl0227iqlOUDPF52nkYDvbt2VC/g2Bzl6cKyAgLCKH0vID4ykfOZtkk8AE+SWyTh0ldvnFMgv0hYJ5JlGy45DxKrbYFTWbXKbRbyHre8uq/K/JyNOMI0eRthLIrWs3Hjg7Wc5Qp5YCnI1XzrsEszsLpj0BxYjcb3HOjsmqHgD9cyBI0Gm7XWs08pd0a4f4JM4tukcBmpa4LaQJz3mL8jAGzA8MbIWM UQ2Fzic44NPjlbhFwKfNQpbA9S2n5HubAL2VwHCBpkWRMlxWPKC91hbzemWbAZQMuzJvX+GKIJOStroEa4OD+gZMc3V5eo1dk8xjZGA/zzc3FAGL53g/ceQUYKQB7pJqYSpRBQuxdewQE4sHeD9ePNlwfXiw9e6H/YiEVuheXYiYVj4yhkM6LyQN/9qHsy8Sp6DG8nAV8yYOp8E7uxROtAFTsoKkcGV5VZWdJpWqJo19Q+zUXaaIGU54K+LkaUWEV4o2zH+nGQfAJC0WdZk7QLPwY9sSF8TuEOEIyV7JuEtuLfggdaOgwSxaXcBlGvWW8unq1958uyTSLgdHl0BXJxLth6nkMuWbjEol7yet8fyV5chXpRF+pfhS6f1k9To+SYifXJcXj0Hb///5VAOOnwOAiDbP1TWh/Ghj3nQw8aciIPSmZWmPmcHaKC+aqhlfbpseR0scNYTu/8kqwG/TfDjllDFGm40ykc3Ktp054uJWR1SdWwQyUwyjZOcfz0YGKtiEj3MrM q6Vm2UKqKYrmtR8zrkLACNmLuTSuBlVNf6qq7oXaVUykjh8qBcVxxSXpDpYRIXb+DI55xfnOeppEkFF4QU8xOWlELJhxHpAjuF5HH8ji0jYXT+GiM47Qbs2OPHUruRYNmOs21E5tGVzWPd6Xmx6k7gVvitke0XAJCCEHv6BnczWj9LqWNjOzBpX61QXu+3zPkeabuXXTi5vL1CkgSz3L1ASxuzWT7qNrP/HX8u5lDfv842+tlW4NqMVNq9/JX40K7hFJD0zzoH2iGDJRPzmqXj88DmaCPdjMnBJ2yDbrrwXnmCcLMZJEi8y4lkQqZe6CQUYH+0Gg+/Oa0HKPXyLB5exi+PMqDge88moevzuHxxk0jZG7ycqwCUg7X26XGz5B/3h9CP9e9GpQfpP4f9ZTAH3/989+XrJyajrmVtQ0cPmNRYY4FtrCNHRxDQkaNgiUaPEciU6g2tjQ6g2nHYttzuDy+QCgSOzg6SZylLq4yucJNqXL38PTy9vH1858ToM7m8oViqVyM p1uqNZqvd6fb6g+FoPJnO5ovlar3BhDIu5FZ5fhBG2lgXJ2lG7n6nkbpevmPR/gUth2M4cZyuxjNq4wWJx5mukY6jbpxvv3TP0LsuuQvtya0KHvvlUMAPEd1QytsD07TNb2poSsz1r4rTOEu1sUjLqEKPPTt06NypNxDlGZcEM0Hyd+mY5j9Ly7+ZDx3G2TDQrkOnLn1161Ebp6mI+4bm7ASI9AkZQItWNbGodl3qLis+hDR20EwgmFpz1TSbqWjxuMHECNqUmwMmK5xAq7EC2mUczzPhhFspTFin8z/W3zGT8eI1yMd1WunQv5e9x123IAyahxOHLnAYELthn/SmYMpidAR9z7VYNpwnFjI5NJWy1XCDIZIWxVHdHDgmxyNDkyYrKjYXlcuMus2AwGMW9ovhVwZHs70lAAA=) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #1c1e2b; font-size: 17px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#00684e", "#efd4fd", "#2b358e", "#ffdae4", "#2a358f", "#383e9c", "#9c58af", "#036242", "#fedff1", "#1c1e2b", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450)M height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; video.play(); .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; = new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #222222; font-size: 17px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#ffaa00", "#222222", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { text/html;charset=utf-8 <!--- TEWZ1.ETH https://www.www.tewz1.com https://opensea.io/tewz DUST 1AHV2TSdVsydxx2eSMyxKg6HfAgXAKNafW https://www.twitter.com/tewz1 https://tewz.cent.co/ TEWZ1.ETH <pre> ...',,,,,'.. .';:ccllloolollcc;,,.. .',;,;;;;;;,''.. .';cllllllllllllllllloolc:,. .';;cloollllllllllcc;. .,colllllllllllllllllllllllllc;.'colllllllllllllllllllM l,. .;llllllllllllllcccc:::::cclollloc,:llllllllllllllllllllll, 'collllllllcc:;:c:;:;;;,''''''',;co:,colllllllllolooooloooo:. .,llllllll:::::cccllloollllllllc;,,,;;',:;;;;;;;;:;;;;::;;;;;,. .;llllllllc:cclllllllllllllllllllllooc;..,::::::ccccccccccc:::::;,''. .;olllllllllollllllllllllollcccccc::::;:;,.,cllllllllloolllllllllloool:'. .;lllllllllllllllllllllc:;:c:;,;;;;;,,,,,;:;,;;;cllc:;,,,;:::::;:::::::;;,. lolc;;;;,',;:;;;;;:;;;;;:ccc:;,',;;'....',,;::::;,;;,',,''''. .',,:llllllllllllllc;,,,;;,;;;::clloooloooloolllllc;'',,;;::ccccclolllllcccc::;::'. .;cl:;clllllllllloolc;''',;;;clllllllllllolllllc:lllclc..coollc::;,;;,''''',ldddol:,'. .;lllc;:lllllllllll;;:::;;;cloolllcccccll:,,''',;lxKNNNNN0c,:clcllloxd, .;xNWNKkd;. .clllo:':ollllllllol;,,'',;:c:;:clodxkOd,.. .:OWMMMXod0XNWMMMWk. PEPE cXMMMM0; 'clllllc:clllllllllllllc:;;,',oO0XNWMMWk. GAME .xWMWdlXMMMMMMMO. COMMAND dMMNOc. llllllllllllllllllllllllllc;:oxOKWMMO. OVER .oxl,;dkO0XWMMd ;ddc. 'cllllllllllllllllllllllllllll:;;,,,:lodc. ..',;;;,',,,,:lddc......''''',,,;''.. .clllllllllllllllllllllllllllllllc:;,;;;;;,,,,,,,,',;;;:::;;;;cc;;;;,,,',::;;;;:c::;;,. .:llllllllllllllllllllllllllllllllllllccc::;::;:;;:;;;:;;:cccllllooolcc::::::cccclllc:'. .,llllllllllllllllllllllllllllllllllllllllllloolloolc:;;::clllllllc::clolllllllcc:;;'. 'collllllllllllllllllllllllllllllllllllllllM lllcc:;;;;;ccllllllllllc:;;,..,;::::;;;,'. .:ollllllllllllllllllllllllllllllllllllllllll:;::;;clolllllllllllllllllc;,,:lllllllol;. 'collllllllllllllllllllllllllllllllllllllllllcclollllllllllllllllllllllllllllllllllllll,. .;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll;. .colllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll;. ..:ollllllllllllllllllllllllllllllcccccccclloolllllllllllllllllllllM llllllllllllllllllllllllc,. .,clllllllllllllllllllllllllllc;,;,,,,,,,,;;;;;:::cccclllllollllllllllllllllllllllllllllolc;'.. .;cllllllllllllllllllllllllll;'';:cccccccccc:;;;,,,,,,;,,,;;::::ccllllollollololllc::;;;;,;;;;'. .':lllllllllllllllllllllllll,':ccc;',;,'''',;;;;::ccccc:;;;;;,'',,,;;,,,;,;;;,;;;,,,;;;:ccc:,.. .:ollllllllllllllllllllllo:.,cccc:;:c:;;;;;;,'',,;;,'',;;;;;::ccccc:;;;;;;;;;:ccccccc:;;,'. ':olllllllllllllllllllccll;',;:c:;;;;;:ccccccccccc:;;;;;,,,,,;;;,,'''',,,,,,,,,'',,M 'colllllllllllllllllo;.:ooc;;;:;;,,;;;;;,,,;;;;::cccccccccccccc::;;;;:::::::::;;::cccc:' .clllllllllllllllllll;',:cllllooloololllc::;;;:::;,,,,,;;;;;;;;;;;;;;;;;;;;;;;::;;;,'. .,:cllllllllllllllllll;,'':lllllllllllllllloooolllccccc:;::;,;;;;;;;;;;,;;;,'..... ..,;:clolllllllllllllllclllllllllllllllllllllllllllllllllloolloolollool:'. .',;:cclllollllllllllllllllllllllllllllllllllllllllllllllllolc:;'. ...';,;cccccllllllllllllllllllllM llllllllllllllllolcc:;,.. ....'',;;;::::::ccccccccccccccccc:::;,,'.. ............... /pre>---> <title>PEPE COMMAND</title> <meta charset="UTF-8"> background: black; align-items: center; justify-content: center; cursor: crosshair; border: 1px solid green; as width="400" height="560" id="game"></canvas> const canvas = document.getElementById('game'); const context = canvas.getContext('2d'); const groundY = 500; const cityWidth = 45; const cityHeight = 25; const cityY = groundY - cityHeight; const siloY = groundY - 30; const missileSize = 4; const missileSpeed = 1; const counterMissileSpeed = 15; let counterMissiles = []; let explosions = []; const levels = [ [4, 4] ]; let currInterval = 0; { x: 140, y: cityY, alive: true }, { x: 220, y: cityY, alive: true }, { x: 300, y: cityY, alive: true }, { x: 500, y: cityY, alive: true }, { x: 580, y: cityY, alive: true }, { x: 660, y: cityY, alive: true } const siloPos = [ 55, canvas.width / 2, 745 ]; { x: siloPos[0], y: siloY, missiles: 10, alive: true }, { x: siloPos[1], y: siloY, missiles: 10, alive: true }, { x: siloPos[2], y: siloY, missiles: 10, alive: true } const missileSpawns = cities .concat([{ x: 0, y: 0 }, { x: canvas.width, y: 0 }]) .map(pos => ({ x: pos.x, y: 0 })); function randInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; function angleBetweenPoints(source, target) { return Math.atan2(target.y - source.y, target.x - source.x) + Math.PI / 2; function distance(source, target) { return Math.hypot(source.x - target.x, source.y - target.y); function spawnMissile() { const targets = cities.concat(silos); const randSpawn = randInt(0, missileSM const randTarget = randInt(0, targets.length - 1); const start = missileSpawns[randSpawn]; const target = targets[randTarget]; const angle = angleBetweenPoints(start, target); pos: { x: start.x, y: start.y }, dx: missileSpeed * Math.sin(angle), dy: missileSpeed * -Math.cos(angle) let lastTime = -2000; function loop(time) { requestAnimationFrame(loop); context.clearRect(0,0,canvas.width,canvas.height); if (time - lastTime > 3000 && currInterval < levels[currLevel].length) { for (let i = 0; i < levels[currLevel][currInterval]; i++) { spawnMissile(); lastTime = time; context.fillStyle = 'red'; cities.forEach(city => { context.fillRect(city.x - cityWidth / 2, city.y, cityWidth, cityHeight); context.fillStyle = 'green'; context.beginPath(); context.moveTo(0, canvas.height); context.lineTo(0, groundY); siloPos.forEach(x => { context.lineTo(xM context.lineTo(x - 20, siloY); context.lineTo(x + 20, siloY); context.lineTo(x + 40, groundY); context.lineTo(canvas.width, groundY); context.lineTo(canvas.width, canvas.height); context.fillStyle = 'black'; silos.forEach(silo => { let missilesPerRow = 1; let y = silo.y + 5; for (let i = 0; i < silo.missiles; i++) { context.fillRect(x, y, 4, 10); if (++count === missilesPerM x = silo.x - 6 * count; missilesPerRow++; context.strokeStyle = 'red'; context.lineWidth = 2; context.fillStyle = 'white'; if (Math.round(time / 2) % 2 === 0) { context.fillStyle = 'black'; missiles.forEach(missile => { missile.pos.x += missile.dx; missile.pos.y += missile.dy; explosions.forEach(explosion => { const dist = distance(explosion, missile.pos); if (dist < missileSize + explosion.siM missile.alive = false; const dist = distance(missile.pos, missile.target); if (dist < missileSpeed) { missile.alive = false; missile.target.alive = false; if (missile.alive) { context.beginPath(); context.moveTo(missile.start.x, missile.start.y); context.lineTo(missile.pos.x, missile.pos.y); context.stroke(); context.fillRect(missile.pos.x - missileSize / 2, missile.pos.y - missileSize / 2, missileSize, missileSize); explosions.push({ x: missile.pos.x, y: missile.pos.y, context.strokeStyle = 'red'; context.fillStyle = 'white'; counterMissiles.forEach(missile => { missile.pos.x += missile.dx; missile.pos.y += missile.dy; const dist = distance(missile.pos, missile.target); if (dist < counterMissileSpeed) { missile.alive = false; explosions.push({ x: missile.pos.x, context.beginPath(); context.moveTo(missile.start.x, missile.start.y); context.lineTo(missile.pos.x, missile.pos.y); context.stroke(); context.fillRect(missile.pos.x - 2, missile.pos.y - 2, 4, 4); explosions.forEach(explosion => { explosion.size += 0.35 * explosion.dir; if (explosion.size > 30) { explosion.dir = -1; if (explosion.size <= 0) { context.fillStyle = 'white'; if (Math.round(time / 3) % 2 === 0) { context.fillStyle = 'white'; context.beginPath(); context.arc(explosion.x, explosion.y, explosion.size, 0, 2 * Math.PI); context.fill(); missiles = missiles.filter(missile => missile.alive); counterMissiles = counterMissiles.filter(missile => missile.alive); explosions = explosions.filter(explosion => explosion.alive); cities = cities.filter(city =M silos = silos.filter(silo => silo.alive); canvas.addEventListener('click', e => { const x = e.clientX - e.target.offsetLeft; const y = e.clientY - e.target.offsetTop; let launchSilo = null; let siloDistance = Infinity; silos.forEach(silo => { const dist = distance({ x, y }, silo); if (dist < siloDistance && silo.missiles) { siloDistance = dist; launchSilo = silo; const start = { x: launchSilo.x, y: launchSilo.y }; const angle = angleBetweenPoints(start, target); launchSilo.missiles--; counterMissiles.push({ pos: { x: launchSilo.x, y: launchSilo. y}, dx: counterMissileSpeed * Math.sin(angle), dy: counterMissileSpeed * -Math.cos(angle), requestAnimationFrame(loop); text/html;charset=utf-8 a hyperportal inscribed on-chain enter at your own risk Conjured by el_ranye x @timshelxyz * Mathcastles Studios (0x113d & xaltgeist) * Aleksandr Kubarskii <meta charset="utf-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>CHAINSPACE.app</title> font-family: 'Noto Mathcastles Remix'; src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff'); font-weight: normal; font-style: normal; text-align: center; overflow: hidden; background: #eaeaea; align-items: center; justify-content: center; body.mobile #text-video { font-family: 'Noto Mathcastles Remix', monospace; pointer-events: none; justify-content: center; align-items: center; transform: scaleX(-1); -webkit-transform: scaleXM background: #171717; font-size: 16px; justify-content: center; transform: scaleX(-1); -webkit-transform: scaleX(-1); cursor: pointer; justify-content: center; pointer-events: none; background: #fff; border: 1px solid #111; padding: 3px 10px; font-family: monospace; cursor: pointer; outline: inherit; border-radius: 3px; flex-direction: column; align-items: center; justify-content: center; font-family: monospace; text-align: center; margin-top: 20px; margin-bottom: 4px; background: #222; border-radius: 20px; box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.5); margin-bottom: 0; font-size: 13px; <div id="wrapper"> <video id="video">Portal is closed.</video> <canvas id="canvas-video"></canvas> <div id="frame"> <div id="text-video"></div> <div id="header"> You are the art in Chainspace.app <button id="stop">Wave</button> function run() { function isMobM return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); const video = document.getElementById('video') video.setAttribute('autoplay', ''); video.setAttribute('muted', ''); video.setAttribute('playsinline', '') const textVideo = document.getElementById('text-video') const canvas = document.getElementById('canvas-video') const ctx = canvas.getContext('2d', { willReadFrequently: true }); let cyclerEnabled = false; let cycler = 0; let isMobile = isMobileDevice(); const chars = [..." const colors = ["#078e56", "#b14e39", "#03643b", "#cf553d", "#284356", "#e05534", "#f7e7c6", "#282c2f", "#0a8b3b", "#171717", ]; let running = true; function setCanvasSize() { w = Math.min(window.innerWidth, 450); h = Math.min(window.innerHeight, isMobileDevice() ? 600 : 450); height = Math.floor(h / 10); width = Math.floor(w / 6.9); let resizeTimeout; window.onresize = function () { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setCanvasSize, 100); const init = () => { setCanvasSize(); document.body.classList.add(isMobile ? 'mobile' : null) navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(function (stream) { video.srcObject = stream; .catch(function (err) { running = false; const render = (ctx) => { if (width && height) { canvas.width = width; canvas.height = height; ctx.drawImage(video, 0, 0, width, height); const getPixelsGreyScale = (ctx) => { const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; const res = M new Array(height).fill(0).map(() => []); for (let i = 0, c = 0; i < data.length; i += 4) { const avg = (data[i] + data[i + 1] + data[i + 2]) / 3; let curr = res[row] curr.push(avg) if (c < width) { if (c === width) { row += 1 if (isMobile) { return res.map(row => row.slice(row.length / 4, row.length - row.length / 4)); const getCharByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (chars.length)); return chars[val % chars.length]; const getColorByScale = (scale) => { const val = Math.floor((scale + cycler) / 255 * (colors.length)); return colors[val % colors.length]; const renderText = (node, textDarkScale) => { let gap = isMobileDevice() ? 15 : 10; const gridElem = document.createElement('div'); gridElem.className = 'M gridElem.style.gridTemplateColumns = `repeat(${textDarkScale[0].length}, ${gap}px)`; gridElem.style.gridTemplateRows = `repeat(${textDarkScale.length}, ${gap}px)`; for (let i = 0; i < textDarkScale.length; i++) { for (let k = 0; k < textDarkScale[i].length; k++) { const textElem = document.createElement('p'); textElem.style.color = getColorByScale(textDarkScale[i][k]); textElem.innerHTML = getCharByScale(textDarkScale[i][k]); gridElem.appendChild(textElem); node.textContent = ""; node.appendChild(gridElem); const frame = () => requestAnimationFrame(() => { const chars = getPixelsGreyScale(ctx) renderText(textVideo, chars) if (running) { if (cyclerEnabled) { document.getElementById('stop').addEventListener('click', (e) => { running = !running if (running) { document.getElementById('text-video').onclick = () => { cyclerEnabled = !cyclerEnabled; window.addEventListener('DOMContentLoaded', () => { 0d2b452771c565808923aff503f2fa84G0D text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} (((((((((((((((((((((((((((((((((((((((((((((((((( text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#M fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#M 01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999M 999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","M #fddaec","#f2f2f2"]},ea=0,ta=Object.keys(ra);ea<ta.length;ea+=1){var na=ta[ea];ra[na.toLowerCase()]=ra[na]}return m}); function Q5(e){return new function e(t){let n="global"==t?window:this;n.canvas=document.createElement("canvas");let o=n.canvas.getContext("2d");n.width=100;n.height=100;n.canvas.width=n.width;n.canvas.height=n.height;"offscreen"!=t&&(document.body?document.body.appendChild(n.canvas):window.addEventListener("load",function(){document.body.appendChild(n.canvas)}));m();n.MAGIC=161533525;n.RGB=0;n.HSVM =1;n.HSB=1;n.CHORD=0;n.PIE=1;n.OPEN=2;n.RADIUS=1;n.CORNER=2;n.CORNERS=3;n.ROUND="round";n.SQUARE="butt";n.PROJECT="square";n.MITER="miter";n.BEVEL="bevel";n.CLOSE=1;n.BLEND="source-over";n.REMOVE="destination-out";n.ADD="lighter";n.DARKEST="darken";n.LIGHTEST="lighten";n.DIFFERENCE="difference";n.SUBTRACT="subtract";n.EXCLUSION="exclusion";n.MULTIPLY="multiply";n.SCREEN="screen";n.REPLACE="copy";n.OVERLAY="overlay";n.HARD_LIGHT="hard-light";n.SOFT_LIGHT="soft-light";n.DODGE="color-dodge";n.BURN="color-burn";n.NORMAM L="normal";n.ITALIC="italic";n.BOLD="bold";n.BOLDITALIC="italic bold";n.CENTER="center";n.LEFT="left";n.RIGHT="right";n.TOP="top";n.BOTTOM="bottom";n.BASELINE="alphabetic";n.LANDSCAPE="landscape";n.PORTRAIT="portrait";n.ALT=18;n.BACKSPACE=8;n.CONTROL=17;n.DELETE=46;n.DOWN_ARROW=40;n.ENTER=13;n.ESCAPE=27;n.LEFT_ARROW=37;n.OPTION=18;n.RETURN=13;n.RIGHT_ARROW=39;n.SHIFT=16;n.TAB=9;n.UP_ARROW=38;n.HALF_PI=Math.PI/2;n.PI=Math.PI;n.QUARTER_PI=Math.PI/4;n.TAU=2*Math.PI;n.TWO_PI=2*Math.PI;n.THRESHOLD=1;n.GRAY=2;n.OPAQUE=3;M n.INVERT=4;n.POSTERIZE=5;n.DILATE=6;n.ERODE=7;n.BLUR=8;n.ARROW="default";n.CROSS="crosshair";n.HAND="pointer";n.MOVE="move";n.TEXT="text";n.VIDEO={video:!0,audio:!1};n.AUDIO={video:!1,audio:!0};n.SHR3=1;n.LCG=2;n.HARDWARE_FILTERS=!0;n.hint=function(e,t){n[e]=t};n.frameCount=0;n.mouseX=0;n.mouseY=0;n.pmouseX=0;n.pmouseY=0;n.mouseButton=null;n.keyIsPressed=!1;n.mouseIsPressed=!1;n.key=null;n.keyCode=null;n.pixels=null;n.accelerationX=0;n.accelerationY=0;n.accelerationZ=0;n.rotationX=0;n.rotationY=0;n.rotationZ=0;n.reM lRotationX=0;n.relRotationY=0;n.relRotationZ=0;n.pAccelerationX=0;n.pAccelerationY=0;n.pAccelerationZ=0;n.pRotationX=0;n.pRotationY=0;n.pRotationZ=0;n.pRelRotationX=0;n.pRelRotationY=0;n.pRelRotationZ=0;n.touches=[];n._colorMode=n.RGB;n._noStroke=!1;n._noFill=!1;n._ellipseMode=n.CENTER;n._rectMode=n.CORNER;n._curveDetail=20;n._curveAlpha=0;n._noLoop=!1;n._textFont="sans-serif";n._textSize=12;n._textLeading=12;n._textStyle="normal";n._pixelDensity=1;n._frameRate=null;n._tint=null;let a=null;let r=!0;let i=[];let l=nM ull;let u=0;let s={};let c=0;let h=null;let f=null;let d=null;Object.defineProperty(n,"deviceOrientation",{get:function(){return 90==Math.abs(window.orientation)?n.LANDSCAPE:n.PORTRAIT}});Object.defineProperty(n,"windowWidth",{get:function(){return window.innerWidth}});Object.defineProperty(n,"windowHeight",{get:function(){return window.innerHeight}});Object.defineProperty(n,"drawingContext",{get:function(){return o}});n.createCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t,m()};n.resizM eCanvas=function(e,t){n.width=e,n.height=t,n.canvas.width=e,n.canvas.height=t};n.createGraphics=n.createImage=function(t,n){let o=new e("offscreen");return o.createCanvas(t,n),o.noLoop(),o};n.pixelDensity=function(e){return null==e?n._pixelDensity:(n._pixelDensity=e,n.canvas.width=Math.ceil(n.width*e),n.canvas.height=Math.ceil(n.height*e),n.canvas.style.width=n.width+"px",n.canvas.style.height=n.height+"px",o.scale(n._pixelDensity,n._pixelDensity),m(),n._pixelDensity)};n.map=function(e,t,n,o,a,r){let i=o+1*(e-t)/(nM -t)*(a-o);return r?o<a?Math.min(Math.max(i,o),a):Math.min(Math.max(i,a),o):i};n.lerp=function(e,t,n){return e*(1-n)+t*n};n.constrain=function(e,t,n){return Math.min(Math.max(e,t),n)};n.dist=function(){return 4==arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5])};n.norm=function(e,t,o){return n.map(e,t,o,0,1)};n.sq=function(e){return e*e};n.fract=function(e){return e-Math.floor(e)};n.degrees=functiM on(e){return 180*e/Math.PI};n.radians=function(e){return e*Math.PI/180};n.abs=Math.abs;n.ceil=Math.ceil;n.exp=Math.exp;n.floor=Math.floor;n.log=Math.log;n.mag=Math.hypot;n.max=Math.max;n.min=Math.min;n.round=Math.round;n.sqrt=Math.sqrt;n.sin=Math.sin;n.cos=Math.cos;n.tan=Math.tan;n.asin=Math.asin;n.acos=Math.acos;n.atan=Math.atan;n.atan2=Math.atan2;n.Vector=function(e,t,o){let a=this;a.x=e||0,a.y=t||0,a.z=o||0;let r=null,i=null;function l(e,t,n){return null!=e.x?e:null!=t?{x:e,y:t,z:n||0}:{x:e,y:e,z:e}}function u()M {null==i&&(i=a.x*a.x+a.y*a.y+a.z*a.z,r=Math.sqrt(i))}function s(){i=null,r=null}a.set=function(e,t,n){a.x=e||0,a.y=t||0,a.z=n||0},a.copy=function(){return new n.Vector(a.x,a.y,a.z)},a.add=function(){let e=l.apply(null,arguments);return a.x+=e.x,a.y+=e.y,a.z+=e.z,s(),a},a.rem=function(){let e=l.apply(null,arguments);return a.x%=e.x,a.y%=e.y,a.z%=e.z,s(),a},a.sub=function(){let e=l.apply(null,arguments);return a.x-=e.x,a.y-=e.y,a.z-=e.z,s(),a},a.mult=function(){let e=l.apply(null,arguments);return a.x*=e.x,a.y*=e.y,aM .z*=e.z,s(),a},a.div=function(){let e=l.apply(null,arguments);return a.x/=e.x,a.y/=e.y,a.z/=e.z,s(),a},a.mag=function(){return u(),r},a.magSq=function(){return u(),i},a.dot=function(){let e=l.apply(null,arguments);return a.x*e.x+a.y*e.y+a.z*e.z},a.dist=function(){let e=l.apply(null,arguments),t=a.x-e.x,n=a.y-e.y,o=a.z-e.z;return Math.sqrt(t*t+n*n+o*o)},a.cross=function(){let e=l.apply(null,arguments),t=a.y*e.z-a.z*e.y,n=a.z*e.x-a.x*e.z,o=a.x*e.y-a.y*e.x;return a.x=t,a.y=n,a.z=o,s(),a},a.normalize=function(){u();letM e=r;return a.x/=e,a.y/=e,a.z/=e,r=1,i=1,a},a.limit=function(e){u();let t=r;if(t>e){let n=e/t;a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e}return a},a.setMag=function(e){u();let t=r,n=e/t;return a.x*=n,a.y*=n,a.z*=n,r=e,i=e*e,a},a.heading=function(){return Math.atan2(a.y,a.x)},a.rotate=function(e){let t=Math.cos(e),n=Math.sin(e),o=a.x*t-a.y*n,r=a.x*n+a.y*t;return a.x=o,a.y=r,a},a.angleBetween=function(){let e=l.apply(null,arguments);const t=a.dot(e)/(a.mag()*e.mag());let n;return n=Math.acos(Math.min(1,Math.max(-1,t))),n*=Math.sM ign(a.cross(e).z||1)},a.lerp=function(e,t){return a.x=a.x*(1-t)+e.x*t,a.y=a.y*(1-t)+e.y*t,a.z=a.z*(1-t)+e.z*t,s(),a},a.reflect=function(e){return e.normalize(),a.sub(e.mult(2*a.dot(e)))},a.array=function(){return[a.x,a.y,a.z]},a.equals=function(e,t){return null==t&&null==(t=Number.EPSILON)&&(t=0),Math.abs(e.x-a.x)<t&&Math.abs(e.y-a.y)<t&&Math.abs(e.z-a.z)<t},a.fromAngle=function(e,t){return null==t&&(t=1),r=t,i=t*t,a.x=t*Math.cos(e),a.y=t*Math.sin(e),a.z=0,a},a.fromAngles=function(e,t,n){null==n&&(n=1),r=n,i=n*n;coM nst o=Math.cos(t),l=Math.sin(t),u=Math.cos(e),s=Math.sin(e);return a.x=n*s*l,a.y=-n*u,a.z=n*s*o,a},a.random2D=function(){return r=1,i=1,a.fromAngle(Math.random()*Math.PI*2)},a.random3D=function(){return r=1,i=1,a.fromAngles(Math.random()*Math.PI*2,Math.random()*Math.PI*2)},a.toString=function(){return`[${a.x}, ${a.y}, ${a.z}]`}};n.Vector.add=function(e,t){return new n.Vector(e.x+t.x,e.y+t.y,e.z+t.z)};n.Vector.rem=function(e,t){return new n.Vector(e.x%t.x,e.y%t.y,e.z%t.z)};n.Vector.sub=function(e,t){return new n.VecM tor(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.mult=function(e,t){return null==t.x?new n.Vector(e.x*t,e.y*t,e.z*t):new n.Vector(e.x*t.x,e.y*t.y,e.z*t.z)};n.Vector.div=function(e,t){return null==t.x?new n.Vector(e.x/t,e.y/t,e.z/t):new n.Vector(e.x/t.x,e.y/t.y,e.z/t.z)};n.Vector.dist=function(e,t){return Math.hypot(e.x-t.x,e.y-t.y,e.z-t.z)};n.Vector.cross=function(e,t){return new n.Vector(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)};n.Vector.lerp=function(e,t,o){return new n.Vector(e.x*(1-o)+t.x*o,e.y=e.y*(1-o)+t.y*o,e.M z=e.z*(1-o)+t.z*o)};n.Vector.equals=function(e,t,n){return e.equals(t,n)};for(let e of["fromAngle","fromAngles","random2D","random3D"])n.Vector[e]=function(t,o,a){return(new n.Vector)[e](t,o,a)};n.createVector=function(e,t,o){return new n.Vector(e,t,o)};n.curvePoint=function(e,t,n,o,a){const r=a*a*a,i=a*a,l=-.5*r+i-.5*a,u=1.5*r-2.5*i+1,s=-1.5*r+2*i+.5*a,c=.5*r-.5*i;return e*l+t*u+n*s+o*c};n.bezierPoint=function(e,t,n,o,a){const r=1-a;return Math.pow(r,3)*e+3*Math.pow(r,2)*a*t+3*r*Math.pow(a,2)*n+Math.pow(a,3)*o};n.M curveTangent=function(e,t,n,o,a){const r=a*a,i=-3*r/2+2*a-.5,l=9*r/2-5*a,u=-9*r/2+4*a+.5,s=3*r/2-a;return e*i+t*l+n*u+o*s};n.bezierTangent=function(e,t,n,o,a){const r=1-a;return 3*o*Math.pow(a,2)-3*n*Math.pow(a,2)+6*n*r*a-6*t*r*a+3*t*Math.pow(r,2)-3*e*Math.pow(r,2)};function p(e,t,n){let o,a,r,i,l,u,s,c,h;if(0==t)return[255*(o=n),255*(a=n),255*(r=n)];switch((i=e)>360&&(i=0),s=n*(1-t),c=n*(1-t*(u=(i/=60)-(l=~~i))),h=n*(1-t*(1-u)),l){case 0:o=n,a=h,r=s;break;case 1:o=c,a=n,r=s;break;case 2:o=s,a=n,r=h;break;case 3:o=M s,a=c,r=n;break;case 4:o=h,a=s,r=n;break;default:o=n,a=s,r=c}return[255*o,255*a,255*r]}n.Color=function(e,t,n,o){let a=this;a.MAGIC=786698,a._r=e,a._g=t,a._b=n,a._a=o,a._h=0,a._s=0,a._v=0,a._hsvInferred=!1,a.setRed=function(e){a._r=e,a._hsvInferred=!1},a.setGreen=function(e){a._g=e,a._hsvInferred=!1},a.setBlue=function(e){a._b=e,a._hsvInferred=!1},a.setAlpha=function(e){a._a=e/255,a._hsvInferred=!1},a._inferHSV=function(){a._hsvInferred||([a._h,a._s,a._v]=function(e,t,n){let o,a,r,i,l;if(o=e<t?e<n?e:n:t<n?t:n,0==(lM =100*(a=e>t?e>n?e:n:t>n?t:n)/255))return[r=0,i=0,l];if(0==(i=100*(a-o)/a))return[r=0,i,l];r=a==e?0+60*(t-n)/(a-o):a==t?120+60*(n-e)/(a-o):240+60*(e-t)/(a-o);return[r,i,l]}(a._r,a._g,a._b),a._hsvInferred=!0)},a.toString=function(){return`rgba(${Math.round(a._r)},${Math.round(a._g)},${Math.round(a._b)},${~~(1e3*a._a)/1e3})`}};n.colorMode=function(e){n._colorMode=e};n.color=function(){if(1==arguments.length&&786698==arguments[0].MAGIC)return arguments[0];if(n._colorMode==n.RGB){if(1==arguments.length)return new n.ColoM r(arguments[0],arguments[0],arguments[0],1);if(2==arguments.length)return new n.Color(arguments[0],arguments[0],arguments[0],arguments[1]/255);if(3==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],1);if(4==arguments.length)return new n.Color(arguments[0],arguments[1],arguments[2],arguments[3]/255)}else{if(1==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),1);if(2==arguments.length)return new n.Color(...p(0,0,arguments[0]/100),arguments[1]/255);if(3==arguments.length)return M new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),1);if(4==arguments.length)return new n.Color(...p(arguments[0],arguments[1]/100,arguments[2]/100),arguments[3])}return null};n.red=function(e){return e._r};n.green=function(e){return e._g};n.blue=function(e){return e._b};n.alpha=function(e){return 255*e._a};n.hue=function(e){return e._inferHSV(),e._h};n.saturation=function(e){return e._inferHSV(),e._s};n.brightness=function(e){return e._inferHSV(),e._v};n.lightness=function(e){return 100*(.2126*e._r+.M 7152*e._g+.0722*e._b)/255};n.lerpColor=function(e,t,o){return n._colorMode==n.RGB?new n.Color(n.constrain(n.lerp(e._r,t._r,o),0,255),n.constrain(n.lerp(e._g,t._g,o),0,255),n.constrain(n.lerp(e._b,t._b,o),0,255),n.constrain(n.lerp(e._a,t._a,o),0,1)):(e._inferHSV(),t._inferHSV(),new n.Color(n.constrain(function(e,t,o){var a=[[Math.abs(t-e),n.map(o,0,1,e,t)],[Math.abs(t+360-e),n.map(o,0,1,e,t+360)],[Math.abs(t-360-e),n.map(o,0,1,e,t-360)]];return a.sort((e,t)=>e[0]-t[0]),(a[0][1]+720)%360}(e._h,t._h,o),0,360),n.constrM ain(n.lerp(e._s,t._s,o),0,100),n.constrain(n.lerp(e._v,t._v,o),0,100),n.constrain(n.lerp(e._a,t._a,o),0,1)))};function m(){o.fillStyle="white",o.strokeStyle="black",o.lineCap="round",o.lineJoin="miter"}n.strokeWeight=function(e){n._noStroke=!1,o.lineWidth=e};n.stroke=function(){if(n._noStroke=!1,"string"==typeof arguments[0])return void(o.strokeStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noStroke=!0:o.strokeStyle=e};n.noStroke=function(){n._noStroke=!0};n.fill=function(){if(n._noFill=!1,"striM ng"==typeof arguments[0])return void(o.fillStyle=arguments[0]);let e=n.color.apply(null,arguments);e._a<=0?n._noFill=!0:o.fillStyle=e};n.noFill=function(){n._noFill=!0};n.blendMode=function(e){o.globalCompositeOperation=e};n.strokeCap=function(e){o.lineCap=e};n.strokeJoin=function(e){o.lineJoin=e};n.ellipseMode=function(e){n._ellipseMode=e};n.rectMode=function(e){n._rectMode=e};n.curveDetail=function(e){n._curveDetail=e};n.curveAlpha=function(e){n._curveAlpha=e};n.curveTightness=function(e){console.warn("curveTightM ness() sets the 'alpha' parameter of Catmull-Rom curve, and is NOT identical to p5.js counterpart. As this might change in the future, please call curveAlpha() directly."),n._curveAlpha=e};n.clear=function(){o.clearRect(0,0,n.width,n.height)};n.background=function(){if(arguments[0]&&arguments[0].MAGIC==n.MAGIC)return n.image(arguments[0],0,0,n.width,n.height);o.save(),o.resetTransform(),"string"==typeof arguments[0]?o.fillStyle=arguments[0]:o.fillStyle=n.color(...Array.from(arguments)),o.fillRect(0,0,n.width,n.heigM ht),o.restore()};n.line=function(e,t,a,r){n._noStroke||(o.beginPath(),o.moveTo(e,t),o.lineTo(a,r),o.stroke())};function g(e){if(0<=e&&e<2*Math.PI)return e;for(;e<0;)e+=2*Math.PI;for(;e>=Math.PI;)e-=2*Math.PI;return e}function v(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;let c=g(i),h=g(l);o.beginPath();for(let i=0;i<s+1;i++){let l=i/s,u=n.lerp(c,h,l),f=Math.cos(u)*a/2,d=Math.sin(u)*r/2;o[i?"lineTo":"moveTo"](e+f,t+d)}u==n.CHORD?o.closePath():u==n.PIE&&(o.lineTo(e,t),o.closePath()),n._noFill||o.fill(),n._noStrM oke||o.stroke()}n.arc=function(e,t,o,a,r,i,l,u){if(r==i)return n.ellipse(e,t,o,a);null==u&&(u=25),null==l&&(l=n.PIE),n._ellipseMode==n.CENTER?v(e,t,o,a,r,i,l,u):n._ellipseMode==n.RADIUS?v(e,t,2*o,2*a,r,i,l,u):n._ellipseMode==n.CORNER?v(e+o/2,t+a/2,o,a,r,i,l,u):n._ellipseMode==n.CORNERS&&v((e+o)/2,(t+a)/2,o-e,a-t,r,i,l,u)};function M(e,t,a,r){n._noFill&&n._noStroke||(o.beginPath(),o.ellipse(e,t,a/2,r/2,0,0,2*Math.PI),n._noFill||o.fill(),n._noStroke||o.stroke())}n.ellipse=function(e,t,o,a){null==a&&(a=o),n._ellipseMoM de==n.CENTER?M(e,t,o,a):n._ellipseMode==n.RADIUS?M(e,t,2*o,2*a):n._ellipseMode==n.CORNER?M(e+o/2,t+a/2,o,a):n._ellipseMode==n.CORNERS&&M((e+o)/2,(t+a)/2,o-e,a-t)};n.circle=function(e,t,o){return n.ellipse(e,t,o,o)};n.point=function(e,t){e.x&&(t=e.y,e=e.x),o.beginPath(),o.ellipse(e,t,.4,.4,0,0,2*Math.PI),o.stroke()};function _(e,t,a,r,i,l,u,s){if(n._noFill&&n._noStroke)return;if(null==i)return function(e,t,a,r){n._noFill||o.fillRect(e,t,a,r);n._noStroke||o.strokeRect(e,t,a,r)}(e,t,a,r);if(null==l)return _(e,t,a,r,i,M i,i,i);const c=Math.min(Math.abs(r),Math.abs(a))/2;i=Math.min(c,i),l=Math.min(c,l),s=Math.min(c,s),u=Math.min(c,u),o.beginPath(),o.moveTo(e+i,t),o.arcTo(e+a,t,e+a,t+r,l),o.arcTo(e+a,t+r,e,t+r,u),o.arcTo(e,t+r,e,t,s),o.arcTo(e,t,e+a,t,i),o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke()}n.rect=function(e,t,o,a,r,i,l,u){n._rectMode==n.CENTER?_(e-o/2,t-a/2,o,a,r,i,l,u):n._rectMode==n.RADIUS?_(e-o,t-a,2*o,2*a,r,i,l,u):n._rectMode==n.CORNER?_(e,t,o,a,r,i,l,u):n._rectMode==n.CORNERS&&_(e,t,o-e,a-t,r,i,l,u)};n.squM are=function(e,t,o,a,r,i,l){return n.rect(e,t,o,o,a,r,i,l)};function x(){i=[]}n.beginShape=function(){x(),o.beginPath(),r=!0};n.beginContour=function(){o.closePath(),x(),r=!0};n.endContour=function(){x(),r=!0};n.vertex=function(e,t){x(),r?o.moveTo(e,t):o.lineTo(e,t),r=!1};n.bezierVertex=function(e,t,n,a,r,i){x(),o.bezierCurveTo(e,t,n,a,r,i)};n.quadraticVertex=function(e,t,n,a){x(),o.quadraticCurveTo(e,t,n,a)};n.bezier=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.bezierVertex(o,a,r,i,l,u),n.endShape()};nM .triangle=function(e,t,o,a,r,i){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.endShape(n.CLOSE)};n.quad=function(e,t,o,a,r,i,l,u){n.beginShape(),n.vertex(e,t),n.vertex(o,a),n.vertex(r,i),n.vertex(l,u),n.endShape(n.CLOSE)};n.endShape=function(e){x(),e&&o.closePath(),n._noFill||o.fill(),n._noStroke||o.stroke(),n._noFill&&n._noStroke&&(o.save(),o.fillStyle="none",o.fill(),o.restore())};n.curveVertex=function(e,t){if(i.push([e,t]),i.length<4)return;let a=i[i.length-4],l=i[i.length-3],u=i[i.length-2],s=i[i.M length-1],c=function(e,t,n,o,a,r,i,l,u,s){function c(e,t,n,o,a,r){let i=Math.pow(o-t,2)+Math.pow(a-n,2),l=Math.pow(i,.5*r);return l+e}let h=[],f=c(0,e,t,n,o,s),d=c(f,n,o,a,r,s),p=c(d,a,r,i,l,s);for(let s=0;s<u;s++){let c=f+s/(u-1)*(d-f),m=[(f-c)/(f-0),(c-0)/(f-0),(d-c)/(d-f),(c-f)/(d-f),(p-c)/(p-d),(c-d)/(p-d),(d-c)/(d-0),(c-0)/(d-0),(p-c)/(p-f),(c-f)/(p-f)];for(let e=0;e<m.length;e+=2)isNaN(m[e])&&(m[e]=1,m[e+1]=0),isFinite(m[e])||(m[e]>0?(m[e]=1,m[e+1]=0):(m[e]=0,m[e+1]=1));let g=e*m[0]+n*m[1],v=t*m[0]+o*m[1],M=nM *m[2]+a*m[3],_=o*m[2]+r*m[3],x=a*m[4]+i*m[5],y=r*m[4]+l*m[5],w=g*m[6]+M*m[7],R=v*m[6]+_*m[7],I=M*m[8]+x*m[9],E=_*m[8]+y*m[9],S=w*m[2]+I*m[3],C=R*m[2]+E*m[3];h.push([S,C])}return h}(...a,...l,...u,...s,n._curveDetail,n._curveAlpha);for(let e=0;e<c.length;e++)r?o.moveTo(...c[e]):o.lineTo(...c[e]),r=!1};n.curve=function(e,t,o,a,r,i,l,u){n.beginShape(),n.curveVertex(e,t),n.curveVertex(o,a),n.curveVertex(r,i),n.curveVertex(l,u),n.endShape()};n.translate=function(e,t){o.translate(e,t)};n.rotate=function(e){o.rotate(e)};nM .scale=function(e,t){null==t&&(t=e),o.scale(e,t)};n.applyMatrix=function(e,t,n,a,r,i){o.transform(e,t,n,a,r,i)};n.shearX=function(e){o.transform(1,0,Math.tan(e),1,0,0)};n.shearY=function(e){o.transform(1,Math.tan(e),0,1,0,0)};n.resetMatrix=function(){o.resetTransform(),o.scale(n._pixelDensity,n._pixelDensity)};n.pushMatrix=n.push=function(){o.save()};n.popMatrix=n.pop=function(){o.restore()};n.image=function(e,t,a,r,i,l,u,s,c){let h=e.MAGIC==n.MAGIC?e.canvas:e;function d(){if(e.MAGIC!=n.MAGIC||!n._tint)return;let tM =e.canvas.getContext("2d");t.save(),t.resetTransform(),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.drawImage(f.canvas,0,0),t.restore()}return e.MAGIC==n.MAGIC&&null!=n._tint&&(!function(e,t){null==f&&(f=document.createElement("canvas").getContext("2d"));null==e&&(e=o.canvas.width,t=o.canvas.height);f.canvas.width==e&&f.canvas.height==t||(f.canvas.width=e,f.canvas.height=t)}(e.canvas.width,e.canvas.height),f.drawImage(e.canvas,0,0),e.tinted(n._tint)),r?l?(s||(s=h.width),c||(c=h.height),o.drawImage(h,l,u,s,c,t,M a,r,i),void d()):(o.drawImage(h,t,a,r,i),void d()):(e.MAGIC==n.MAGIC||e.width?o.drawImage(h,t,a,e.width,e.height):o.drawImage(h,t,a,e.videoWidth,e.videoHeight),void d())};n.loadPixels=function(){l=o.getImageData(0,0,n.canvas.width,n.canvas.height),n.pixels=l.data};n.updatePixels=function(){null!=l&&o.putImageData(l,0,0)};n.loadImage=function(e,t){u++;let o=n.createGraphics(100,100),a=o.canvas.getContext("2d"),r=new Image;return r.src=e,r.crossOrigin="Anonymous",r.onload=function(){a.canvas.width=r.width,a.canvas.heM ight=r.height,o.width=r.width,o.height=r.height,a.drawImage(r,0,0),u--,t&&t(o)},o};let y={};y[n.THRESHOLD]=function(e,t){null==t?t=127.5:t*=255;for(let n=0;n<e.length;n+=4){const o=.2126*e[n]+.7152*e[n+1]+.0722*e[n+2];e[n]=e[n+1]=e[n+2]=o>=t?255:0}};y[n.GRAY]=function(e){for(let t=0;t<e.length;t+=4){const n=.2126*e[t]+.7152*e[t+1]+.0722*e[t+2];e[t]=e[t+1]=e[t+2]=n}};y[n.OPAQUE]=function(e){for(let t=0;t<e.length;t+=4)e[t+3]=255};y[n.INVERT]=function(e){for(let t=0;t<e.length;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[tM +2]=255-e[t+2]};y[n.POSTERIZE]=function(e,t){let n=t-1;for(let o=0;o<e.length;o+=4)e[o]=255*(e[o]*t>>8)/n,e[o+1]=255*(e[o+1]*t>>8)/n,e[o+2]=255*(e[o+2]*t>>8)/n};y[n.DILATE]=function(e){R(),d.set(e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.max(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.ERODE]=function(e){R(),d.set(M e);let[t,n]=[o.canvas.width,o.canvas.height];for(let o=0;o<n;o++)for(let a=0;a<t;a++){let r=4*Math.max(a-1,0),i=4*Math.min(a+1,t-1),l=4*Math.max(o-1,0)*t,u=4*Math.min(o+1,n-1)*t,s=4*o*t,c=4*a;for(let t=0;t<4;t++){let n=t+l,o=t+u,a=t+s;e[s+c+t]=Math.min(d[n+c],d[a+r],d[a+c],d[a+i],d[o+c])}}};y[n.BLUR]=function(e,t){t=t||1,t=Math.floor(t*n._pixelDensity),R(),d.set(e);let a=2*t+1;let r=function(e){let n=new Float32Array(e),o=.3*t+.8,a=o*o*2;for(let t=0;t<e;t++){let r=t-e/2,i=Math.exp(-r*r/a)/(2.5066282746*o);n[t]=i}reM turn n}(a),[i,l]=[o.canvas.width,o.canvas.height];for(let n=0;n<l;n++)for(let o=0;o<i;o++){let l=0,u=0,s=0,c=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(o-t+e,0),i-1),h=4*(n*i+a);l+=d[h]*r[e],u+=d[h+1]*r[e],s+=d[h+2]*r[e],c+=d[h+3]*r[e]}let h=4*(n*i+o);e[h]=l,e[h+1]=u,e[h+2]=s,e[h+3]=c}d.set(e);for(let n=0;n<l;n++)for(let o=0;o<i;o++){let u=0,s=0,c=0,h=0;for(let e=0;e<a;e++){let a=Math.min(Math.max(n-t+e,0),l-1),f=4*(a*i+o);u+=d[f]*r[e],s+=d[f+1]*r[e],c+=d[f+2]*r[e],h+=d[f+3]*r[e]}let f=4*(n*i+o);e[f]=u,e[f+1]=sM ,e[f+2]=c,e[f+3]=h}};function w(e,t){null==h&&(h=document.createElement("canvas").getContext("2d")),null==e&&(e=o.canvas.width,t=o.canvas.height),h.canvas.width==e&&h.canvas.height==t||(h.canvas.width=e,h.canvas.height=t)}function R(){let e=o.canvas.width*o.canvas.height*4;null!=d&&e==d.length||(d=new Uint8ClampedArray(e))}function I(e){h.clearRect(0,0,h.canvas.width,h.canvas.height),h.filter=e,h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvasM ,0,0),o.restore()}n.filter=function(e,t){let a=n.HARDWARE_FILTERS&&null!=o.filter;if(a)if(w(),e==n.THRESHOLD){null==t&&(t=.5),t=Math.max(t,1e-5);let e=Math.floor(.5/t*100);I(`saturate(0%) brightness(${e}%) contrast(1000000%)`)}else if(e==n.GRAY)I("saturate(0%)");else if(e==n.OPAQUE)h.fillStyle="black",h.fillRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),o.save(),o.resetTransform(),o.drawImage(h.canvas,0,0),o.restore();else if(e==n.INVERT)I("invert(100%)");else if(e==n.BLUR)I(`blur(${Math.ceil(t*M n._pixelDensity/1)||1}px)`);else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}else{let n=o.getImageData(0,0,o.canvas.width,o.canvas.height);y[e](n.data,t),o.putImageData(n,0,0)}};n.resize=function(e,t){w(),h.drawImage(o.canvas,0,0),n.width=e,n.height=t,o.canvas.width=e*n._pixelDensity,o.canvas.height=t*n._pixelDensity,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0,o.canvas.width,o.canvas.height),o.restore()};n.getM =function(e,t,a,r){if(null!=e&&null==a){let a=o.getImageData(e,t,1,1).data;return new n.Color(a[0],a[1],a[2],a[3]/255)}e=e||0,t=t||0,a=a||n.width,r=r||n.height;let i=n.createGraphics(a,r);i.pixelDensity(n._pixelDensity);let l=o.getImageData(e*n._pixelDensity,t*n._pixelDensity,a*n._pixelDensity,r*n._pixelDensity);return i.canvas.getContext("2d").putImageData(l,0,0),i};n.set=function(e,t,a){if(a.MAGIC==n.MAGIC){let o=n._tint;return n._tint=null,n.image(a,e,t),void(n._tint=o)}let r=4*(t*n._pixelDensity*o.canvas.width+M e*n._pixelDensity);n.pixels[r]=a._r,n.pixels[r+1]=a._g,n.pixels[r+2]=a._b,n.pixels[r+3]=255*a._a};n.tinted=function(){let e=n.color(...Array.from(arguments)),t=e._a;e._a=1,w(),h.clearRect(0,0,h.canvas.width,h.canvas.height),h.fillStyle=e,h.fillRect(0,0,h.canvas.width,h.canvas.height),h.globalCompositeOperation="multiply",h.drawImage(o.canvas,0,0),h.globalCompositeOperation="source-over",o.save(),o.resetTransform();let a=o.globalCompositeOperation;o.globalCompositeOperation="source-in",o.drawImage(h.canvas,0,0),o.glM obalCompositeOperation=a,o.restore(),h.globalAlpha=t,h.clearRect(0,0,h.canvas.width,h.canvas.height),h.drawImage(o.canvas,0,0),h.globalAlpha=1,o.save(),o.resetTransform(),o.clearRect(0,0,o.canvas.width,o.canvas.height),o.drawImage(h.canvas,0,0),o.restore()};n.tint=function(){n._tint=n.color(...Array.from(arguments))};n.noTint=function(){n._tint=null};n.mask=function(e){o.save(),o.resetTransform();let t=o.globalCompositeOperation;o.globalCompositeOperation="destination-in",o.drawImage(e.canvas,0,0),o.globalCompositeM Operation=t,o.restore()};n.clearTemporaryBuffers=function(){h=null,f=null,d=null};n.save=function(e,t){e=e||"untitled",t=t||"png";var n=document.createElement("a");n.innerHTML="[Download]",n.addEventListener("click",function(){this.href=o.canvas.toDataURL(),this.download=e+"."+t},!1),document.body.appendChild(n),n.click(),document.body.removeChild(n)};n.saveCanvas=function(e,t,o){if(e.MAGIC==n.MAGIC){o&&e.save(t,o);let n=t.split(".");return e.save(n.slice(0,-1).join("."),n[n.length-1])}if(t)return n.save(e,t);let aM =e.split(".");return n.save(a.slice(0,-1).join("."),a[a.length-1])};n.loadFont=function(e,t){let n=e.split("/"),o=n[n.length-1].split(".")[0].replace(" ",""),a=`@font-face {\n font-family: '${o}';\n src: url('${e}');\n }`;const r=document.createElement("style");return r.textContent=a,document.head.append(r),o};n.textFont=function(e){n._textFont=e};n.textSize=function(e){n._textSize=e,n._textLeading=e};n.textLeading=function(e){n._textLeading=e};n.textStyle=function(e){n._textStyle=e};n.textAlign=M function(e,t){o.textAlign=e,t&&(o.textBaseline=t==n.CENTER?"middle":t)};n.text=function(e,t,a,r){if(!e)return;if(e=e.toString(),n._noFill&&n._noStroke)return;o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`;let i=e.split("\n");for(let e=0;e<i.length;e++)n._noFill||o.fillText(i[e],t,a,r),n._noStroke||o.strokeText(i[e],t,a,r),a+=n._textLeading};n.textWidth=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).width};n.textAscent=function(e){return o.font=`${n._textStyle}M ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxAscent};n.textDescent=function(e){return o.font=`${n._textStyle} ${n._textSize}px ${n._textFont}`,o.measureText(e).actualBoundingBoxDescent};var E=4;var S=.5;var C=function(e){return.5*(1-Math.cos(e*Math.PI))};var A;n.noise=function(e,t,n){if(t=t||0,n=n||0,null==A){A=new Array(4096);for(var o=0;o<4096;o++)A[o]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),n<0&&(n=-n);for(var a,r,i,l,u,s=Math.floor(e),c=Math.floor(t),h=Math.floor(n),f=e-s,d=t-c,p=n-h,m=0,g=M .5,v=0;v<E;v++){var M=s+(c<<4)+(h<<8);a=C(f),r=C(d),i=A[4095&M],i+=a*(A[M+1&4095]-i),l=A[M+16&4095],l+=a*(A[M+16+1&4095]-l),i+=r*(l-i),l=A[4095&(M+=256)],l+=a*(A[M+1&4095]-l),u=A[M+16&4095],u+=a*(A[M+16+1&4095]-u),l+=r*(u-l),i+=C(p)*(l-i),m+=i*g,g*=S,s<<=1,c<<=1,h<<=1,(f*=2)>=1&&(s++,f--),(d*=2)>=1&&(c++,d--),(p*=2)>=1&&(h++,p--)}return m};n.noiseDetail=function(e,t){e>0&&(E=e),t>0&&(S=t)};const T=function(){let e,t,n=4294967295;return{setSeed(o){e=t=(null==o?Math.random()*n:o)>>>0},getSeed:()=>t,rand:()=>(e^=e<<17M ,e^=e>>13,((e^=e<<5)>>>0)/n)}};let D=T();D.setSeed();n.noiseSeed=function(e){let t=null==e?4294967295*Math.random():e;A||(A=new Float32Array(4096));for(var n=0;n<4096;n++)t^=t<<17,t^=t>>13,t^=t<<5,A[n]=(t>>>0)/4294967295};n.randomSeed=function(e){D.setSeed(e)};n.random=function(e,t){return"number"==typeof e?null!=t?D.rand()*(t-e)+e:D.rand()*e:e[~~(e.length*D.rand())]};n.randomGenerator=function(e){e==n.LCG?D=function(){const e=4294967296;let t,n;return{setSeed(o){n=t=(null==o?Math.random()*e:o)>>>0},getSeed:()=>t,rM and:()=>(n=(1664525*n+1013904223)%e)/e}}():e==n.SHR3&&(D=T()),D.setSeed()};var P=new function(){var e,t,n,o=new Array(128),a=new Array(256),r=new Array(128),i=new Array(128),l=new Array(256),u=new Array(256),s=function(){return 4294967296*D.rand()-2147483648},c=function(){return.5+2.328306e-10*(s()<<0)},h=function(){for(var t,a,l,u,h=3.44262;;){if(t=n*r[e],0==e){do{l=c(),u=c(),t=.2904764*-Math.log(l),a=-Math.log(u)}while(a+a<t*t);return n>0?h+t:-h-t}if(i[e]+c()*(i[e-1]-i[e])<Math.exp(-.5*t*t))return t;if(n=s(),e=12M 7&n,Math.abs(n)<o[e])return n*r[e]}},f=function(){for(var n;;){if(0==e)return 7.69711-Math.log(c());if(n=t*l[e],u[e]+c()*(u[e-1]-u[e])<Math.exp(-n))return n;if((t=s())<a[e=255&t])return t*l[e]}};this.SHR3=s,this.UNI=c,this.RNOR=function(){return n=s(),e=127&n,Math.abs(n)<o[e]?n*r[e]:h()},this.REXP=function(){return(t=s()>>>0)<o[e=255&t]?t*l[e]:f()},this.zigset=function(){var e,t,n=2147483648,s=4294967296,c=3.442619855899,h=c,f=.00991256303526217,d=7.697117470131487,p=d,m=.003949659822581572;for(e=f/Math.exp(-.5*c*cM ),o[0]=Math.floor(c/e*n),o[1]=0,r[0]=e/n,r[127]=c/n,i[0]=1,i[127]=Math.exp(-.5*c*c),t=126;t>=1;t--)c=Math.sqrt(-2*Math.log(f/c+Math.exp(-.5*c*c))),o[t+1]=Math.floor(c/h*n),h=c,i[t]=Math.exp(-.5*c*c),r[t]=c/n;for(e=m/Math.exp(-d),a[0]=Math.floor(d/e*s),a[1]=0,l[0]=e/s,l[255]=d/s,u[0]=1,u[255]=Math.exp(-d),t=254;t>=1;t--)d=-Math.log(m/d+Math.exp(-d)),a[t+1]=Math.floor(d/p*s),p=d,u[t]=Math.exp(-d),l[t]=d/s}};P.hasInit=!1;n.randomGaussian=function(e,t){return P.hasInit||(P.zigset(),P.hasInit=!0),P.RNOR()*t+e};n.randomEM xponential=function(){return P.hasInit||(P.zigset(),P.hasInit=!0),P.REXP()};n.print=console.log;n.cursor=function(e,t,o){let a="";e.includes(".")&&(e=`url("${e}")`,a=", auto"),null!=t&&(e+=" "+t+" "+o),n.canvas.style.cursor=e+a};n.noCursor=function(){n.canvas.style.cursor="none"};n.createCapture=function(e){var t=document.createElement("video");return t.playsinline="playsinline",t.autoplay="autoplay",navigator.mediaDevices.getUserMedia(e).then(function(e){t.srcObject=e}),t.style.position="absolute",t.style.opacity=M 1e-5,t.style.zIndex=-1e3,document.body.appendChild(t),t};let b=["setup","draw","preload","mouseMoved","mousePressed","mouseReleased","mouseDragged","mouseClicked","keyPressed","keyReleased","keyTyped","touchStarted","touchEnded"];for(let e of b){let t="_"+e+"Fn";n[t]=function(){},n[t].isPlaceHolder=!0,n[e]?n[t]=n[e]:Object.defineProperty(n,e,{set:function(e){n[t]=e}})}function z(){n._noLoop||(a=null==n._frameRate?requestAnimationFrame(z):setTimeout(z,1e3/n._frameRate)),x(),r=!0,o.save(),n._drawFn(),o.restore(),n.frM ameCount++}n.noLoop=function(){n._noLoop=!0,a=null};n.loop=function(){n._noLoop=!1,null==a&&z()};n.redraw=function(){z()};n.frameRate=function(e){n._frameRate=e};setTimeout(function(){n._preloadFn(),c=window.performance.now(),function e(){if(u>0)return setTimeout(e,10);n._setupFn();z()}()},1);n.canvas.onmousemove=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed?n._mouseDraggedFn(e):n._mouseMovedFn(e)};n.canvas.onmousedown=function(e){n.pmouseX=n.mouseX,n.pmousM eY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n.mouseButton=[n.LEFT,n.CENTER,n.RIGHT][e.button],n._mousePressedFn(e)};n.canvas.onmouseup=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!1,n._mouseReleasedFn(e)};n.canvas.onclick=function(e){n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=e.offsetX,n.mouseY=e.offsetY,n.mouseIsPressed=!0,n._mouseClickedFn(e),n.mouseIsPressed=!1};window.addEventListener("keydown",function(e){n.keyIsPressed=M !0,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!0,n._keyPressedFn(e),1==e.key.length&&n._keyTypedFn(e)});window.addEventListener("keyup",function(e){n.keyIsPressed=!1,n.key=e.key,n.keyCode=e.keyCode,s[n.keyCode]=!1,n._keyReleasedFn(e)});n.keyIsDown=function(e){return!!s[e]};function O(e){const t=n.canvas.getBoundingClientRect(),o=n.canvas.scrollWidth/n.width||1,a=n.canvas.scrollHeight/n.height||1;return{x:(e.clientX-t.left)/o,y:(e.clientY-t.top)/a,id:e.identifier}}function k(){return n._touchStarted.isPlaceHolder&M &n._touchMoved.isPlaceHolder&&n._touchEnded.isPlaceHolder}n.canvas.ontouchstart=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButton=n.LEFT,n._mousePressedFn(e)||e.preventDefault()),n._touchStartedFn(e)||e.preventDefault()};n.canvas.ontouchmove=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!0,n.mouseButtoM n=n.LEFT,n._mouseDraggedFn(e)||e.preventDefault()),n._touchMovedFn(e)||e.preventDefault()};n.canvas.ontouchend=n.canvas.ontouchcancel=function(e){n.touches=e.touches.map(O),k()&&(n.pmouseX=n.mouseX,n.pmouseY=n.mouseY,n.mouseX=n.touches[0].x,n.mouseY=n.touches[0].y,n.mouseIsPressed=!1,n._mouseReleasedFn(e)||e.preventDefault()),n._touchEndedFn(e)||e.preventDefault()};n.hasSensorPermission=!window.DeviceOrientationEvent&&!window.DeviceMotionEvent||!(DeviceOrientationEvent.requestPermission||DeviceMotionEvent.requestPeM rmission);n.requestSensorPermissions=function(){DeviceOrientationEvent.requestPermission&&DeviceOrientationEvent.requestPermission().then(e=>{"granted"==e&&DeviceMotionEvent.requestPermission&&DeviceMotionEvent.requestPermission().then(e=>{"granted"==e&&(n.hasSensorPermission=!0)}).catch(alert)}).catch(alert)};window.ondeviceorientation=function(e){n.pRotationX=n.rotationX,n.pRotationY=n.rotationY,n.pRotationZ=n.rotationZ,n.pRelRotationX=n.relRotationX,n.pRelRotationY=n.relRotationY,n.pRelRotationZ=n.relRotationZ,nM .rotationX=e.beta*(Math.PI/180),n.rotationY=e.gamma*(Math.PI/180),n.rotationZ=e.alpha*(Math.PI/180),n.relRotationX=[-n.rotationY,-n.rotationX,n.rotationY][1+~~(window.orientation/90)],n.relRotationY=[-n.rotationX,n.rotationY,n.rotationX][1+~~(window.orientation/90)],n.relRotationZ=n.rotationZ};window.ondevicemotion=function(e){if(n.pAccelerationX=n.accelerationX,n.pAccelerationY=n.accelerationY,n.pAccelerationZ=n.accelerationZ,!e.acceleration){let t=((e,t)=>[(e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3])/(e[12]*t[0]+e[13]*t[M 1]+e[14]*t[2]+e[15]),(e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]),(e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11])/(e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15])])(((e,t)=>[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15M ],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]])((e=>[Math.cos(e),0,Math.sin(e),0,0,1,0,0,-Math.sin(e),0,Math.cos(e),0,0,0,0,1])(n.rotationY),(e=>[1,0,0,0,0,Math.cos(e),-Math.sin(e),0,0,Math.sin(e),Math.cos(e)M ,0,0,0,0,1])(n.rotationX)),[0,0,-9.80665]);n.accelerationX=e.accelerationIncludingGravity.x+t[0],n.accelerationY=e.accelerationIncludingGravity.y+t[1],n.accelerationZ=e.accelerationIncludingGravity.z-t[2]}};n.year=function(){return(new Date).getFullYear()};n.day=function(){return(new Date).getDay()};n.hour=function(){return(new Date).getHours()};n.minute=function(){return(new Date).getMinutes()};n.second=function(){return(new Date).getSeconds()};n.millis=function(){return window.performance.now()-c}}(e)} or{static p;static SAND_COLOR_MODE=3;static getSandColorByIndex(e,t=0,i=30,s=50){e%=5;let a=[];var r,h,n;for(let e=0;e<5;e++){let t=e%5;1==Color.SAND_COLOR_MODE?a.push(o(t)):2==Color.SAND_COLOR_MODE?a.push(l(t)):3==Color.SAND_COLOR_MODE?a.push(d(t)):4==Color.SAND_COLOR_MODE?a.push(m(t)):5==Color.SAND_COLOR_MODE?a.push(p(t)):6==Color.SAND_COLOR_MODE?a.push(g(t)):7==Color.SAND_COLOR_MODE?a.push(c(t)):8==Color.SAND_COLOR_MODE?a.push(u(t)):9==Color.SAND_COLOR_MODE&&a.push(v(t))}return a[e];function o(e){return 0==e?(r=M t+60,h=i+5,n=s+5):1==e?(r=t+30,h=i+5,n=s+9):2==e?(r=t,h=i,n=s):3==e?(r=t-30,h=i+5,n=s+9):4==e&&(r=t-60,h=i+5,n=s+5),r<0?r+=360:r>360&&(r-=360),chroma(r,h/100,n/100,"hsl")}function l(e){return r=t,0==e?(h=i,n=s+30):1==e?(h=i-30,n=s+8):2==e?(h=i,n=s):3==e?(h=i-30,n=s+30):4==e&&(h=i,n=s-20),h<10&&(h+=60),(0==e||3==e)&&n>100&&(n=s-50),chroma(r,h/100,n/100,"hsl")}function d(e){return 0==e?(r=t-120,h=i+10,n=s-30):1==e?(r=t+120,h=i-10,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t-120,h=i+10,n=s):4==e&&(r=t+120,h=i+10,n=s-30),r>360?r-M =360:r<0&&(r+=360),h>100&&(h-=20),n>100&&(n-=30),chroma(r,h/100,n/100,"hsl")}function m(e){return 0==e?(r=t,h=i+10,n=s-30):1==e?(r=t,h=i-30,n=s+30):2==e?(r=t,h=i,n=s):3==e?(r=t-180,h=i+20,n=s-30):4==e&&(r=t-180,h=i,n=s),r<0&&(r+=360),chroma(r,h/100,n/100,"hsl")}function p(e){return 0==e?(r=t-150,h=i-10,n=s+30):1==e?(r=t-150,h=i-5,n=s):2==e?(r=t,h=i,n=s):3==e?(r=t+150,h=i+10,n=s+30):4==e&&(r=t+150,h=i+5,n=s),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n>100&&(n-=60),chroma(r,h/100,n/100,"hsl")}function g(e){return 0==M e?(r=t+60,h=i-5):1==e?(r=t+150,h=i-10):2==e?(r=t,h=i):3==e?(r=t-150,h=i+10):4==e&&(r=t-60,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function c(e){return 0==e?(r=t,h=i+20):1==e?(r=t+90,h=i-10):2==e?(r=t,h=i):3==e?(r=t+180,h=i+10):4==e&&(r=t-90,h=i+5),r<0?r+=360:r>360&&(r-=360),h>100&&(h-=20),n=s,chroma(r,h/100,n/100,"hsl")}function u(e){return 0==e?(r=t+30,h=i+10,n=s+20):1==e?(r=t+30,h=i+40,n=s+40):2==e?(r=t,h=i,n=s):3==e?(r=t+160,h=i+25,n=s+5):4==e&&(r=t+150,h=i+10,n=s+20),r>3M 60&&(r-=360),(0==e||4==e)&&h>100?h-=20:1==e&&h>90?h-=80:3==e&&h>60&&(h-=50),1==e&&n>100?n-=80:(0==e||4==e)&&n>100&&(n-=40),chroma(r,h/100,n/100,"hsl")}function v(e){return r=t,h=i,0==e?n=s-25:1==e?n=s+30:2==e?n=s:3==e?n=s+5:4==e&&(n=s-10),n>100&&(n-=80),chroma(r,h/100,n/100,"hsl")}}static chromaToArray=e=>[e._rgb[0],e._rgb[1],e._rgb[2],255*e._rgb[3]];static setColorMode=e=>{this.SAND_COLOR_MODE=e}}class Geometry{static slicePolyByY(e,t){let i=[];for(let s=0;s<e.length;s++){let a=e[s],r=s?e[s-1]:e.at(-1),h=a.y>=t;h!M =r.y>=t&&i.push(Geometry.interWithY(r,a,t)),h&&i.push(a)}return i}static getAreaBelowY(e,t){return Geometry.getPolyArea(Geometry.slicePolyByY(e,t))}static getYByAreaBelow(e,t){let[i,s,a,r]=Geometry.getBoundingBox(e,"COORD"),h=s,n=r;for(let i=0;i<30;++i){let i=(h+n)/2;Geometry.getAreaBelowY(e,i)>t?h=i:n=i}return n}static interWithY(e,t,i){let s=e.copy(),a=t.copy(),r=createVector(-1e9,i),h=createVector(1e9,i);return Geometry.intersection(s,a,r,h)}static getPolyArea(e){let t=0;for(let i=0;i<e.length;i++){let s=e[i],a=M e[(i+1)%e.length],r=createVector(s.x,s.y),h=createVector(a.x,a.y);t+=r.cross(h).z}return t=abs(t)/2,t}static getBoundingBox(e,t="SIZE"){let i=e[0].x,s=e[0].x,a=e[0].y,r=e[0].y;for(let t=0;t<e.length;t++)isNaN(e[t].y)||(a=min(a,e[t].y),r=max(r,e[t].y)),isNaN(e[t].x)||(i=min(i,e[t].x),s=max(s,e[t].x));return"SIZE"==t?[i,a,s-i,r-a]:"COORD"==t?[i,a,s,r]:[]}static intersection(e,t,i,s){let a=createVector(t.x-e.x,t.y-e.y),r=createVector(s.x-i.x,s.y-i.y),h=createVector(i.x-e.x,i.y-e.y),n=(a.copy().rotate(PI/2),r.copy().roM tate(PI/2)),o=h.dot(n)/a.dot(n),l=a.mult(o);return createVector(e.x+l.x,e.y+l.y)}}class GraphicUtils{static applyMask(e,t){e.push(),e.noStroke(),e.blendMode(REMOVE),e.fill(255,255,255,255),e.beginShape(),e.vertex(0,0),e.vertex(0,e.height),e.vertex(e.width,e.height),e.vertex(e.width,0),e.beginContour();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endContour(),e.endShape(e.CLOSE),e.blendMode(BLEND),e.pop()}}class Hourglass{static TICK_INTERVAL=60;static ROTATE_INTERVAL=10/3;constructor(e,t){this.evolvePeriod=M e.evolvePeriod,t.registerIterationChangeEvent(this.onIterationChange.bind(this));let i=t.getCurrentIteration();this.onIterationChange(i),this.update(new Date)}onIterationChange(e){this.flipped=e%2==1}getState(){return{top:this.top,rotation:this.rotation,flipped:this.flipped,timeSinceRotation:this.timeSinceRotation}}update(e){let t,i=0;if(traits.evolvePeriod==EvolvePeriod.HOURLY)t=3600,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.DAILY)t=86400,i+=60*e.geM tHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3;else if(traits.evolvePeriod==EvolvePeriod.MONTHLY){let s=e.getFullYear(),a=e.getMonth()+1;t=24*new Date(s,a,0).getDate()*60*60,i+=24*(e.getDate()-1)*60*60,i+=60*e.getHours()*60,i+=60*e.getMinutes(),i+=e.getSeconds(),i+=e.getMilliseconds()/1e3}this.flipped?this.top=1-min(1,i/t):this.top=min(1,i/t),this.timeSinceRotation=max(0,i-Hourglass.ROTATE_INTERVAL);let s=Math.min(i,Hourglass.ROTATE_INTERVAL);this.rotation=this.flipped?PI:0,this.rotatM ion+=s/Hourglass.ROTATE_INTERVAL*PI}}function getRandomInt(e,t){return floor(random(e,t))}function getRandomItem(e){let t=0;for(const i of e)t+=i[1];let i=random(t),s=0;for(const t of e)if(s+=t[1],i<s)return t[0];return null}function shuffle(e){for(let t=1;t<e.length;++t){let i=getRandomInt(0,t),s=e[t];e[t]=e[i],e[i]=s}}class PostProcessing{constructor(e,t,i){this.wCanvas=e,this.hCanvas=t,this.graphic=createGraphics(this.wCanvas,this.hCanvas),this.updateFilter(1)}updateFilter(e,t,i){this.graphic.fill(255,255,255,25M 5),this.graphic.blendMode(REMOVE),this.graphic.rect(0,0,this.wCanvas,this.hCanvas),this.graphic.blendMode(BLEND);let s,a=this.wCanvas/2,r=this.hCanvas/2,h=2*sqrt(a*a+r*r);s=a>r?sqrt(1-Math.pow(r/a,2)):sqrt(1-Math.pow(a/r,2));let n,o;if(1!=abs(e)){let t,i;3==abs(e)?(t=6,i=.6):10==abs(e)?(t=4,i=.5):60==abs(e)?(t=3,i=.4):3600==abs(e)&&(t=2,i=.3),o=i-.1,n=map(sin(Date.now()/1e3/t*TAU),-1,1,i-.1,i+.1)}else i?(o=1,n=1):(o=.75,n=.75);this.graphic.push(),this.graphic.ellipseMode(RADIUS),this.graphic.translate(a,r);for(let M e=39;e>=0;e--){let t=(e+1)/40;if(1==o||map(t,o,1,0,1.2)<=0)break;let i=max(map(t,n,1,0,1.2),0),s=color(0,0,0,255*i);this.graphic.fill(s),this.graphic.noStroke(),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),e>0&&(t=e/40,this.graphic.fill(255,255,255,255),this.graphic.blendMode(REMOVE),this.graphic.ellipse(0,0,h*a/(a+r)*t,h*r/(a+r)*t),this.graphic.blendMode(BLEND))}this.graphic.pop()}applyToMainCanvas(){image(this.graphic,0,0)}}class BackgroundRenderer{constructor(e,t,i,s,a,r){this.wCanvas=e.width,this.hCanvas=eM .height,this.maxR=min(this.wCanvas,this.hCanvas)/1024,this.dx,this.yvalues,this.xvalues,this.xspacing1=[],this.thickness1=[],this.theta1=[],this.velocity1=[],this.sz1=[],this.xspacing2=[],this.thickness2=[],this.theta2=[],this.velocity2=[],this.sz2=[],this.xspacing3=[],this.thickness3=[],this.theta3=[],this.velocity3=[],this.sz3=[],this.xspacing4=[],this.thickness4=[],this.theta4=[],this.velocity4=[],this.sz4=[],this.c=[],this.num_waves=30,this._h=t,this._s=i,this._l=s,this.patternOrder=a.patternOrder,this.diagonalM =sqrt(Math.pow(width,2)+Math.pow(height,2));let h=createVector(width,height).heading(),n=abs(PI/4-h);this.ty=this.diagonal/2*cos(n),this.waveSpeed=a.waveSpeed,this.wavePeriod=a.wavePeriod,this.waveHeight=a.waveHeight,this.evolvePeriod=a.evolvePeriod,this.evolvePeriod==EvolvePeriod.DAILY?this.num_lines=7:(this.evolvePeriod==EvolvePeriod.HOURLY||this.evolvePeriod==EvolvePeriod.MONTHLY)&&(this.num_lines=12),this.waveHeight==WaveHeight.SHORT?this.amplitude=getRandomInt(20,30):this.waveHeight==WaveHeight.MEDIUM?this.ampM litude=getRandomInt(30,40):this.waveHeight==WaveHeight.TALL&&(this.amplitude=getRandomInt(40,50)),this.wavePeriod==WavePeriod.SHORT?this.period=getRandomInt(300,351):this.wavePeriod==WavePeriod.MEDIUM?this.period=getRandomInt(425,476):this.wavePeriod==WavePeriod.LONG&&(this.period=getRandomInt(600,651)),this.waveSpeed==WaveSpeed.SLOW?(this.min_speed=.003,this.max_speed=.005):this.waveSpeed==WaveSpeed.MEDIUM?(this.min_speed=.008,this.max_speed=.01):this.waveSpeed==WaveSpeed.FAST&&(this.min_speed=.015,this.max_speed=M .018),this.thetaList=[0,1/4*PI,.5*PI,3/4*PI,PI],this.setupStaticWave(),this.setupDynamicWave(),r.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=r.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){randomSeed(100*e+1),shuffle(this.xspacing1),shuffle(this.thickness1),shuffle(this.theta1),shuffle(this.xspacing1),shuffle(this.velocity1),shuffle(this.xspacing2),shuffle(this.thickness2),shuffle(this.theta2),shuffle(this.xspacing2),shuffle(this.velocity2),shuffle(this.xspacing3),shM uffle(this.thickness3),shuffle(this.theta3),shuffle(this.xspacing3),shuffle(this.velocity3),shuffle(this.xspacing4),shuffle(this.thickness4),shuffle(this.theta4),shuffle(this.xspacing4),shuffle(this.velocity4)}setupStaticWave(){for(let e=0;e<this.num_waves;e++){this.xspacing1.push(getRandomInt(5,50)),this.thickness1.push(getRandomInt(50,200)),this.theta1.push({value:random(this.thetaList)}),this.velocity1.push({value:random(this.min_speed,this.max_speed)}),this.sz1.push(random(.5,3)),this.xspacing2.push(getRandomInM t(5,50)),this.thickness2.push(getRandomInt(50,200)),this.theta2.push({value:random(this.thetaList)}),this.velocity2.push({value:random(this.min_speed,this.max_speed)}),this.sz2.push(random(.5,3)),this.xspacing3.push(getRandomInt(5,50)),this.thickness3.push(getRandomInt(50,200)),this.theta3.push({value:random(this.thetaList)}),this.velocity3.push({value:random(this.min_speed,this.max_speed)}),this.sz3.push(random(.5,3)),this.xspacing4.push(getRandomInt(5,50)),this.thickness4.push(getRandomInt(50,200)),this.theta4.puM sh({value:random(this.thetaList)}),this.velocity4.push({value:random(this.min_speed,this.max_speed)}),this.sz4.push(random(.5,3));let t=e%5;this.c.push(Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25))}}setupDynamicWave(){this.dynamicWave={h:random(this.hCanvas/3),xspacing:getRandomInt(5,20),thickness:getRandomInt(100,200),theta:{value:random(this.thetaList)},velocity:{value:random(this.min_speed,this.max_speed)},sz:random(1,3),num_lines:0},1==this.patternOrder[0]?this.dynamicWave.h=random(200,heM ight-200):2==this.patternOrder[0]?this.dynamicWave.h=random(200,width-200):(3==this.patternOrder[0]||4==this.patternOrder[0])&&(this.dynamicWave.h=random(200,2*this.ty-200))}update(e){this.time=e}drawHorWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(width/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),tM +=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s];r<-2||r>height+2||e.square(a,r,n*this.maxR)}}}drawVerWave(e,t,i,s,a,r,h,n,o){this.dx=TWO_PI/this.period*i,this.xvalues=new Array(floor(height/i+20));let l=this.time.getTime()/(1e3/60),d=r.value+h.value*l/5+t;for(let e=0;e<this.xvalues.length;e++)this.xvalues[e]=sin(d)*this.amplitude,d+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.xvalues.length;s++){let a=t+this.xvalues[s],r=s*iM ;a<-2||a>width+2||e.square(a,r,n*this.maxR)}}}drawDiaWave(e,t,i,s,a,r,h,n,o,l){let d=cos(-l),m=sin(-l);this.dx=TWO_PI/this.period*i,this.yvalues=new Array(floor(this.diagonal/i));let p=this.time.getTime()/(1e3/60),g=r.value+h.value*p/5+t;for(let e=0;e<this.yvalues.length;e++)this.yvalues[e]=sin(g)*this.amplitude,g+=this.dx;for(let r=0;r<a;r++){e.noStroke(),e.fill(color(...Color.chromaToArray(o))),t+=s/a;for(let s=0;s<this.yvalues.length;s++){let a=s*i,r=t+this.yvalues[s],h=n*this.maxR,o=a-this.diagonal/2,l=r-this.tM y,p=o*d+l*m+width/2,g=-o*m+l*d+height/2;p<-2||p>width+2||g<-2||g>height+2||e.square(a,r,h)}}}drawHorizontal(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawHorWave(e,t,this.xspacing1[i]*width/1024,this.thickness1[i]*height/1024,this.num_lines,this.theta1[i],this.velocity1[i],this.sz1[i],this.c[i]),t+=(height+50)/this.num_waves}drawVertical(e){let t=-50;for(let i=0;i<this.theta1.length;i++)this.drawVerWave(e,t,this.xspacing2[i]*height/1024,this.thickness2[i]*width/1024,this.num_lines,this.theta2[i],this.vM elocity2[i],this.sz2[i],this.c[i]),t+=(width+50)/this.num_waves}drawLeft(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing3[i]*this.maxR,this.thickness3[i]*this.maxR,this.num_lines,this.theta3[i],this.velocity3[i],this.sz3[i],this.c[i],PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawRight(e){let t=0;for(let i=0;i<this.theta1.length;i++)e.push(),e.translate(width/2,height/2),e.rotate(M 3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,t,this.xspacing4[i]*this.maxR,this.thickness4[i]*this.maxR,this.num_lines,this.theta4[i],this.velocity4[i],this.sz4[i],this.c[i],3*PI/4),e.pop(),t+=(2*this.ty-100)/(this.num_waves-1)}drawPattern(e,t){1==t?this.drawHorizontal(e):2==t?this.drawVertical(e):3==t?this.drawLeft(e):this.drawRight(e)}draw(e,t,i,s,a){this._h=s.h,this._s=s.s,this._l=s.l,e.background(0);let r=t.getHours()>=6&&t.getHours()<18?.2:.05,h=Color.getSandColorByIndex(4,this._h,this._s,M this._l).luminance(r).alpha(.5);if(e.background(color(...Color.chromaToArray(h))),!a)return;this.evolvePeriod==EvolvePeriod.HOURLY?this.dynamicWave.num_lines=(t.getHours()+11)%12+1:this.evolvePeriod==EvolvePeriod.DAILY?this.dynamicWave.num_lines=t.getDay()+1:this.evolvePeriod==EvolvePeriod.MONTHLY&&(this.dynamicWave.num_lines=t.getMonth()+1);for(let e=0;e<this.num_waves;e++){let t=e%5;this.c[e]=Color.getSandColorByIndex(t,this._h,this._s,this._l).luminance(.25)}1==i?(3==this.patternOrder[0]||4==this.patternOrder[0]M ?this.num_waves=30:this.num_waves=20,this.drawPattern(e,this.patternOrder[0])):2==i?(this.patternOrder[0]+this.patternOrder[1]==3?this.num_waves=10:this.patternOrder[0]+this.patternOrder[1]==7?this.num_waves=20:this.num_waves=15,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1])):3==i?(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2])):(this.num_waves=10,this.drawPattern(e,this.patternOrder[0]),M this.drawPattern(e,this.patternOrder[1]),this.drawPattern(e,this.patternOrder[2]),this.drawPattern(e,this.patternOrder[3]));let{h:n,xspacing:o,thickness:l,num_lines:d,theta:m,velocity:p,sz:g}=this.dynamicWave,c=Color.getSandColorByIndex(0,this._h,this._s,this._l).luminance(.5);1==this.patternOrder[0]?this.drawHorWave(e,n,o*width/1024,l*height/1024,d,m,p,g,c):2==this.patternOrder[0]?this.drawVerWave(e,n,o*height/1024,l*width/1024,d,m,p,g,c):3==this.patternOrder[0]?(e.push(),e.translate(width/2,height/2),e.rotate(PI/M 4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,PI/4),e.pop()):4==this.patternOrder[0]&&(e.push(),e.translate(width/2,height/2),e.rotate(3*PI/4),e.translate(-this.diagonal/2,-this.ty),this.drawDiaWave(e,n,o*this.maxR,l*this.maxR,d,m,p,g,c,3*PI/4),e.pop())}}class GrainRenderer{static texture;static deltaX;static deltaY;static maxDelta=100;static wCanvas;static hCanvas;static setup(e,t){GrainRenderer.wCanvas=e+GrainRenderer.maxDelta,GrainRenderer.hCanvas=t+GrainRendereM r.maxDelta,GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0),GrainRenderer.texture=createImage(GrainRenderer.wCanvas,GrainRenderer.hCanvas),GrainRenderer.texture.loadPixels();let i=GrainRenderer.texture.pixelDensity();for(let e=0;e<GrainRenderer.wCanvas;e++)for(let t=0;t<GrainRenderer.hCanvas;t++){let s=216.75,a=255,r=random(s,a),h=random(s,a),n=random(s,a);for(let s=0;s<i;s++)for(let a=0;a<i;a++){let o=4*((t*i+a)*GrainRenderer.wCanvas*i+(e*i+s));GrainRendM erer.texture.pixels[o]=r,GrainRenderer.texture.pixels[o+1]=h,GrainRenderer.texture.pixels[o+2]=n,GrainRenderer.texture.pixels[o+3]=255}}GrainRenderer.texture.updatePixels()}static applyGrain(e,t){let i=!!t&&{atFrame:1};e.textureOverlay(GrainRenderer.texture,{mode:BURN,animate:i})}static applyGrainToMainCanvas(e){blendMode(BURN),e&&(GrainRenderer.deltaX=random(-GrainRenderer.maxDelta,0),GrainRenderer.deltaY=random(-GrainRenderer.maxDelta,0)),image(GrainRenderer.texture,GrainRenderer.deltaX,GrainRenderer.deltaY)}}conM st HourglassSize={SMALL:"SMALL",MEDIUM:"MEDIUM",LARGE:"LARGE"};class HourglassRenderer{constructor(e,t,i){this.nLayer=10,this.wCanvas=e.width,this.hCanvas=e.height,this.hourglassSize=t.hourglassSize,this.poly=t.poly,this.evolvePeriod=t.evolvePeriod,this.xc=this.wCanvas/2,this.yc=this.hCanvas/2,this.x1=this.xc+random(100,300),this.y1=this.yc+random(100,300),this.x2=this.xc+random(100,300),this.y2=this.yc+random(100,300),this.x1m=this.wCanvas-this.x1,this.y1m=this.y1,this.maxR=min(this.wCanvas,this.hCanvas)/2,1==thisM .poly?this.mainRadius=.1*this.maxR*4:this.mainRadius=.1*this.maxR*getRandomInt(1,6),i.registerIterationChangeEvent(this.onIterationChange.bind(this));let s=i.getCurrentIteration();this.onIterationChange(s),this.topline=this.polygon(this.xc,this.yc,this.poly,PI),this.bottomline=this.polygon(this.xc,this.yc,this.poly,0),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.excitement=.15*max(this.sandRects[0][2],this.sandRects[0][3]),this.dx=[],this.dy=[];for(let e=0;e<2M *this.nLayer;++e)this.dx[e]=random(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement);this.curSecond=(new Date).getSeconds(),this.rotateAngle=0}onIterationChange(e){randomSeed(100*e+2),this.startAngle=this.getStartAngle(),this.radiuses=this.getRadiuses()}getIteration(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(M e.getFullYear()-1970)+e.getMonth()),t}getStartAngle(){let e=getRandomInt(1,6);return PI/(2.5+.5*e)}getRadiuses(){let e,t;this.hourglassSize==HourglassSize.MEDIUM?(e=.45*this.maxR,t=.55*this.maxR):this.hourglassSize==HourglassSize.LARGE&&(e=.6*this.maxR,t=.7*this.maxR);let i=[];for(let s=0;s<this.poly;s++){let a;a=0==s?e:random(e,t),i.push(a)}return i}update(e,t){if(e.getSeconds()!=this.curSecond){this.curSecond=e.getSeconds(),this.secondTicked=!0,this.rotateAngle+=PI/30;for(let e=0;e<2*this.nLayer;++e)this.dx[e]=raM ndom(-this.excitement,this.excitement),this.dy[e]=random(-this.excitement,this.excitement)}else this.secondTicked=!1;this.topline=this.polygon(this.xc,this.yc,this.poly,PI+t),this.bottomline=this.polygon(this.xc,this.yc,this.poly,t),this.sandRects=[Geometry.getBoundingBox(this.topline),Geometry.getBoundingBox(this.bottomline)],this.time=e,this.rotation=t}draw(e,t,i){let s=i.luminance(.3);e.fill(255,255,255,255),e.blendMode(REMOVE),e.rect(0,0,this.wCanvas,this.hCanvas),e.blendMode(BLEND),0==t?this.drawShadowNormal(eM ,s,this.time):1==t&&this.drawShadowCircle(e,s),e.fill(255,255,255,255),e.blendMode(REMOVE),this.drawShape(e,this.topline),this.drawShape(e,this.bottomline),e.blendMode(BLEND)}drawShadowNormal(e,t,i){let s=floor(i.getMinutes()/10),a=i.getMinutes()%10;e.push(),e.noFill(),e.strokeWeight(.005*this.maxR);for(let i=0;i<s;i++){let a=map(i,s,0,.2,.5),r=color(...Color.chromaToArray(t.alpha(a)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i],this.yc+this.dy[2*i],this.poly,PI)}for(let i=0;i<a;i++){let s=map(i,a,0,.M 2,.5),r=color(...Color.chromaToArray(t.alpha(s)));e.stroke(r),this.getAndDrawPolygon(e,this.xc+this.dx[2*i+1],this.yc+this.dy[2*i+1],this.poly,0)}e.pop()}drawShadowCircle(e,t){e.push(),e.noStroke(),e.translate(this.xc,this.yc),e.rotate(PI+this.rotateAngle);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.fill(a),this.getAndDrawPolygon(e,0,2.5*this.mainRadius,this.poly,PI),this.getAndDrawPolygon(e,0,2.5*-this.mainRadius,this.poly,0),e.rotate(PI/3)}e.pop(),e.push(),e.noFill(),M e.strokeWeight(2),e.translate(this.xc,this.yc),e.rotate(-this.rotateAngle+PI/30);for(let i=0;i<3;i++){let s=map(i,3,0,.2,.5),a=color(...Color.chromaToArray(t.alpha(s)));e.stroke(a),this.getAndDrawPolygon(e,0,-this.mainRadius/2,this.poly,PI),this.getAndDrawPolygon(e,0,this.mainRadius/2,this.poly,0),e.rotate(-PI/3)}e.pop()}getAndDrawPolygon(e,t,i,s,a){let r=this.polygon(t,i,s,a);this.drawShape(e,r)}drawShape(e,t){e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.endShape(e.CLOSE)}polygon(e,t,i,s){leM t a=(PI/2-this.startAngle)/i,r=0,h=[];h.push({x:e,y:t});let n=this.startAngle+s;for(let s=0;s<i;s++){let i=this.radiuses[r];r+=1;let s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}r=this.poly,n=PI/2+a+s;for(let s=0;s<i;s++){r-=1;let i=this.radiuses[r],s=e+cos(n)*i,o=t+sin(n)*i;h.push({x:s,y:o}),n+=a}return h=h.filter((e=>!isNaN(e.x)&&!isNaN(e.y))),h}getSandRects=()=>this.sandRects;getTopLine=()=>this.topline;getBottomLine=()=>this.bottomline;getSecondTicked=()=>this.secondTicked}const WavePeriod={SHORT:"SHORT",MEM DIUM:"MEDIUM",LONG:"LONG"},WaveHeight={SHORT:"SHORT",MEDIUM:"MEDIUM",TALL:"TALL"},WaveSpeed={SLOW:"SLOW",MEDIUM:"MEDIUM",FAST:"FAST"};class SandRenderer{static N_CURVE_POINT=50;static DROPDOWN_TIME=3;constructor(e,t,i,s,a,r,h,n){this.wCanvas=e.width,this.hCanvas=e.height,this.hInit=t,this.baseLine=this.transformCoord(i),this.baseH=s,this.baseS=a,this.baseL=r,this.curSecond=0,this.waveHeight=h.waveHeight,this.wavePeriod=h.wavePeriod,this.waveSpeed=h.waveSpeed,this.evolvePeriod=h.evolvePeriod,this.nSandLayer=6,this.lM ayers=this.getLayers(),this._h=this.baseH,this._s=this.baseS,this._l=this.baseL,this.prevIteration=null,n.registerIterationChangeEvent(this.onIterationChange.bind(this));let o=n.getCurrentIteration();this.onIterationChange(o)}onIterationChange(e){null==this.prevIteration?this._h=this.getHue(this.baseH,0,e):this._h=this.getHue(this._h,this.prevIteration,e),this.prevIteration=e}getHue(e,t,i){let s=min(t,i),a=max(t,i);for(let r=s;r<a;r++){randomSeed(100*r+3);let s=random(1);if(this.evolvePeriod==EvolvePeriod.HOURLY?s=M map(s,0,1,5,10):this.evolvePeriod==EvolvePeriod.DAILY?s=map(s,0,1,10,30):this.evolvePeriod==EvolvePeriod.MONTHLY&&(s=map(s,0,1,50,100)),i>t)for(e+=s;e>360;)e-=360;else for(e-=s;e<0;)e+=360}return e}update(e){this.time=e}getChroma(){return Color.getSandColorByIndex(0,this._h,this._s,this._l)}getBaseHSL(){return{h:this._h,s:this._s,l:this._l}}draw(e,t,i,s,a){this.nLayer=(this.time.getHours()+11)%12+1,t=this.transformCoord(t),e.background(0);let r=this.getChroma().luminance(.5).alpha(.25);e.background(color(...Color.cM hromaToArray(r))),e.strokeWeight(1),this.layers.forEach((e=>{if(0==e.id)e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).luminance(.2).alpha(1);else{let t=map(e.id/this.nSandLayer,0,1,.5,.8);e.c=Color.getSandColorByIndex(e.id,this._h,this._s,this._l).alpha(t)}let s=map(i,0,1,e.baselineY,this.hInit),a=max(0,map(s,this.hInit,0,0,1)),r=Geometry.getPolyArea(t)*a;e.y=Geometry.getYByAreaBelow(t,r),e.y=map(e.y,0,this.hInit,.05*-this.hCanvas,this.hInit+.05*this.hCanvas)})),this.layers.forEach((i=>{s&&2*i.id<thisM .nLayer&&this.drawDropdown(e,t,i,a)})),this.layers.forEach((t=>this.drawLayer(e,t)));let h=!1;this.time.getSeconds()!=this.curSecond&&(this.curSecond=this.time.getSeconds(),h=!0),GraphicUtils.applyMask(e,t)}transformCoord(e){let[t,i,s,a]=Geometry.getBoundingBox(e),r=t+s,h=i+a;return e.map((e=>{let n=map(e.x,t,r,-s/2,s/2)+this.wCanvas/2,o=map(e.y,i,h,0,a);return createVector(n,o)}))}getLayers(){let e=[];for(let t=0;t<this.nSandLayer;t++){let i,s=this.hInit/this.nSandLayer*t;this.waveSpeed==WaveSpeed.SLOW?i=random(.0M 08,.012):this.waveSpeed==WaveSpeed.MEDIUM?i=random(.016,.024):this.waveSpeed==WaveSpeed.FAST&&(i=random(.032,.048));let a,r,h=random(1e4);this.wavePeriod==WavePeriod.SHORT?a=random(2.7,3):this.wavePeriod==WavePeriod.MEDIUM?a=random(1.8,2):this.wavePeriod==WavePeriod.LONG&&(a=random(1.2,1.3)),this.waveHeight==WaveHeight.SHORT?r=this.hCanvas/30:this.waveHeight==WaveHeight.MEDIUM?r=this.hCanvas/24:this.waveHeight==WaveHeight.TALL&&(r=this.hCanvas/18);let n={mode:"DELTA_Y",deltaY:(e,t)=>map(sin(e*a*TAU+t*i+h),-1,1,-r,rM )};e.push({id:t,baselineY:s,height:r,speed:i,seed:h,shape:n,stripe:{distance:random(.04*this.hInit,.08*this.hInit),height:random(.02*this.hInit,.04*this.hInit),stretch:random(1.2,1.5),colorTransform:e=>e.brighten(1.2)}})}return e}drawDropdown=(e,t,i,s)=>{let{c:a,shape:r}=i,h=Geometry.getBoundingBox(t)[3],n=this.time.getTime()/(1e3/60),o=createVector(this.wCanvas/2,0),l=createVector(this.wCanvas/2,h),d=[];for(let e=0;e<50;e++){let t=e/49,i=o.copy(),{x:s,y:a}=Vector.lerp(i,l,t);s+=r.deltaY(t,-n/5)*map(e,0,50,.1,1.5),M d.push(createVector(s,a))}let m=map(s,0,SandRenderer.DROPDOWN_TIME,0,50);m=min(m,50),e.push(),e.noStroke(),e.fill(color(...Color.chromaToArray(a)));for(let t=0;t<m;t++)e.square(d[t].x,d[t].y,.004*this.hCanvas);e.pop()};drawLayer=(e,t)=>{if(2*t.id<this.nLayer){let i=this.getLayerPointline(t);this.drawWave(e,i,t),this.drawPattern(e,i,t,this.hCanvas/8,this.hCanvas/60),2*t.id+1<this.nLayer&&this.drawStripe(e,i,t)}};getLayerPointline=e=>{let{y:t,shape:i}=e,s=[],a=this.time.getTime()/(1e3/60);if("DELTA_Y"==i.mode){let e=M createVector(0,t),r=createVector(this.wCanvas,t);for(let t=0;t<SandRenderer.N_CURVE_POINT;t++){let h=t/(SandRenderer.N_CURVE_POINT-1),n=e.copy(),{x:o,y:l}=Vector.lerp(n,r,h);l+=i.deltaY(h,a/5),s.push(createVector(o,l))}}else s=[start,end];return s};drawWave=(e,t,i)=>{let{c:s}=i;e.noStroke(),e.fill(color(...Color.chromaToArray(s))),e.beginShape(),e.vertex(0,this.hCanvas);for(let i=0;i<t.length;i++)e.vertex(t[i].x,t[i].y);e.vertex(this.wCanvas,this.hCanvas),e.endShape()};drawPattern=(e,t,i,s,a)=>{e.noStroke();for(letM i=a;i<=s;i+=a){let a=map((i-1)/(s-1),0,1,.2,0);e.fill(0,255*a),e.beginShape();for(let s=0;s<t.length;s++)e.vertex(t[s].x,t[s].y+i);for(let s=t.length-1;s>=0;s--)e.vertex(t[s].x,t[s].y+(i-1));e.endShape()}};drawStripe=(e,t,i)=>{let{c:s,stripe:{distance:a,height:r,stretch:h,colorTransform:n}}=i;e.noStroke();let o=n(s),l=color(...Color.chromaToArray(o)),d=s.alpha();l.setAlpha(255*d),e.fill(l),e.beginShape();for(let i=0;i<t.length;i++)e.vertex(t[i].x*h,t[i].y+a);for(let i=t.length-1;i>=0;i--)e.vertex(t[i].x*h,t[i].y+aM +r);e.endShape()}}new Q5("global");let wCanvas,hCanvas,canvas,timeController,hourglass,layerBackground,layerSandTop,layerSandBottom,layerHourglass,renBackground,renSandTop,renSandBottom,renHourglass,renPostProcessing,traits,prevSpeed,showMode,currentTime,maxFps=60;setup=()=>{setupRandom(),setupTraits(),setupSketch()},setupRandom=()=>{let e=p5seed;randomSeed(e),noiseSeed(e)},setupTraits=()=>{let e=getRandomInt(1,10),t=getRandomItem([[HourglassSize.MEDIUM,70],[HourglassSize.LARGE,30]]),i=getRandomItem([[WaveHeight.SHM ORT,1],[WaveHeight.MEDIUM,1],[WaveHeight.TALL,1]]),s=getRandomItem([[WavePeriod.SHORT,1],[WavePeriod.MEDIUM,1],[WavePeriod.LONG,1]]),a=getRandomItem([[WaveSpeed.SLOW,1],[WaveSpeed.MEDIUM,1],[WaveSpeed.FAST,1]]),r=getRandomItem([[EvolvePeriod.HOURLY,60],[EvolvePeriod.DAILY,35],[EvolvePeriod.MONTHLY,5]]),h=getRandomItem([[1,5],[2,20],[3,50],[4,20],[5,5]]),n=getPatternOrder(),o=getRandomItem(AngelNumber.map((e=>[e[0],1]))),l=getRandomItem(BlissLimit.map((e=>[e[0],e[2]])));traits={waveHeight:i,wavePeriod:s,waveSpeed:a,M evolvePeriod:r,color:e,hourglassSize:t,poly:h,patternOrder:n,angelNumber:o,blissLimit:l},console.log(traits)},getPatternOrder=()=>{let e=[],t=[1,2,3,4],i=getRandomItem([[1,.6],[2,.1],[3,.15],[4,.15]]);e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);for(let s=0;s<3;s++)i=random(t),e.push(i),patternChosen=t.indexOf(i),x=t.splice(patternChosen,1);return e},setupSketch=()=>{frameRate(maxFps),frameCount=0,wCanvas=windowWidth,hCanvas=windowHeight,canvas=createCanvas(wCanvas,hCanvas),showMode=0,timeControM ller=new TimeController(traits),hourglass=new Hourglass(traits,timeController);let e=getRandomInt(0,361),t=getRandomInt(30,101),i=getRandomInt(50,101);Color.setColorMode(traits.color),layerBackground=createGraphics(wCanvas,hCanvas),renBackground=new BackgroundRenderer(layerBackground,e,t,i,traits,timeController),layerHourglass=createGraphics(wCanvas,hCanvas),renHourglass=new HourglassRenderer(layerHourglass,traits,timeController);let s=renHourglass.getSandRects(wCanvas,hCanvas),a=renHourglass.getTopLine(),r=renHourM glass.getBottomLine(),h=createVector(s[0][2],s[0][3]).mag();layerSandTop=createGraphics(h,h),layerSandBottom=createGraphics(h,h),renSandTop=new SandRenderer(layerSandTop,s[0][3],a,e,t,i,traits,timeController),renSandBottom=new SandRenderer(layerSandBottom,s[0][3],r,e,t,i,traits,timeController),imgSandTop=createGraphics(wCanvas,hCanvas),imgSandBottom=createGraphics(wCanvas,hCanvas),renPostProcessing=new PostProcessing(wCanvas,hCanvas,traits),GrainRenderer.setup(wCanvas,hCanvas),prevSpeed=1},draw=()=>{let e=0==showMoM de||1==showMode,t=0==showMode||2==showMode,{time:i,state:s,speed:a,paused:r,isLive:h,realDelta:n}=timeController.step();hourglass.update(i),renSandTop.update(i),renSandBottom.update(i),renBackground.update(i);let o=4==s?1:0,{top:l,rotation:d,flipped:m,timeSinceRotation:p}=hourglass.getState();renHourglass.update(i,d);let g=renSandTop.getChroma(),c=renSandTop.getBaseHSL();if(background(255),renBackground.draw(layerBackground,i,s,c,e),image(layerBackground,0,0),t){let e=renHourglass.getSandRects();renHourglass.draw(lM ayerHourglass,o,g),renSandTop.draw(layerSandTop,renHourglass.getTopLine(),1-l,!m,p),renSandBottom.draw(layerSandBottom,renHourglass.getBottomLine(),l,m,p),image(layerSandTop,...e[0],(layerSandTop.width-e[0][2])/2,0,e[0][2],e[0][3]),image(layerSandBottom,...e[1],(layerSandBottom.width-e[1][2])/2,0,e[1][2],e[1][3]),image(layerHourglass,0,0)}let u=renHourglass.getSecondTicked();GrainRenderer.applyGrainToMainCanvas(u),renPostProcessing.updateFilter(a,r,h),prevSpeed=a,renPostProcessing.applyToMainCanvas(),currentTime=i}M ,keyPressed=()=>{"+"!=key&&"="!=key||timeController.setFasterSpeed(),"-"==key&&timeController.setSlowerSpeed(),keyCode==LEFT_ARROW&&timeController.jumpBackward(),keyCode==RIGHT_ARROW&&timeController.jumpForward(),keyCode==ESCAPE&&timeController.resumeLive()," "==key&&timeController.togglePause(),"T"!=key&&"t"!=key||(showMode=(showMode+1)%3),"S"!=key&&"s"!=key||saveCanvasAtCurrentTime()},saveCanvasAtCurrentTime=()=>{let e=60*new Date(currentTime).getTimezoneOffset()*1e3,t=new Date(currentTime-e).toISOString().slice(M 0,-1);save(t+".png")};const EvolvePeriod={HOURLY:"HOURLY",DAILY:"DAILY",MONTHLY:"MONTHLY"},AngelNumber=[["11/111/1111",["1:1","1:11","11:1","11:11"],["1/1","11/1","1/11","11/11"]],["22/222/2222",["2:2","2:22","22:2","22:22"],["2/2","22/2"]],["33/333/3333",["3:3","3:33"],["3/3"]],["44/444/4444",["4:4","4:44"],["4/4"]],["55/555/555",["5:5","5:55"],["5/5"]],["66/666/6666",["6:6"],["6/6"]],["77/777/7777",["7:7"],["7/7"]],["88/888/8888",["8:8"],["8/8"]],["99/999/9999",["9:9"],["9/9"]],["1212",["12:12"],["12/12"]],["399/M 339",["3:39"],["3/3","9/3","3/9","9/9"]],["83/8833",["8:3"],["8/3","3/8"]],["72/7722",["7:2"],["7/2","2/7"]],["633/6363",["6:3","6:33"],["6/3","3/6"]],["588",["5:8","8:58"],["8/5","5/8","8/8"]],["446/4646",["4:6","4:46"],["4/4","6/4","4/6"]],["000",[],[]],["1010",["10:10"],["10/10"]],["1017",["10:17","17:10"],["17/10"]],["1022",["10:22","22:10"],["22/10"]],["1313",["13:13"],["1/3","3/1"]],["1444",["14:44"],["4/1","1/4","4/4"]],["2020",["20:20"],["2/2"]]],BlissLimit=[["Forever",-1,3],["2",2,40],["5",5,30],["10",10,2M 0],["20",20,7]];class TimeController{constructor(e){this.speeds=[-3600,-60,-10,-3,1,3,10,60,3600],this.defaultSpeedLevel=4,this.evolvePeriod=e.evolvePeriod,this.angelNumber=e.angelNumber,this.blissLimit=e.blissLimit,this.timestamp=Date.now(),this.prevRealTimestamp=this.timestamp,this.paused=!1,this.speedLevel=this.defaultSpeedLevel;let t=new Date(this.timestamp);this.iteration=this.getIteration(t),this.prevBliss=this.getPrevBliss(t,1),this.iterationChangeHandlers=[]}getCurrentIteration=()=>this.iteration;getIteratiM on(e){let t,i=e.getTime()-60*e.getTimezoneOffset()*1e3;return this.evolvePeriod==EvolvePeriod.HOURLY?t=floor(i/36e5):this.evolvePeriod==EvolvePeriod.DAILY?t=floor(i/864e5):this.evolvePeriod==EvolvePeriod.MONTHLY&&(t=12*(e.getFullYear()-1970)+e.getMonth()),t}registerIterationChangeEvent(e){this.iterationChangeHandlers.push(e)}unregisterIterationChangeEvent(e){this.iterationChangeHandlers=this.iterationChangeHandlers.filter((t=>t!=e))}step(){let e=Date.now(),t=e-this.prevRealTimestamp,i=this.speeds[this.speedLevel],sM =this.paused?0:i;this.timestamp+=t*s,this.timestamp=this.limitTimestamp(this.timestamp);let a=new Date(this.timestamp),r=this.getStateFromTime(a);this.updateIteration(a),this.prevRealTimestamp=e;let h=this.timestamp==e;return{time:a,state:r,speed:i,paused:this.paused,isLive:h,realDelta:t}}updateIteration(e){let t=this.getIteration(e);t!=this.iteration&&(this.iterationChangeHandlers.forEach((e=>e(t))),this.iteration=t)}getStateFromTime(e){let t,i,s=e.getHours(),a=e.getMinutes(),r=e.getDate(),h=e.getMonth()+1;if("000M "==this.angelNumber)i=0==s&&0==a,t=i&&1==r&&1==h;else{let e=`${s}:${a}`,n=`${h}/${r}`,o=AngelNumber.filter((e=>e[0]==this.angelNumber))[0];i=o[1].includes(e),t=o[2].includes(n)}return i&&t?4:t?3:i?2:1}limitTimestamp(e){let t=BlissLimit.filter((e=>e[0]==this.blissLimit))[0][1],i=Date.now(),s=this.getPrevBliss(new Date,t);return e>i?(e=i,this.resetSpeed()):e<s&&(e=s,this.resetSpeed()),e}getPrevBliss(e,t){if(-1==t)return 0;let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i-=6e4;let e=this.getStateFrM omTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}getNextBliss(e,t){if(-1==t)return Date.now();let i=e.getTime()-e.getMilliseconds()-1e3*e.getSeconds();for(;t>0;){i+=6e4;let e=this.getStateFromTime(new Date(i));2!=e&&4!=e||(t-=1)}return i}togglePause(){this.paused=!this.paused}setFasterSpeed(){this.speedLevel=min(this.speedLevel+1,this.speeds.length-1),this.paused=!1}setSlowerSpeed(){this.speedLevel=max(this.speedLevel-1,0),this.paused=!1}jumpForward(){let e=new Date(this.timestamp);this.timestamp=this.getNextBliss(eM ,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}jumpBackward(){let e=new Date(this.timestamp);this.timestamp=this.getPrevBliss(e,1),this.timestamp=this.limitTimestamp(this.timestamp),this.resetSpeed()}resetSpeed(){this.speedLevel=this.defaultSpeedLevel,this.paused=!1}resumeLive(){this.timestamp=Date.now(),this.resetSpeed()}} text/plain;charset=utf-8 text/plain;charset=utf-8 text/plain;charset=utf-8 Adobe Photoshop CC 2017 (Macintosh) cropWhenPrintingbool http://ns.adobe.com/xap/1.0/ " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP CorM e 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="adobe:docid:photoshop:c59552a3-e8ea-1180-9761-b63092c8b4ab" xmpMM:InstanceID="xmp.iid:14d6aed4-31be-4e69-86M eb-82f9e5711b92" xmpMM:OriginalDocumentID="AFB80E7CE2EC3F69CA6797197FFA61A0" dc:format="image/jpeg" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB" xmp:CreateDate="2023-02-08T14:40:31-06:00" xmp:ModifyDate="2023-02-09T15:34:51-06:00" xmp:MetadataDate="2023-02-09T15:34:51-06:00"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:354198da-1963-46ed-a14b-b14760cbb785" stEvt:when="2023-02-09T15:34:51-06:00" stEvt:softwareAgent="Adobe Photoshop CC 2017 (Macintosh)" stEvt:changed="/"/> M <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:14d6aed4-31be-4e69-86eb-82f9e5711b92" stEvt:when="2023-02-09T15:34:51-06:00" stEvt:softwareAgent="Adobe Photoshop CC 2017 (Macintosh)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?> Adobe Photoshop 21.1 (Windows) " id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:pdf="http://ns.adobe.com/pdf/1.3/" xmM lns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" dc:format="image/jpeg" xmp:MetadataDate="2023-02-13T12:18:29-05:00" xmp:CreatorTool="Adobe Photoshop 21.1 (Windows)" xmp:CreateDate="2022-12-26T12:07:40-05:00" xmp:ModifyDate="2023-02-13T12:18:29-05:00" pdf:Producer="Adobe PSL 1.3e for Canon" xmpMM:OriginalDocumentID="uuid:4dd8a963-0000-4142-4344-4M 54600000000" xmpMM:InstanceID="xmp.iid:a0cddffd-9d5d-914d-8204-fed3c2d97d80" xmpMM:DocumentID="adobe:docid:photoshop:5d8da20a-b143-d347-a3e3-1f961c18d505" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" photoshop:LegacyIPTCDigest="E8F15CF32FC118A1A27B67ADC564D5BA"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="converted" stEvt:parameters="from application/pdf to application/vnd.adobe.photoshop"/> <rdf:li stEvt:softwareAgent="Adobe Photoshop 21.1 (Windows)" stEvt:changed="/" stEvt:when="2023-01-03M T18:51:46-05:00" stEvt:instanceID="xmp.iid:f49d5d16-ea36-f54a-bb23-114da27486eb" stEvt:action="saved"/> <rdf:li stEvt:action="converted" stEvt:parameters="from application/pdf to image/jpeg"/> <rdf:li stEvt:action="derived" stEvt:parameters="converted from application/vnd.adobe.photoshop to image/jpeg"/> <rdf:li stEvt:softwareAgent="Adobe Photoshop 21.1 (Windows)" stEvt:changed="/" stEvt:when="2023-01-03T18:51:46-05:00" stEvt:instanceID="xmp.iid:4a6b6eed-98e1-a54c-b3d1-315f336ff0f8" stEvt:action="saved"/> <rdf:li sM tEvt:softwareAgent="Adobe Photoshop 21.1 (Windows)" stEvt:changed="/" stEvt:when="2023-02-13T12:18:29-05:00" stEvt:instanceID="xmp.iid:a0cddffd-9d5d-914d-8204-fed3c2d97d80" stEvt:action="saved"/> </rdf:Seq> </xmpMM:History> <xmpMM:DerivedFrom stRef:originalDocumentID="uuid:4dd8a963-0000-4142-4344-454600000000" stRef:instanceID="xmp.iid:f49d5d16-ea36-f54a-bb23-114da27486eb" stRef:documentID="xmp.did:f49d5d16-ea36-f54a-bb23-114da27486eb"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> M M M M <?xpacket end="w"?>h! text/html;charset=utf-8 display: block; <meta charset="utf-8" /> let seed=window.location.href.split('/').find(t=>t.includes('i0')); if (seed == null) { seed = new URLSearchParams(window.location.search).get("seed"); let pattern = "seed="; for(let i = 0; i < seed.length - pattern.length; M if (seed.substring(i, i + pattern.length) == pattern) { seed = seed.substring(i + pattern.length); function cyrb128($) { let _ = 1779033703, u = 3144134277, i = 1013904242, l = 2773480762; for (let n = 0, r; n < $.length; n++) _ = u ^ Math.imul(_ ^ (r = $.charCodeAt(n)), 597399067), u = i ^ Math.imul(u ^ r, 2869860233), i = l ^ Math.imul(i ^ r, 951274213), l = _ ^ Math.imul(l ^ r, 2716044179); return _ = Math.imul(i ^ _ >>> 18,M 597399067), u = Math.imul(l ^ u >>> 22, 2869860233), i = Math.imul(_ ^ i >>> 17, 951274213), l = Math.imul(u ^ l >>> 19, 2716044179), [(_ ^ u ^ i ^ l) >>> 0, (u ^ _) >>> 0, (i ^ _) >>> 0, (l ^ _) >>> 0] function sfc32($, _, u, i) { return function () { u >>>= 0, i >>>= 0; var l = ($ >>>= 0) + (_ >>>= 0) | 0; return $ = _ ^ _ >>> 9, _ = u + (u << 3) | 0, u = (u = u << 21 | u >>> 11) + (l = l + (i = i + 1 | 0) | 0) | 0, (l >>> 0) / 4294967296 sfc32(...cyrb128(seed)); let p5seed = Math.floor(mathRand() * Number.MAX_SAFE_INTEGER); !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).chroma=e()}(this,function(){"use strict";for(var r=function(r,e,t){return void 0===e&&(e=0),void 0===t&&(t=1),r<e?e:r>t?t:r},e=r,t={},n=0,a=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];n<a.length;nM +=1){var f=a[n];t["[object "+f+"]"]=f.toLowerCase()}var o=function(r){return t[Object.prototype.toString.call(r)]||"object"},c=o,u=o,i=Math.PI,l={clip_rgb:function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var t=0;t<=3;t++)t<3?((r[t]<0||r[t]>255)&&(r._clipped=!0),r[t]=e(r[t],0,255)):3===t&&(r[t]=e(r[t],0,1));return r},limit:r,type:o,unpack:function(r,e){return void 0===e&&(e=null),r.length>=3?Array.prototype.slice.call(r):"object"==c(r[0])&&e?e.split("").filter(function(e){return void 0!==r[0][e]}).map(function(M e){return r[0][e]}):r[0]},last:function(r){if(r.length<2)return null;var e=r.length-1;return"string"==u(r[e])?r[e].toLowerCase():null},PI:i,TWOPI:2*i,PITHIRD:i/3,DEG2RAD:i/180,RAD2DEG:180/i},d={format:{},autodetect:[]},h=l.last,b=l.clip_rgb,s=l.type,p=d,g=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if("object"===s(r[0])&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];var t=h(r),n=!1;if(!t){n=!0,p.sorted||(p.autodetect=p.autodetect.sort(function(r,e){return e.p-r.p}),p.sortedM =!0);for(var a=0,f=p.autodetect;a<f.length;a+=1){var o=f[a];if(t=o.test.apply(o,r))break}}if(!p.format[t])throw new Error("unknown format: "+r);var c=p.format[t].apply(null,n?r:r.slice(0,-1));this._rgb=b(c),3===this._rgb.length&&this._rgb.push(1)};g.prototype.toString=function(){return"function"==s(this.hex)?this.hex():"["+this._rgb.join(",")+"]"};var v=g,y=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(y.Color,[null].concat(r)))};y.Color=v,y.version="2.4.M 2";var m=y,k=l.unpack,w=Math.max,M=l.unpack,_=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=M(r,"cmyk"))[0],n=r[1],a=r[2],f=r[3],o=r.length>4?r[4]:1;return 1===f?[0,0,0,o]:[t>=1?0:255*(1-t)*(1-f),n>=1?0:255*(1-n)*(1-f),a>=1?0:255*(1-a)*(1-f),o]},N=m,F=v,x=d,P=l.unpack,R=l.type,G=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=k(r,"rgb"),n=t[0],a=t[1],f=t[2],o=1-w(n/=255,w(a/=255,f/=255)),c=o<1?1/(1-o):0;return[(1-n-o)*c,(1-a-o)*c,(1-f-o)*c,o]};F.prototype.cmyk=fuM nction(){return G(this._rgb)},N.cmyk=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(F,[null].concat(r,["cmyk"])))},x.format.cmyk=_,x.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=P(r,"cmyk"),"array"===R(r)&&4===r.length)return"cmyk"}});var j=l.unpack,E=l.last,O=function(r){return Math.round(100*r)/100},q=l.unpack,B=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=q(r,"rgba"))[0],nM =r[1],a=r[2];t/=255,n/=255,a/=255;var f,o,c=Math.min(t,n,a),u=Math.max(t,n,a),i=(u+c)/2;return u===c?(f=0,o=Number.NaN):f=i<.5?(u-c)/(u+c):(u-c)/(2-u-c),t==u?o=(n-a)/(u-c):n==u?o=2+(a-t)/(u-c):a==u&&(o=4+(t-n)/(u-c)),(o*=60)<0&&(o+=360),r.length>3&&void 0!==r[3]?[o,f,i,r[3]]:[o,f,i]},I=l.unpack,A=l.last,D=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=j(r,"hsla"),n=E(r)||"lsa";return t[0]=O(t[0]||0),t[1]=O(100*t[1])+"%",t[2]=O(100*t[2])+"%","hsla"===n||t.length>3&&t[3]<1?(t[3]=t.length>3?t[M 3]:1,n="hsla"):t.length=3,n+"("+t.join(",")+")"},C=B,Y=Math.round,S=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=I(r,"rgba"),n=A(r)||"rgb";return"hsl"==n.substr(0,3)?D(C(t),n):(t[0]=Y(t[0]),t[1]=Y(t[1]),t[2]=Y(t[2]),("rgba"===n||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),n+"("+t.slice(0,"rgb"===n?3:4).join(",")+")")},L=l.unpack,$=Math.round,T=function(){for(var r,e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,a,f,o=(e=L(e,"hsl"))[0],c=e[1],u=e[2];if(0===c)n=a=f=255*u;elsM e{var i=[0,0,0],l=[0,0,0],d=u<.5?u*(1+c):u+c-u*c,h=2*u-d,b=o/360;i[0]=b+1/3,i[1]=b,i[2]=b-1/3;for(var s=0;s<3;s++)i[s]<0&&(i[s]+=1),i[s]>1&&(i[s]-=1),6*i[s]<1?l[s]=h+6*(d-h)*i[s]:2*i[s]<1?l[s]=d:3*i[s]<2?l[s]=h+(d-h)*(2/3-i[s])*6:l[s]=h;n=(r=[$(255*l[0]),$(255*l[1]),$(255*l[2])])[0],a=r[1],f=r[2]}return e.length>3?[n,a,f,e[3]]:[n,a,f,1]},K=T,W=d,X=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Z=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,H=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\M d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,U=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,V=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,J=Math.round,Q=function(r){var e;if(r=r.toLowerCase().trim(),W.format.named)try{return W.format.named(r)}catch(r){}if(e=r.match(X)){for(var t=e.slice(1,4),n=0;n<3;n++)t[n]=+t[n];returnM t[3]=1,t}if(e=r.match(Z)){for(var a=e.slice(1,5),f=0;f<4;f++)a[f]=+a[f];return a}if(e=r.match(H)){for(var o=e.slice(1,4),c=0;c<3;c++)o[c]=J(2.55*o[c]);return o[3]=1,o}if(e=r.match(z)){for(var u=e.slice(1,5),i=0;i<3;i++)u[i]=J(2.55*u[i]);return u[3]=+u[3],u}if(e=r.match(U)){var l=e.slice(1,4);l[1]*=.01,l[2]*=.01;var d=K(l);return d[3]=1,d}if(e=r.match(V)){var h=e.slice(1,4);h[1]*=.01,h[2]*=.01;var b=K(h);return b[3]=+e[4],b}};Q.test=function(r){return X.test(r)||Z.test(r)||H.test(r)||z.test(r)||U.test(r)||V.test(r)M };var rr=m,er=v,tr=d,nr=l.type,ar=S,fr=Q;er.prototype.css=function(r){return ar(this._rgb,r)},rr.css=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(er,[null].concat(r,["css"])))},tr.format.css=fr,tr.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===nr(r)&&fr.test(r))return"css"}});var or=v,cr=m,ur=l.unpack;d.format.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e]M ;var t=ur(r,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t},cr.gl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(or,[null].concat(r,["gl"])))},or.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ir=l.unpack,lr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=ir(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Math.min(a,f,o),u=Math.max(a,f,o),i=u-c,l=100*i/255,d=c/(255-i)*100;return 0===i?t=Number.NaN:(a===u&&(t=M (f-o)/i),f===u&&(t=2+(o-a)/i),o===u&&(t=4+(a-f)/i),(t*=60)<0&&(t+=360)),[t,l,d]},dr=l.unpack,hr=Math.floor,br=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=dr(o,"hcg"))[0],h=o[1],b=o[2];b*=255;var s=255*h;if(0===h)u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var p=hr(d/=60),g=d-p,v=b*(1-h),y=v+s*(1-g),m=v+s*g,k=v+s;switch(p){case 0:u=(r=[k,m,v])[0],i=r[1],l=r[2];break;case 1:u=(e=[y,k,v])[0],i=e[1],l=e[2];break;case 2:u=(t=[v,k,m])[0],i=t[1],l=t[2];break;cM ase 3:u=(n=[v,y,k])[0],i=n[1],l=n[2];break;case 4:u=(a=[m,v,k])[0],i=a[1],l=a[2];break;case 5:u=(f=[k,v,y])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},sr=l.unpack,pr=l.type,gr=m,vr=v,yr=d,mr=lr;vr.prototype.hcg=function(){return mr(this._rgb)},gr.hcg=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(vr,[null].concat(r,["hcg"])))},yr.format.hcg=br,yr.autodetect.push({p:1,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=sr(r,"M hcg"),"array"===pr(r)&&3===r.length)return"hcg"}});var kr=l.unpack,wr=l.last,Mr=Math.round,_r=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=kr(r,"rgba"),n=t[0],a=t[1],f=t[2],o=t[3],c=wr(r)||"auto";void 0===o&&(o=1),"auto"===c&&(c=o<1?"rgba":"rgb");var u="000000"+((n=Mr(n))<<16|(a=Mr(a))<<8|(f=Mr(f))).toString(16);u=u.substr(u.length-6);var i="0"+Mr(255*o).toString(16);switch(i=i.substr(i.length-2),c.toLowerCase()){case"rgba":return"#"+u+i;case"argb":return"#"+i+u;default:return"#"+u}},Nr=/M ^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,Fr=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,xr=function(r){if(r.match(Nr)){4!==r.length&&7!==r.length||(r=r.substr(1)),3===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var e=parseInt(r,16);return[e>>16,e>>8&255,255&e,1]}if(r.match(Fr)){5!==r.length&&9!==r.length||(r=r.substr(1)),4===r.length&&(r=(r=r.split(""))[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var t=parseInt(r,16);return[t>>24&255,t>>16&255,t>>8&255,Math.round((255&t)/255*100)/100]}throw new Error("unknown hex coM lor: "+r)},Pr=m,Rr=v,Gr=l.type,jr=d,Er=_r;Rr.prototype.hex=function(r){return Er(this._rgb,r)},Pr.hex=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Rr,[null].concat(r,["hex"])))},jr.format.hex=xr,jr.autodetect.push({p:4,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===Gr(r)&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var Or=l.unpack,qr=l.TWOPI,Br=Math.min,Ir=Math.sqrt,Ar=Math.acos,Dr=functionM (){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n=Or(r,"rgb"),a=n[0],f=n[1],o=n[2],c=Br(a/=255,f/=255,o/=255),u=(a+f+o)/3,i=u>0?1-c/u:0;return 0===i?t=NaN:(t=(a-f+(a-o))/2,t/=Ir((a-f)*(a-f)+(a-o)*(f-o)),t=Ar(t),o>f&&(t=qr-t),t/=qr),[360*t,i,u]},Cr=l.unpack,Yr=l.limit,Sr=l.TWOPI,Lr=l.PITHIRD,$r=Math.cos,Tr=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Cr(r,"hsi"))[0],o=r[1],c=r[2];return isNaN(f)&&(f=0),isNaN(o)&&(o=0),f>360&&(f-=360),f<0&&(f+=360),(f/=360)<1/3?n=1-M ((a=(1-o)/3)+(t=(1+o*$r(Sr*f)/$r(Lr-Sr*f))/3)):f<2/3?a=1-((t=(1-o)/3)+(n=(1+o*$r(Sr*(f-=1/3))/$r(Lr-Sr*f))/3)):t=1-((n=(1-o)/3)+(a=(1+o*$r(Sr*(f-=2/3))/$r(Lr-Sr*f))/3)),[255*(t=Yr(c*t*3)),255*(n=Yr(c*n*3)),255*(a=Yr(c*a*3)),r.length>3?r[3]:1]},Kr=l.unpack,Wr=l.type,Xr=m,Zr=v,Hr=d,zr=Dr;Zr.prototype.hsi=function(){return zr(this._rgb)},Xr.hsi=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Zr,[null].concat(r,["hsi"])))},Hr.format.hsi=Tr,Hr.autodetect.push({pM :2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Kr(r,"hsi"),"array"===Wr(r)&&3===r.length)return"hsi"}});var Ur=l.unpack,Vr=l.type,Jr=m,Qr=v,re=d,ee=B;Qr.prototype.hsl=function(){return ee(this._rgb)},Jr.hsl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Qr,[null].concat(r,["hsl"])))},re.format.hsl=T,re.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ur(r,"hsl"),"array"===Vr(r)M &&3===r.length)return"hsl"}});var te=l.unpack,ne=Math.min,ae=Math.max,fe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=te(r,"rgb"))[0],o=r[1],c=r[2],u=ne(f,o,c),i=ae(f,o,c),l=i-u;return a=i/255,0===i?(t=Number.NaN,n=0):(n=l/i,f===i&&(t=(o-c)/l),o===i&&(t=2+(c-f)/l),c===i&&(t=4+(f-o)/l),(t*=60)<0&&(t+=360)),[t,n,a]},oe=l.unpack,ce=Math.floor,ue=function(){for(var r,e,t,n,a,f,o=[],c=arguments.length;c--;)o[c]=arguments[c];var u,i,l,d=(o=oe(o,"hsv"))[0],h=o[1],b=o[2];if(b*=255,0===h)M u=i=l=b;else{360===d&&(d=0),d>360&&(d-=360),d<0&&(d+=360);var s=ce(d/=60),p=d-s,g=b*(1-h),v=b*(1-h*p),y=b*(1-h*(1-p));switch(s){case 0:u=(r=[b,y,g])[0],i=r[1],l=r[2];break;case 1:u=(e=[v,b,g])[0],i=e[1],l=e[2];break;case 2:u=(t=[g,b,y])[0],i=t[1],l=t[2];break;case 3:u=(n=[g,v,b])[0],i=n[1],l=n[2];break;case 4:u=(a=[y,g,b])[0],i=a[1],l=a[2];break;case 5:u=(f=[b,g,v])[0],i=f[1],l=f[2]}}return[u,i,l,o.length>3?o[3]:1]},ie=l.unpack,le=l.type,de=m,he=v,be=d,se=fe;he.prototype.hsv=function(){return se(this._rgb)},de.hsv=M function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(he,[null].concat(r,["hsv"])))},be.format.hsv=ue,be.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=ie(r,"hsv"),"array"===le(r)&&3===r.length)return"hsv"}});var pe={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},ge=pe,ve=l.unpack,ye=Math.pow,me=function(r){return(r/=255)<=.04045?r/12.92:ye((r+.055)/1.055,2.4)},ke=function(M r){return r>ge.t3?ye(r,1/3):r/ge.t2+ge.t0},we=function(r,e,t){return r=me(r),e=me(e),t=me(t),[ke((.4124564*r+.3575761*e+.1804375*t)/ge.Xn),ke((.2126729*r+.7151522*e+.072175*t)/ge.Yn),ke((.0193339*r+.119192*e+.9503041*t)/ge.Zn)]},Me=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=ve(r,"rgb"),n=t[0],a=t[1],f=t[2],o=we(n,a,f),c=o[0],u=o[1],i=116*u-16;return[i<0?0:i,500*(c-u),200*(u-o[2])]},_e=pe,Ne=l.unpack,Fe=Math.pow,xe=function(r){return 255*(r<=.00304?12.92*r:1.055*Fe(r,1/2.4)-.055)},Pe=funM ction(r){return r>_e.t1?r*r*r:_e.t2*(r-_e.t0)},Re=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t,n,a,f=(r=Ne(r,"lab"))[0],o=r[1],c=r[2];return n=(f+16)/116,t=isNaN(o)?n:n+o/500,a=isNaN(c)?n:n-c/200,n=_e.Yn*Pe(n),t=_e.Xn*Pe(t),a=_e.Zn*Pe(a),[xe(3.2404542*t-1.5371385*n-.4985314*a),xe(-.969266*t+1.8760108*n+.041556*a),xe(.0556434*t-.2040259*n+1.0572252*a),r.length>3?r[3]:1]},Ge=l.unpack,je=l.type,Ee=m,Oe=v,qe=d,Be=Me;Oe.prototype.lab=function(){return Be(this._rgb)},Ee.lab=function(){for(var rM =[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Oe,[null].concat(r,["lab"])))},qe.format.lab=Re,qe.autodetect.push({p:2,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ge(r,"lab"),"array"===je(r)&&3===r.length)return"lab"}});var Ie=l.unpack,Ae=l.RAD2DEG,De=Math.sqrt,Ce=Math.atan2,Ye=Math.round,Se=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ie(r,"lab"),n=t[0],a=t[1],f=t[2],o=De(a*a+f*f),c=(Ce(f,a)*Ae+360)%360;return 0===YeM (1e4*o)&&(c=Number.NaN),[n,o,c]},Le=l.unpack,$e=Me,Te=Se,Ke=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Le(r,"rgb"),n=t[0],a=t[1],f=t[2],o=$e(n,a,f),c=o[0],u=o[1],i=o[2];return Te(c,u,i)},We=l.unpack,Xe=l.DEG2RAD,Ze=Math.sin,He=Math.cos,ze=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=We(r,"lch"),n=t[0],a=t[1],f=t[2];return isNaN(f)&&(f=0),[n,He(f*=Xe)*a,Ze(f)*a]},Ue=l.unpack,Ve=ze,Je=Re,Qe=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=M (r=Ue(r,"lch"))[0],n=r[1],a=r[2],f=Ve(t,n,a),o=f[0],c=f[1],u=f[2],i=Je(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},rt=l.unpack,et=Qe,tt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rt(r,"hcl").reverse();return et.apply(void 0,t)},nt=l.unpack,at=l.type,ft=m,ot=v,ct=d,ut=Ke;ot.prototype.lch=function(){return ut(this._rgb)},ot.prototype.hcl=function(){return ut(this._rgb).reverse()},ft.lch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.biM nd.apply(ot,[null].concat(r,["lch"])))},ft.hcl=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(ot,[null].concat(r,["hcl"])))},ct.format.lch=Qe,ct.format.hcl=tt,["lch","hcl"].forEach(function(r){return ct.autodetect.push({p:2,test:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];if(e=nt(e,r),"array"===at(e)&&3===e.length)return r}})});var it=d,lt=l.type,dt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:M "#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",daM rkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#M adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#M 778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhiteM :"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a4M 60",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},ht=xr,bt=_r;v.prototype.name=function(){for(var r=bt(this._rgb,"rgb"),e=0,t=Object.keys(dt);e<t.length;e+=1){var n=M t[e];if(dt[n]===r)return n.toLowerCase()}return r},it.format.named=function(r){if(r=r.toLowerCase(),dt[r])return ht(dt[r]);throw new Error("unknown color name: "+r)},it.autodetect.push({p:5,test:function(r){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];if(!e.length&&"string"===lt(r)&&dt[r.toLowerCase()])return"named"}});var st=l.unpack,pt=l.type,gt=function(r){if("number"==pt(r)&&r>=0&&r<=16777215)return[r>>16,r>>8&255,255&r,1];throw new Error("unknown num color: "+r)},vt=m,yt=v,mt=d,kt=l.type,wt=fuM nction(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=st(r,"rgb");return(t[0]<<16)+(t[1]<<8)+t[2]};yt.prototype.num=function(){return wt(this._rgb)},vt.num=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(yt,[null].concat(r,["num"])))},mt.format.num=gt,mt.autodetect.push({p:5,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(1===r.length&&"number"===kt(r[0])&&r[0]>=0&&r[0]<=16777215)return"num"}});var Mt=m,_t=v,Nt=d,FtM =l.unpack,xt=l.type,Pt=Math.round;_t.prototype.rgb=function(r){return void 0===r&&(r=!0),!1===r?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Pt)},_t.prototype.rgba=function(r){return void 0===r&&(r=!0),this._rgb.slice(0,4).map(function(e,t){return t<3?!1===r?e:Pt(e):e})},Mt.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(_t,[null].concat(r,["rgb"])))},Nt.format.rgb=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Ft(r,"rgba");retM urn void 0===t[3]&&(t[3]=1),t},Nt.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ft(r,"rgba"),"array"===xt(r)&&(3===r.length||4===r.length&&"number"==xt(r[3])&&r[3]>=0&&r[3]<=1))return"rgb"}});var Rt=Math.log,Gt=function(r){var e,t,n,a=r/100;return a<66?(e=255,t=a<6?0:-155.25485562709179-.44596950469579133*(t=a-2)+104.49216199393888*Rt(t),n=a<20?0:.8274096064007395*(n=a-10)-254.76935184120902+115.67994401066147*Rt(n)):(e=351.97690566805693+.114206453784165*(e=a-55)-M 40.25366309332127*Rt(e),t=325.4494125711974+.07943456536662342*(t=a-50)-28.0852963507957*Rt(t),n=255),[e,t,n,1]},jt=Gt,Et=l.unpack,Ot=Math.round,qt=m,Bt=v,It=d,At=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];for(var t,n=Et(r,"rgb"),a=n[0],f=n[2],o=1e3,c=4e4;c-o>.4;){var u=jt(t=.5*(c+o));u[2]/u[0]>=f/a?c=t:o=t}return Ot(t)};Bt.prototype.temp=Bt.prototype.kelvin=Bt.prototype.temperature=function(){return At(this._rgb)},qt.temp=qt.kelvin=qt.temperature=function(){for(var r=[],e=arguments.length;e-M -;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Bt,[null].concat(r,["temp"])))},It.format.temp=It.format.kelvin=It.format.temperature=Gt;var Dt=l.unpack,Ct=Math.cbrt,Yt=Math.pow,St=Math.sign,Lt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=Dt(r,"rgb"),n=t[0],a=t[1],f=t[2],o=[$t(n/255),$t(a/255),$t(f/255)],c=o[0],u=o[1],i=o[2],l=Ct(.4122214708*c+.5363325363*u+.0514459929*i),d=Ct(.2119034982*c+.6806995451*u+.1073969566*i),h=Ct(.0883024619*c+.2817188376*u+.6299787005*i);return[.M 2104542553*l+.793617785*d-.0040720468*h,1.9779984951*l-2.428592205*d+.4505937099*h,.0259040371*l+.7827717662*d-.808675766*h]};function $t(r){var e=Math.abs(r);return e<.04045?r/12.92:(St(r)||1)*Yt((e+.055)/1.055,2.4)}var Tt=l.unpack,Kt=Math.pow,Wt=Math.sign,Xt=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=Tt(r,"lab"))[0],n=r[1],a=r[2],f=Kt(t+.3963377774*n+.2158037573*a,3),o=Kt(t-.1055613458*n-.0638541728*a,3),c=Kt(t-.0894841775*n-1.291485548*a,3);return[255*Zt(4.0767416621*f-3.307711591M 3*o+.2309699292*c),255*Zt(-1.2684380046*f+2.6097574011*o-.3413193965*c),255*Zt(-.0041960863*f-.7034186147*o+1.707614701*c),r.length>3?r[3]:1]};function Zt(r){var e=Math.abs(r);return e>.0031308?(Wt(r)||1)*(1.055*Kt(e,1/2.4)-.055):12.92*r}var Ht=l.unpack,zt=l.type,Ut=m,Vt=v,Jt=d,Qt=Lt;Vt.prototype.oklab=function(){return Qt(this._rgb)},Ut.oklab=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(Vt,[null].concat(r,["oklab"])))},Jt.format.oklab=Xt,Jt.autodetect.pM ush({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=Ht(r,"oklab"),"array"===zt(r)&&3===r.length)return"oklab"}});var rn=l.unpack,en=Lt,tn=Se,nn=l.unpack,an=ze,fn=Xt,on=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=(r=nn(r,"lch"))[0],n=r[1],a=r[2],f=an(t,n,a),o=f[0],c=f[1],u=f[2],i=fn(o,c,u);return[i[0],i[1],i[2],r.length>3?r[3]:1]},cn=l.unpack,un=l.type,ln=m,dn=v,hn=d,bn=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];var t=rn(r,"rgb"),n=tM [0],a=t[1],f=t[2],o=en(n,a,f),c=o[0],u=o[1],i=o[2];return tn(c,u,i)};dn.prototype.oklch=function(){return bn(this._rgb)},ln.oklch=function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];return new(Function.prototype.bind.apply(dn,[null].concat(r,["oklch"])))},hn.format.oklch=on,hn.autodetect.push({p:3,test:function(){for(var r=[],e=arguments.length;e--;)r[e]=arguments[e];if(r=cn(r,"oklch"),"array"===un(r)&&3===r.length)return"oklch"}});var sn=v,pn=l.type;sn.prototype.alpha=function(r,e){return void 0===e&M &(e=!1),void 0!==r&&"number"===pn(r)?e?(this._rgb[3]=r,this):new sn([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]},v.prototype.clipped=function(){return this._rgb._clipped||!1};var gn=v,vn=pe;gn.prototype.darken=function(r){void 0===r&&(r=1);var e=this.lab();return e[0]-=vn.Kn*r,new gn(e,"lab").alpha(this.alpha(),!0)},gn.prototype.brighten=function(r){return void 0===r&&(r=1),this.darken(-r)},gn.prototype.darker=gn.prototype.darken,gn.prototype.brighter=gn.prototype.brighten,v.prototype.get=functioM n(r){var e=r.split("."),t=e[0],n=e[1],a=this[t]();if(n){var f=t.indexOf(n)-("ok"===t.substr(0,2)?2:0);if(f>-1)return a[f];throw new Error("unknown channel "+n+" in mode "+t)}return a};var yn=v,mn=l.type,kn=Math.pow;yn.prototype.luminance=function(r){if(void 0!==r&&"number"===mn(r)){if(0===r)return new yn([0,0,0,this._rgb[3]],"rgb");if(1===r)return new yn([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),t=20,n=function(e,a){var f=e.interpolate(a,.5,"rgb"),o=f.luminance();return Math.abs(r-o)<1e-7||!t--?f:o>rM ?n(e,f):n(f,a)},a=(e>r?n(new yn([0,0,0]),this):n(this,new yn([255,255,255]))).rgb();return new yn(a.concat([this._rgb[3]]))}return wn.apply(void 0,this._rgb.slice(0,3))};var wn=function(r,e,t){return.2126*(r=Mn(r))+.7152*(e=Mn(e))+.0722*(t=Mn(t))},Mn=function(r){return(r/=255)<=.03928?r/12.92:kn((r+.055)/1.055,2.4)},_n={},Nn=v,Fn=l.type,xn=_n,Pn=v,Rn=function(r,e,t){void 0===t&&(t=.5);for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var f=n[0]||"lrgb";if(xn[f]||n.length||(f=Object.keys(xn)[0]),!xn[f])tM hrow new Error("interpolation mode "+f+" is not defined");return"object"!==Fn(r)&&(r=new Nn(r)),"object"!==Fn(e)&&(e=new Nn(e)),xn[f](r,e,t).alpha(r.alpha()+t*(e.alpha()-r.alpha()))};Pn.prototype.mix=Pn.prototype.interpolate=function(r,e){void 0===e&&(e=.5);for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return Rn.apply(void 0,[this,r,e].concat(t))};var Gn=v;Gn.prototype.premultiply=function(r){void 0===r&&(r=!1);var e=this._rgb,t=e[3];return r?(this._rgb=[e[0]*t,e[1]*t,e[2]*t,t],this):new Gn([e[0]*t,M e[1]*t,e[2]*t,t],"rgb")};var jn=v,En=pe;jn.prototype.saturate=function(r){void 0===r&&(r=1);var e=this.lch();return e[1]+=En.Kn*r,e[1]<0&&(e[1]=0),new jn(e,"lch").alpha(this.alpha(),!0)},jn.prototype.desaturate=function(r){return void 0===r&&(r=1),this.saturate(-r)};var On=v,qn=l.type;On.prototype.set=function(r,e,t){void 0===t&&(t=!1);var n=r.split("."),a=n[0],f=n[1],o=this[a]();if(f){var c=a.indexOf(f)-("ok"===a.substr(0,2)?2:0);if(c>-1){if("string"==qn(e))switch(e.charAt(0)){case"+":case"-":o[c]+=+e;break;case"*M ":o[c]*=+e.substr(1);break;case"/":o[c]/=+e.substr(1);break;default:o[c]=+e}else{if("number"!==qn(e))throw new Error("unsupported value for Color.set");o[c]=e}var u=new On(o,a);return t?(this._rgb=u._rgb,this):u}throw new Error("unknown channel "+f+" in mode "+a)}return o};var Bn=v;_n.rgb=function(r,e,t){var n=r._rgb,a=e._rgb;return new Bn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"rgb")};var In=v,An=Math.sqrt,Dn=Math.pow;_n.lrgb=function(r,e,t){var n=r._rgb,a=n[0],f=n[1],o=n[2],c=e._rgb,u=c[0],i=c[1M ],l=c[2];return new In(An(Dn(a,2)*(1-t)+Dn(u,2)*t),An(Dn(f,2)*(1-t)+Dn(i,2)*t),An(Dn(o,2)*(1-t)+Dn(l,2)*t),"rgb")};var Cn=v;_n.lab=function(r,e,t){var n=r.lab(),a=e.lab();return new Cn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"lab")};var Yn=v,Sn=function(r,e,t,n){var a,f,o,c,u,i,l,d,h,b,s,p,g;return"hsl"===n?(o=r.hsl(),c=e.hsl()):"hsv"===n?(o=r.hsv(),c=e.hsv()):"hcg"===n?(o=r.hcg(),c=e.hcg()):"hsi"===n?(o=r.hsi(),c=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",o=r.hcl(),c=e.hcl()):"oklch"===n&&(o=r.oklch()M .reverse(),c=e.oklch().reverse()),"h"!==n.substr(0,1)&&"oklch"!==n||(u=(a=o)[0],l=a[1],h=a[2],i=(f=c)[0],d=f[1],b=f[2]),isNaN(u)||isNaN(i)?isNaN(u)?isNaN(i)?p=Number.NaN:(p=i,1!=h&&0!=h||"hsv"==n||(s=d)):(p=u,1!=b&&0!=b||"hsv"==n||(s=l)):p=u+t*(i>u&&i-u>180?i-(u+360):i<u&&u-i>180?i+360-u:i-u),void 0===s&&(s=l+t*(d-l)),g=h+t*(b-h),new Yn("oklch"===n?[g,s,p]:[p,s,g],n)},Ln=Sn,$n=function(r,e,t){return Ln(r,e,t,"lch")};_n.lch=$n,_n.hcl=$n;var Tn=v;_n.num=function(r,e,t){var n=r.num(),a=e.num();return new Tn(n+t*(a-n),M "num")};var Kn=Sn;_n.hcg=function(r,e,t){return Kn(r,e,t,"hcg")};var Wn=Sn;_n.hsi=function(r,e,t){return Wn(r,e,t,"hsi")};var Xn=Sn;_n.hsl=function(r,e,t){return Xn(r,e,t,"hsl")};var Zn=Sn;_n.hsv=function(r,e,t){return Zn(r,e,t,"hsv")};var Hn=v;_n.oklab=function(r,e,t){var n=r.oklab(),a=e.oklab();return new Hn(n[0]+t*(a[0]-n[0]),n[1]+t*(a[1]-n[1]),n[2]+t*(a[2]-n[2]),"oklab")};var zn=Sn;_n.oklch=function(r,e,t){return zn(r,e,t,"oklch")};Math.pow,Math.sqrt,Math.PI,Math.cos,Math.sin,Math.atan2,Math.pow;var Un=m,Vn=funM ction(r,e,t){if(!Vn[t])throw new Error("unknown blend mode "+t);return Vn[t](r,e)},Jn=function(r){return function(e,t){var n=Un(t).rgb(),a=Un(e).rgb();return Un.rgb(r(n,a))}},Qn=function(r){return function(e,t){var n=[];return n[0]=r(e[0],t[0]),n[1]=r(e[1],t[1]),n[2]=r(e[2],t[2]),n}};Vn.normal=Jn(Qn(function(r){return r})),Vn.multiply=Jn(Qn(function(r,e){return r*e/255})),Vn.screen=Jn(Qn(function(r,e){return 255*(1-(1-r/255)*(1-e/255))})),Vn.overlay=Jn(Qn(function(r,e){return e<128?2*r*e/255:255*(1-2*(1-r/255)*(1-eM /255))})),Vn.darken=Jn(Qn(function(r,e){return r>e?e:r})),Vn.lighten=Jn(Qn(function(r,e){return r>e?r:e})),Vn.dodge=Jn(Qn(function(r,e){return 255===r?255:(r=e/255*255/(1-r/255))>255?255:r})),Vn.burn=Jn(Qn(function(r,e){return 255*(1-(1-e/255)/(r/255))}));Math.pow,Math.sin,Math.cos,Math.floor,Math.random,Math.log,Math.pow,Math.floor,Math.abs,Math.sqrt,Math.pow,Math.min,Math.max,Math.atan2,Math.abs,Math.cos,Math.sin,Math.exp,Math.PI;for(var ra={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d730M 1f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:M ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeM b","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6M ","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43",&q