const init=async()=>{const n=await fetch(`${serverUrl}/content/a93d6c06677fba8ad8b41edc8b1be3cb5de8be41e76588d267e604a4eb52888fi0`),e=document.createElement("script");e.innerHTML=await n.text(),document.body.appendChild(e);const t=window.innerWidth,i=window.innerHeight;document.body.style="margin: 8px;overflow: hidden; background-color: #000000; color: white;font-family: system-ui;";const l=10,o=10,r=Math.floor((t-o)/(l+o)),d=Math.floor((i-o)/(l+o)),c=new Array(r*d),a=[],f=d3.select("body").append("canvas").attr("width",t).attr("height",i).node().getContext("2d");f.translate(Math.round((t-r*l-(r+2.5)*o)/2),Math.round((i-d*l-(d+3)*o)/2)),f.fillStyle="#f99620";const u=d/2*r+r+4;function h(){if(null==(n=function(n){if(n.length){var e,t=n.length,i=Math.random()*t|0;return e=n[i],n[i]=n[t-1],n[t-1]=e,n.pop()}}(a)))return!0;var n,e,t,i,l=n.index,o=n.direction,u=l+(1===o?-r:2===o?r:4===o?-1:1),h=l%r,y=l/r|0,m=null==c[u];f.fillStyle=m?"#f99620":"black",1===o?(b(u),e=h,t=y-1,i=2):2===o?(b(l),e=h,t=y+1,i=1):4===o?(p(u),e=h-1,t=y,i=8):(p(l),e=h+1,t=y,i=4),m&&(s(u),c[l]|=o,c[u]|=i,f.fillStyle="#cf2890",t>0&&null==c[u-r]&&(b(u-r),a.push({index:u,direction:1})),t<d-1&&null==c[u+r]&&(b(u),a.push({index:u,direction:2})),e>0&&null==c[u-1]&&(p(u-1),a.push({index:u,direction:4})),e<r-1&&null==c[u+1]&&(p(u),a.push({index:u,direction:8})))}function s(n){var e=n%r,t=n/r|0;f.fillRect(e*l+(e+1)*o,t*l+(t+1)*o,l,l)}function p(n){var e=n%r,t=n/r|0;f.fillRect((e+1)*(l+o),t*l+(t+1)*o,o,l)}function b(n){var e=n%r,t=n/r|0;f.fillRect(e*l+(e+1)*o,(t+1)*(l+o),l,o)}s(u),a.push({index:u,direction:1}),a.push({index:u,direction:8}),d3.timer((function(){for(var n,e=0;++e<3&&!(n=h()););return n})),d3.select(self.frameElement).style("height",i+"px")};