403Webshell
Server IP : 217.154.3.148  /  Your IP : 216.73.216.90
Web Server : Apache
System : Linux blissful-wright.217-154-3-148.plesk.page 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64
User : gracious-boyd_hfhh1h8vo9n ( 10000)
PHP Version : 8.3.31
Disable Function : opcache_get_status
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/nextjs/.next/server/chunks/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/nextjs/.next/server/chunks/7.js
"use strict";exports.id=7,exports.ids=[7],exports.modules={17890:(a,b,c)=>{c.d(b,{d:()=>z});var d=c(60202),e=c.n(d);function f(a,b,c){return Math.max(b,Math.min(c,a))}function g(a){return a<=1?2:1<<Math.ceil(Math.log2(a))}function h(a,b,c=0,d=b.length){for(let e=0;e<d;e++){let f=b[c+e]??0,g=.5*(1-Math.cos(2*Math.PI*e/Math.max(1,d-1)));a[e]=f*g}for(let b=d;b<a.length;b++)a[b]=0}function i(a){let b,c=0|a.length;if(!((b=c)>1&&(b&b-1)==0)){let b=g(Math.max(2,c)),d=new Float64Array(b);d.set(a.subarray(0,Math.min(b,c))),a=d,c=b}let d=new(e())(c),f=d.createComplexArray();d.realTransform(f,a),d.completeSpectrum(f);let h=new Float64Array(c/2+1);for(let a=0;a<=c/2;a++){let b=f[2*a]||0,c=f[2*a+1]||0;h[a]=Math.hypot(b,c)}return h}function j(a,b){let c=Math.max(2,Math.round(b)),d=0,e=-1/0;for(let g=0;g<c;g++){let c=function(a,b,c){let d=a.length,e=Math.max(2,Math.round(b)),g=0,h=0;for(let b=c;b<d;b+=e){let c=Math.round(b),e=f(c-1,0,d-1),i=f(c+1,0,d-1);g+=Math.max(a[e],a[c],a[i]),h++}return h?g/h:0}(a,b,g);c>e&&(e=c,d=g)}return d}function k(a,b,c,d=8){let e=a.length,g=Math.max(2,Math.round(b)),h=[];for(let b=0;b<d;b++){let d=c+b*g;if(d>=e)break;h.push(function(a,b){let c=a.length,d=f(Math.round(b),0,c-1),e=a[d];if(!(e>0))return 1;let g=e/2,h=d,i=d;for(;h>0&&a[h]>g;)h--;for(;i<c-1&&a[i]>g;)i++;return Math.max(1,i-h)}(a,d))}return h.length?(h.sort((a,b)=>a-b),f(Math.round(h[Math.floor(h.length/2)]),1,Math.round(b/2))):Math.max(1,Math.round(.04*b))}function l(a,b=8,c=1024){let{mags:d,nFFT:e}=function(a,b=4,c=.5){let d=a.length,e=g(Math.max(16,Math.floor(d/Math.max(1,b)))),f=Math.max(1,Math.floor(e*(1-c))),j=Math.max(1,Math.floor((d-e)/f)+1),k=new Float64Array(e/2+1),l=new Float64Array(e),m=0;for(let b=0;b<j;b++){let c=b*f;if(c+e>d)break;h(l,a,c,e);let g=i(l);for(let a=0;a<g.length;a++)k[a]+=g[a];m++}if(0===m){let b=g(d),c=new Float64Array(b);return h(c,a,0,d),{mags:i(c),nFFT:b}}for(let a=0;a<k.length;a++)k[a]/=m;return{mags:k,nFFT:e}}(a,4,.5),j=Math.max(1,Math.floor(e/(c||1024))),k=Math.min(Math.floor(e/2)-1,Math.ceil(e/Math.max(b,2)));if(!(k>j))return{ok:!1,reason:"no valid k-range",P:NaN,k:NaN};let m=j,n=-1/0;for(let a=j;a<=k;a++){let b=d[a];b>n&&(n=b,m=a)}if(!(n>0))return{ok:!1,reason:"no peak",P:NaN,k:NaN};let o=function(a,b){let c=a[b-1]??0,d=a[b]??0,e=a[b+1]??0,g=c-2*d+e;return 0===g?0:f(.5*(c-e)/g,-.5,.5)}(d,f(m,j+1,k-1)),p=m+o;return{ok:!0,P:e/p,k:p}}let m=a=>a*Math.PI/180,n=(a,b,c)=>Math.max(b,Math.min(c,a)),o=a=>{if(0===a.length)return NaN;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2?b[c]:(b[c-1]+b[c])/2};function p(a,b=5){if(b<=1)return Float64Array.from(a);let c=a.length,d=new Float64Array(c),e=Math.floor(b/2);for(let b=0;b<c;b++){let f=0,g=0;for(let d=-e;d<=e;d++){let e=b+d;!(e<0)&&!(e>=c)&&(f+=a[e],g++)}d[b]=g?f/g:a[b]}return d}function q(a,b,c,d,e,f=1){let g=Math.hypot(b,c),h=[];for(let a=d;a<=e;a+=f)h.push(m(a));let i=new Float64Array(h.length);for(let[b,c,d]of a)for(let a=0;a<h.length;a++){let e=h[a],f=Math.round(b*Math.cos(e)+c*Math.sin(e)+g);f>=0&&f<=Math.ceil(2*g)&&(i[a]+=d)}let j=p(i,5),k=0,l=-1/0;for(let a=0;a<j.length;a++)j[a]>l&&(l=j[a],k=a);return h[k]??m((d+e)/2)}function r(a,b,c,d){let e=Math.hypot(c,d),f=new Float64Array(Math.ceil(2*e)+1);for(let[c,d,g]of a){let a=Math.round(c*Math.cos(b)+d*Math.sin(b)+e);a>=0&&a<f.length&&(f[a]+=g)}return{bins:p(f,7),offset:e}}function s(a,b=8,c=.1){let d=(a.length?Math.max(...a):0)*c,e=[];for(let b=1;b<a.length-1;b++)a[b]>d&&a[b]>a[b-1]&&a[b]>a[b+1]&&e.push(b);let f=[];for(let c of(e.sort((b,c)=>a[c]-a[b]),e))f.every(a=>Math.abs(a-c)>=b)&&f.push(c);return f.sort((a,b)=>a-b),f}function t(a){if(a.length<2)return NaN;let b=[];for(let c=1;c<a.length;c++){let d=a[c]-a[c-1];d>2&&b.push(d)}if(!b.length)return NaN;let c=Math.max(...b),d=Math.min(...b),e=Array(c+1).fill(0);b.forEach(a=>e[a]++);let f=0,g=-1;for(let a=d;a<=c;a++)e[a]>g&&(g=e[a],f=a);let h=b.filter(a=>2>=Math.abs(a-f));return o(h.length?h:[f])}function u(a,b){return!Number.isFinite(b)||b<=0?0:Math.round(o(a.map(a=>(a%b+b)%b))||0)}function v(a,b,c,d=8){let e=a.length,f=Math.max(2,Math.round(b)),g=[];for(let b=0;b<d;b++){let d=c+b*f;if(d>=e)break;g.push(function(a,b){let c=a.length,d=n(Math.round(b),0,c-1),e=a[d];if(!(e>0))return 1;let f=e/2,g=d,h=d;for(;g>0&&a[g]>f;)g--;for(;h<c-1&&a[h]>f;)h++;return Math.max(1,h-g)}(a,d))}return g.length?n(Math.round(o(g)),1,Math.round(b/2)):Math.max(1,Math.round(.04*b))}let w=(a,b,c)=>Math.max(b,Math.min(c,a)),x=a=>{if(!a.length)return 0;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2?b[c]:(b[c-1]+b[c])/2};function y(a,b,c,d,e,f){let g=new Float64Array(e),h=new Float64Array(f);for(let a=1;a<f-1;a++){let b=a*e;for(let f=1;f<e-1;f++){let e=b+f;g[f]+=Math.abs(c[e]),h[a]+=Math.abs(d[e])}}let i=Array.from(g),j=Array.from(h),k=x(i.filter(Number.isFinite)),l=x(j.filter(Number.isFinite)),m=(a,b)=>{if(!a?.length)return 0;let c=[];for(let d of a){let a=w(Math.round(d),0,b.length-1),e=b[a-1]??b[a],f=b[a],g=b[a+1]??b[a];c.push((e+2*f+g)/4)}return x(c)},n=m(a,g),o=m(b,h),p=a=>w((a-1)/3,0,1);return w(.5*(p(n>0&&k>0?n/k:0)+p(o>0&&l>0?o/l:0)),0,1)}function z(a,b,c,d){if(!Number.isFinite(b)||!Number.isFinite(c)||b<8||c<8)return{ok:!1,error:"invalid image size"};let{gx:e,gy:f}=function(a,b,c,d){let e=new Float32Array(b*c),f=new Float32Array(b*c);for(let g=1;g<c-1;g++)for(let c=1;c<b-1;c++){let h=g*b+c,i=a[(g-1)*b+(c-1)],j=a[(g-1)*b+c],k=a[(g-1)*b+(c+1)],l=a[g*b+(c-1)],m=a[g*b+(c+1)],n=a[(g+1)*b+(c-1)],o=a[(g+1)*b+c],p=a[(g+1)*b+(c+1)],q=d?d[h]??1:1;e[h]=(-i-2*l-n+k+2*m+p)*q,f[h]=(i+2*j+k-n-2*o-p)*q}return{gx:e,gy:f}}(a,b,c,d?.weights??null),g=function(a,b,c,d){try{if(!Number.isFinite(b)||!Number.isFinite(c)||b<8||c<8)return{ok:!1,reason:"image too small/invalid"};let{projX:e,projY:f}=function(a,b,c,d){let e=new Float32Array(b),f=new Float32Array(c);for(let g=1;g<c-1;g++){let c=g*b;for(let h=1;h<b-1;h++){let i=c+h,j=d?d[i]??1:1,k=(a[i+1]-a[i-1])*j,l=(a[i+b]-a[i-b])*j;e[h]+=Math.abs(k),f[g]+=Math.abs(l)}}let g=a=>{let b=a.length;if(b<3)return a.slice();let c=new Float32Array(b);c[0]=(2*a[0]+a[1])/3;for(let d=1;d<b-1;d++)c[d]=(a[d-1]+2*a[d]+a[d+1])/4;return c[b-1]=(a[b-2]+2*a[b-1])/3,c};return{projX:g(e),projY:g(f)}}(a,b,c,d?.weights??null),g=Math.max(32,Math.floor(Math.max(b,c)/2)),h=l(e,8,g),i=l(f,8,g);if(!h.ok||!i.ok)return{ok:!1,reason:`welch fail x:${h.ok?"ok":h.reason} y:${i.ok?"ok":i.reason}`};let m=j(e,h.P),n=j(f,i.P),o=k(e,h.P,m),p=k(f,i.P,n),q=Math.max(1,Math.round((o+p)/2)),r=Math.max(2,Math.round(h.P)),s=Math.max(2,Math.round(i.P)),t=[];for(let a=m;a<b;a+=r)t.push(Math.round(a));let u=[];for(let a=n;a<c;a+=s)u.push(Math.round(a));return{ok:!0,periodX:h.P,periodY:i.P,phaseX:m,phaseY:n,groutPx:q,vlines:t,hlines:u}}catch(a){return{ok:!1,reason:a?.message||String(a)}}}(a,b,c,{debug:d?.debug,weights:d?.weights??void 0}),h=null;if(g.ok){let a=g.groutPx??g.grout??1,d=Math.max(1,Math.round(g.periodX-a)),i=Math.max(1,Math.round(g.periodY-a)),j=y(g.vlines,g.hlines,e,f,b,c);h={ok:!0,tile_w_px:d,tile_h_px:i,grout_px:Math.max(1,Math.round(a)),vlines:g.vlines,hlines:g.hlines,source:"cv@fft-welch",periodX:g.periodX,periodY:g.periodY,phaseX:g.phaseX,phaseY:g.phaseY,confidence:j,thetaV:0,thetaH:Math.PI/2}}let i=!h||h.confidence<.35,m=null;if(i){let g=function(a,b,c,d){if(!Number.isFinite(b)||!Number.isFinite(c)||b<16||c<16)return{ok:!1,reason:"image too small/invalid"};let{gx:e,gy:f,mag:g}=function(a,b,c,d){let e=new Float32Array(b*c),f=new Float32Array(b*c),g=new Float32Array(b*c);for(let h=1;h<c-1;h++)for(let c=1;c<b-1;c++){let i=h*b+c,j=a[(h-1)*b+(c-1)],k=a[(h-1)*b+c],l=a[(h-1)*b+(c+1)],m=a[h*b+(c-1)],n=a[h*b+(c+1)],o=a[(h+1)*b+(c-1)],p=a[(h+1)*b+c],q=a[(h+1)*b+(c+1)],r=d?d[i]??1:1,s=(-j-2*m-o+l+2*n+q)*r,t=(j+2*k+l-o-2*p-q)*r;e[i]=s,f[i]=t,g[i]=Math.hypot(s,t)}return{gx:e,gy:f,mag:g}}(a,b,c,d?.weights??null),h=function(a,b){let c=a.length,d=Math.max(1,Math.floor(c/5e4)),e=[];for(let b=0;b<c;b+=d){let c=a[b];Number.isFinite(c)&&e.push(c)}if(e.sort((a,b)=>a-b),0===e.length)return 0;let f=n(.85,0,1)*(e.length-1),g=Math.floor(f),h=Math.ceil(f);if(g===h)return e[g];let i=f-g;return e[g]*(1-i)+e[h]*i}(g,0),i=[],j=Math.max(1,Math.floor(Math.max(b,c)/800));for(let a=1;a<c-1;a+=j)for(let c=1;c<b-1;c+=j){let d=g[a*b+c];d>h&&i.push([c,a,d])}if(i.length<200)return{ok:!1,reason:"too few edges"};let k=q(i,b,c,-15,15,1),l=q(i,b,c,75,105,1),{bins:m,offset:o}=r(i,k,b,c),{bins:p,offset:w}=r(i,l,b,c),x=s(m,8,.15),y=s(p,8,.15);if(x.length<2||y.length<2)return{ok:!1,reason:"no grid families"};let z=t(x),A=t(y);if(!Number.isFinite(z)||z<=2||!Number.isFinite(A)||A<=2)return{ok:!1,reason:"no robust period"};let B=u(x,z),C=u(y,A),D=[];for(let a=B;a<b;a+=Math.round(z))D.push(Math.round(a));if(!D.length){for(let a of x){let c=Math.round((a-o)/Math.cos(k));c>=0&&c<b&&D.push(c)}D.sort((a,b)=>a-b)}let E=[];for(let a=C;a<c;a+=Math.round(A))E.push(Math.round(a));if(!E.length){for(let a of y){let b=Math.round((a-w)/Math.sin(l));b>=0&&b<c&&E.push(b)}E.sort((a,b)=>a-b)}let{projX:F,projY:G}=function(a,b,c,d){let e=new Float32Array(c),f=new Float32Array(d);for(let g=1;g<d-1;g++){let d=g*c;for(let h=1;h<c-1;h++){let c=d+h;e[h]+=Math.abs(a[c]),f[g]+=Math.abs(b[c])}}let g=a=>{let b=new Float32Array(a.length);for(let c=0;c<a.length;c++){let d=a[c-1]??a[c],e=a[c],f=a[c+1]??a[c];b[c]=(d+2*e+f)/4}return b};return{projX:g(e),projY:g(f)}}(e,f,b,c),H=Math.max(1,Math.round((v(F,z,B)+v(G,A,C))/2));return{ok:!0,periodX:z,periodY:A,phaseX:B,phaseY:C,groutPx:H,thetaV:k,thetaH:l,vlines:D,hlines:E}}(a,b,c,{debug:d?.debug,weights:d?.weights??void 0});if(g.ok){let a=Math.max(1,Math.round(g.groutPx)),d=Math.max(1,Math.round(g.periodX-a)),h=Math.max(1,Math.round(g.periodY-a)),i=y(g.vlines,g.hlines,e,f,b,c);m={ok:!0,tile_w_px:d,tile_h_px:h,grout_px:a,vlines:g.vlines,hlines:g.hlines,source:"cv@hough-grid",periodX:g.periodX,periodY:g.periodY,phaseX:g.phaseX,phaseY:g.phaseY,confidence:i,thetaV:g.thetaV,thetaH:g.thetaH}}}if(h&&m)return h.confidence>=m.confidence?h:m;if(h)return h;if(m)return m;let o=g?.reason||"fft-fail";return{ok:!1,error:`${o}; hough-fail`}}},22171:(a,b,c)=>{c.d(b,{E:()=>j});var d=c(73024),e=c.n(d),f=c(76760);let g=c.n(f)().resolve(process.cwd(),"models","occluder","params.json"),h={baseline:{params:{maskGrowPx:8,maskPreBlur:1,maskThresh:.4,maskFinalBlur:2,occluderShrinkPx:2,occluderEdgeTrimPx:4,occluderLeakGuardPx:2,tileFeatherPx:0,occluderFeatherPx:1},occluderEnv:{OCCLUDER_SAM_MAX_LEAK:.2,OCCLUDER_SAM_LEAK_WEIGHT:1.5,OCCLUDER_SAM_BAND_RADIUS:8,OCCLUDER_SAM_NEG_ERODE:1,OCCLUDER_SAM_POS_BAND_ONLY:1,OCCLUDER_SAM_MIN_OVERLAP:.05,OCCLUDER_SAM_NEG_Q:.6,OCCLUDER_SAM_POS_GRAD_Q:.85,OCCLUDER_SAM_MIN_OUTSIDE:.005,OCCLUDER_SAM_BOX_MARGIN:40,OCCLUDER_SAM_MAX_TILE_RATIO:.9,OCCLUDER_SAM_TOP_K:1,OCCLUDER_SAM_EDGE_WEIGHT:.25,OCCLUDER_SAM_EDGE_RADIUS:1,OCCLUDER_SAM_PATCH_FNS:0}},tuned:{params:{maskGrowPx:8,maskPreBlur:1,maskThresh:.4,maskFinalBlur:2,occluderShrinkPx:2,occluderEdgeTrimPx:4,occluderLeakGuardPx:2,tileFeatherPx:0,occluderFeatherPx:1},occluderEnv:{OCCLUDER_SAM_MAX_LEAK:.2,OCCLUDER_SAM_LEAK_WEIGHT:1.5,OCCLUDER_SAM_BAND_RADIUS:8,OCCLUDER_SAM_NEG_ERODE:1,OCCLUDER_SAM_POS_BAND_ONLY:1,OCCLUDER_SAM_MIN_OVERLAP:.05,OCCLUDER_SAM_NEG_Q:.6,OCCLUDER_SAM_POS_GRAD_Q:.85,OCCLUDER_SAM_MIN_OUTSIDE:.005,OCCLUDER_SAM_BOX_MARGIN:40,OCCLUDER_SAM_MAX_TILE_RATIO:.9,OCCLUDER_SAM_TOP_K:1,OCCLUDER_SAM_EDGE_WEIGHT:.25,OCCLUDER_SAM_EDGE_RADIUS:1,OCCLUDER_SAM_PATCH_FNS:1}}},i=null;function j(a){let b=a?.toLowerCase()==="tuned"?"tuned":"baseline",c=function(){if(i)return i;try{let a=e().readFileSync(g,"utf8"),b=JSON.parse(a);i={baseline:b.baseline??h.baseline,tuned:b.tuned??h.tuned}}catch{i=h}return i}();return c[b]??c.baseline}},32007:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{POST:()=>ak,runtime:()=>al});var e=c(10641),f=c(9288),g=c.n(f),h=c(76760),i=c.n(h),j=c(77598),k=c.n(j),l=c(51455),m=c.n(l),n=c(31421),o=c(17890),p=c(42158),q=c(83061),r=c(94437),s=c(22171),t=c(64933),u=c(57742),v=c(44701),w=c(62147),x=c(67835),y=c(93600),z=a([q]);q=(z.then?(await z)():z)[0];let al="nodejs",am=new Set(["OCCLUDER_METHOD","OCCLUDER_SAM_MAX_LEAK","OCCLUDER_SAM_LEAK_WEIGHT","OCCLUDER_SAM_BAND_RADIUS","OCCLUDER_SAM_NEG_ERODE","OCCLUDER_SAM_NEG_Q","OCCLUDER_SAM_POS_GRAD_Q","OCCLUDER_SAM_POS_BAND_ONLY","OCCLUDER_SAM_MIN_OVERLAP","OCCLUDER_SAM_MIN_OUTSIDE","OCCLUDER_SAM_BOX_MARGIN","OCCLUDER_SAM_MAX_TILE_RATIO","OCCLUDER_SAM_TOP_K","OCCLUDER_SAM_EDGE_WEIGHT","OCCLUDER_SAM_EDGE_RADIUS","OCCLUDER_SAM_DEPTH_CLIP","OCCLUDER_SAM_DEPTH_CLIP_DILATE","OCCLUDER_SAM_DEPTH_CLIP_MIN_FRAC","OCCLUDER_SAM_DEPTH_CLIP_MIN_COVERAGE","OCCLUDER_SAM_PATCH_FNS","OCCLUDER_SAM_PATCH_PY","OCCLUDER_SAM_PATCH_MODEL","OCCLUDER_SAM_PATCH_BOXES","OCCLUDER_SAM_PATCH_MARGIN","OCCLUDER_SAM_PATCH_DEVICE","OCCLUDER_SAM_PATCH_TIMEOUT_MS","OCCLUDER_SAM_PATCH_TILE_BAND_ONLY","OCCLUDER_SAM_PATCH_TILE_BAND_PAD","OCCLUDER_SAM_PATCH_TILE_DILATE","OCCLUDER_SAM_PATCH_MIN_FN_COVERAGE","OCCLUDER_SAM_PATCH_REQUIRE_TILE","OCCLUDER_SAM_PATCH_MIN_COMP","OCCLUDER_SAM_PATCH_MAX_COMP","OCCLUDER_SAM_PATCH_MAX_COMP_FRAC","OCCLUDER_SAM_PATCH_USE_BACK","OCCLUDER_SAM_PATCH_UNION_BACK","OCCLUDER_SAM_PATCH_GROW","OCCLUDER_SAM_PATCH_MAX_COVERAGE","OCCLUDER_SAM_PATCH_MAX_ADD_FRAC","OCCLUDER_SAM_PATCH_MAX_ADD_PIXELS","OCCLUDER_SAM_PATCH_MAX_ADD_PIXELS_7XM","OCCLUDER_SAM_PATCH_ADJ_PX","OCCLUDER_FN_ASSIST_UNION","OCCLUDER_FN_ASSIST_WITHOUT_SAM","OCCLUDER_FN_ASSIST_MIN_COMP","OCCLUDER_FN_ASSIST_MAX_COMP","OCCLUDER_FN_ASSIST_ADJ_PX","OCCLUDER_FN_ASSIST_TILE_ONLY","OCCLUDER_DISTILL_MIN_COVERAGE","OCCLUDER_DISTILL_MAX_COVERAGE","OCCLUDER_DISTILL_MAX_TRANS_DENSITY","OCCLUDER_DISTILL_MAX_TILE_LEAK","OCCLUDER_DISTILL_BOTTOM_STRIP_FRAC","OCCLUDER_DISTILL_MIN_COMP_FRAC","OCCLUDER_DISTILL_BIG_COMP_FRAC","OCCLUDER_DISTILL_MIN_PROXY","OCCLUDER_PATCH_REFINE","OCCLUDER_PATCH_TOP_N","OCCLUDER_PATCH_MODEL","OCCLUDER_PATCH_DEVICE","OCCLUDER_PIPELINE_FALLBACK_MODE"]);function A(a){let b=Number(a??"");return!Number.isFinite(b)||b<=0?null:Math.max(1,Math.floor(b))}function B(a,b,c=1e3,d=6e5){let e=Number(process.env[a]??"");return!Number.isFinite(e)||e<=0?b:Math.max(c,Math.min(d,Math.round(e)))}async function C(a,b,c){return b>0?await new Promise((d,e)=>{let f=setTimeout(()=>{e(Error(`${c} timed out after ${b}ms`))},b);a.then(a=>{clearTimeout(f),d(a)},a=>{clearTimeout(f),e(a)})}):a}function D(a,b,c){return Math.max(b,Math.min(c,a))}function E(a){let b=a.length,c=new Float32Array(b),d=a.reduce((a,b)=>a+b,0)/b;for(let c=0;c<b;c++)a[c]=a[c]-d;for(let d=1;d<b;d++){let e=0;for(let c=0;c+d<b;c++)e+=a[c]*a[c+d];c[d]=e}return c[0]=0,c}function F(a,b,c,d,e){let f=new Uint8Array(a);for(let a=0;a<c;a++)a>=d&&a<e||f.fill(0,a*b,(a+1)*b);return f}function G(a,b,c,d,e){if(c<=0)return null;let f=Math.max(0,Math.min(c,Math.floor(a))),g=Math.max(0,Math.min(c,Math.floor(b)));if(g<=f)return null;let h=!1,i=g-f;if(i<d){let a=Math.round((f+g)/2);f=Math.max(0,Math.min(c-d,a-Math.floor(d/2))),g=Math.min(c,f+d),h=!0,i=g-f}if(i>e){let a=Math.round((f+g)/2);f=Math.max(0,Math.min(c-e,a-Math.floor(e/2))),g=Math.min(c,f+e),h=!0}return{yMin:f,yMax:g,adjusted:h}}function H(a,b,c){if(!(b>0&&c>0)||a.length!==b*c)return null;let d=-1,e=-1;for(let f=0;f<c;f++){let c=f*b,g=!1;for(let d=0;d<b;d++)if(a[c+d]){g=!0;break}g&&(d<0&&(d=f),e=f)}return d<0||e<d?null:{yMin:d,yMax:e+1}}function I(a,b,c){if(b<=0||c<=0||a.length!==b*c)return{mask:a,applied:!1,band:null};let d=new Float32Array(c);for(let e=0;e<c;e++){let c=e*b,f=0;for(let d=0;d<b;d++)a[c+d]&&(f+=1);d[e]=f/Math.max(1,b)}let e=Array.from(d).sort((a,b)=>a-b),f=e[Math.floor(.8*e.length)]??0,g=e[Math.floor(.6*e.length)]??0,h=e[Math.floor(.5*e.length)]??0,i=Number(process.env.OCCLUDER_SAM_BAND_MIN_FRAC??"0.12"),j=Math.max(.02,Math.min(.6,Math.max(i,.5*f))),k=Math.max(.01,Math.min(j,Math.max(.35*g,.45*h))),l=Math.max(.005,Math.min(k,.25*f)),m=[j,k,l].filter((a,b,c)=>a>0&&c.indexOf(a)===b),n=-1,o=-1,p=j,q=a=>{let b=-1,e=-1,f=-1;for(let g=0;g<c;g++){let c=d[g]>=a;if(c&&b<0&&(b=g),!c&&b>=0){let a=g-1;a-b>f-e&&(e=b,f=a),b=-1}}if(b>=0){let a=c-1;a-b>f-e&&(e=b,f=a)}return e<0||f<e?null:{start:e,end:f}};for(let a of m){let b=q(a);if(b){n=b.start,o=b.end,p=a;break}}let r=Number(process.env.OCCLUDER_SAM_BAND_MIN_HEIGHT_FRAC??"0.04"),s=Math.max(4,Math.round(c*r)),t=Number(process.env.OCCLUDER_SAM_BAND_MAX_HEIGHT_FRAC??"0.6"),u=Math.max(s,Math.round(c*t)),v=!1;if(n>=0&&o>=n&&o-n+1<s){let a=Math.round((n+o)/2),b=Math.floor(s/2);n=Math.max(0,Math.min(c-s,a-b)),o=Math.min(c-1,n+s-1),v=!0}if(n<0||o<n){let b=Number(process.env.OCCLUDER_SAM_BAND_MIN_OVERALL??"0.01");if(R(a)>=b){let a=0,b=0;for(let e=0;e<c;e++){let c=d[e];c<=0||(a+=c,b+=c*e)}let e=a>0?Math.round(b/a):Math.floor(c/2),f=D(Number(process.env.OCCLUDER_SAM_BAND_TARGET_HEIGHT_FRAC??"0.25"),r,t),g=Math.round(c*f),h=Math.max(s,Math.min(u,g));n=Math.max(0,Math.min(c-h,e-Math.floor(h/2))),o=Math.min(c-1,n+h-1),v=!0,p=l}}if(n<0||o<n)return{mask:a,applied:!1,band:null};let w=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_BAND_EXPAND??"6"))),x=Math.max(0,n-w),y=Math.min(c-1,o+w);if(y-x+1>u){let a=Math.round((x+y)/2);x=Math.max(0,Math.min(c-u,a-Math.floor(u/2))),y=Math.min(c-1,x+u-1),v=!0}let z=new Uint8Array(a);for(let a=0;a<c;a++)a>=x&&a<=y||z.fill(0,a*b,(a+1)*b);return{mask:z,applied:!0,band:{yMin:x,yMax:y+1,threshold:Number(p.toFixed(3)),p80:Number(f.toFixed(3)),fallback:v}}}function J(a,b,c){b=Math.max(3,0|b),c=Math.max(b+1,0|c);let d=0,e=-1/0;for(let f=b;f<=c&&f<a.length;f++){let b=a[f];b>e&&(e=b,d=f)}return d}function K(a,b){if(b<=0)return 0;let c=0,d=-1/0;for(let e=0;e<b;e++){let f=0;for(let c=e;c<a.length;c+=b)f+=a[c];f>d&&(d=f,c=e)}return c}function L(a,b){if(!b)return!1;for(let c of a.pixels)if(b[c])return!0;return!1}function M(a,b){if(!b||a.area<=0)return 0;let c=0;for(let d of a.pixels)b[d]&&(c+=1);return c/a.area}function N(a){return a.maxX-a.minX+1}function O(a){return a.maxY-a.minY+1}function P(a){let b=N(a),c=O(a);return b/Math.max(1,c)}function Q(a,b){if(a.area<=0||b<=0)return 0;let c=0,d=0;for(let e of a.pixels){let a=Math.floor(e/b);c+=a,d+=a*a}let e=c/a.area,f=Math.max(0,d/a.area-e*e),g=Math.max(1,O(a)),h=f/(g*g);return Number.isFinite(h)?h:0}function R(a){if(!a||!a.length)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]&&(b+=1);return b/a.length}function S(a,b){if(!a||!b)return 0;let c=Math.min(a.length,b.length),d=0,e=0;for(let f=0;f<c;f++)b[f]&&(d+=1,a[f]&&(e+=1));return d>0?e/d:0}function T(a,b,c){let d=Buffer.from(`${b}x${c}\0`,"utf8"),e=k().createHash("sha1");return e.update(d),e.update(Buffer.from(a)),e.digest("hex")}function U(a,b,c){if(!(b>1&&c>0)||a.length<b*c)return 0;let d=0;for(let e=0;e<c;e++){let c=e*b,f=a[c]>127;for(let e=1;e<b;e++){let b=a[c+e]>127;b!==f&&(d+=1),f=b}}return d/c}function V(a,b,c){if(!(b>0&&c>1)||a.length<b*c)return 0;let d=0;for(let e=0;e<b;e++){let f=a[e]>127;for(let g=1;g<c;g++){let c=a[g*b+e]>127;c!==f&&(d+=1),f=c}}return d/b}function W(a,b,c){let d=U(a,b,c),e=V(a,b,c),f=Math.max(180,Math.round(.12*b)),g=Math.max(180,Math.round(.12*c));return d>f&&e>g}async function X(a,b,c,d,e=8){let f=Math.max(0,Math.round(d));if(!f)return Uint8Array.from(a);let h=Math.max(1,Math.min(254,Math.round(e))),i=await g()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).blur(f).threshold(h).raw().toBuffer();return new Uint8Array(i)}function Y(a,b,c,d=1){if(d<=0)return Uint8Array.from(a);let e=new Uint8Array(a.length),f=Math.max(1,Math.floor(d));for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=255;for(let e=-f;e<=f&&h;e++){let i=d+e;if(i<0||i>=c){h=0;break}let j=i*b;for(let c=-f;c<=f;c++){let d=g+c;if(d<0||d>=b||0===a[j+d]){h=0;break}}}e[d*b+g]=255*!!h}return e}function Z(a,b,c,d=1){if(d<=0)return Uint8Array.from(a);let e=new Uint8Array(a.length),f=Math.max(1,Math.floor(d));for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=0;for(let e=-f;e<=f&&!h;e++){let i=d+e;if(i<0||i>=c)continue;let j=i*b;for(let c=-f;c<=f;c++){let d=g+c;if(!(d<0)&&!(d>=b)&&a[j+d]){h=255;break}}}e[d*b+g]=h}return e}async function $(a,b,c){if(a.width===b&&a.height===c)return a;let d=await g()(Buffer.from(a.data),{raw:{width:a.width,height:a.height,channels:1}}).resize(b,c,{kernel:"lanczos3"}).toColorspace("b-w").raw().toBuffer();return{data:new Uint8Array(d),width:b,height:c}}function _(a,b){let c=Uint8Array.from(a.data),d=Math.min(c.length,b.data.length);for(let a=0;a<d;a++)b.data[a]&&(c[a]=255);return{data:c,width:a.width,height:a.height}}function aa(a){let b={0:0,1:0,2:0,255:0};for(let c=0;c<a.length;c++){let d=a[c];0===d?b["0"]+=1:1===d?b["1"]+=1:2===d?b["2"]+=1:255===d&&(b["255"]+=1)}return b}function ab(a,b,c,d,e){let f=a*b,g=new Uint8Array(f),h=new Uint8Array(f);if(!a||!b||!c.length&&!d.length||e<=0)return g.fill(255),{interiorMask:g,lineMask:h};let i=Math.max(1,Math.round(e)),j=new Uint8Array(a),k=new Uint8Array(b);for(let b of c){let c=Math.max(0,Math.min(a-1,Math.round(b))),d=Math.max(0,c-i),e=Math.min(a-1,c+i);for(let a=d;a<=e;a++)j[a]=1}for(let a of d){let c=Math.max(0,Math.min(b-1,Math.round(a))),d=Math.max(0,c-i),e=Math.min(b-1,c+i);for(let a=d;a<=e;a++)k[a]=1}g.fill(255);for(let c=0;c<b;c++){let b=c*a,d=1===k[c];for(let c=0;c<a;c++)(d||1===j[c])&&(g[b+c]=0,h[b+c]=255)}return{interiorMask:g,lineMask:h}}function ac(a,b){let c=0,d=0;for(let e=0;e<Math.min(a.length,b.length);e++)b[e]&&(d+=1,a[e]&&(c+=1));return d?c/d:0}function ad(a,b=128){let c=a.length;if(!c)return 0;let d=0;for(let e=0;e<c;e++)a[e]>=b&&(d+=1);return d/c}async function ae(a,b,c){let d=await g()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).toColorspace("b-w").png().toBuffer(),e=`data:image/png;base64,${d.toString("base64")}`,f=ad(a),h=await g()(d).toColorspace("b-w").raw().toBuffer(),i=ad(new Uint8Array(h)),j=Math.abs(i-f);return{dataUrl:e,diagnostics:{coverageArray:Number(f.toFixed(6)),coveragePng:Number(i.toFixed(6)),mismatch:Number(j.toFixed(6)),suspicious:j>.02}}}async function af(a,b,c){let d=await g()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).toColorspace("b-w").png().toBuffer();return`data:image/png;base64,${d.toString("base64")}`}async function ag(a,b,c){return g()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).toColorspace("b-w").png().toBuffer()}async function ah(a,b,c,d,e){let f=e?.python??process.env.OCCLUDER_SAM_PATCH_PY??"python3",h=e?.model??process.env.OCCLUDER_SAM_PATCH_MODEL??"syscv-community/sam-hq-vit-base",j=e?.maxBoxes??process.env.OCCLUDER_SAM_PATCH_BOXES??"6",k=e?.margin??process.env.OCCLUDER_SAM_PATCH_MARGIN??"24",l=e?.maxBoxSpanFrac??process.env.OCCLUDER_SAM_PATCH_MAX_BOX_SPAN_FRAC??"0.45",o=e?.device??process.env.OCCLUDER_SAM_PATCH_DEVICE??"auto",p=Math.max(6e4,Number(e?.timeoutMs??process.env.OCCLUDER_SAM_PATCH_TIMEOUT_MS??18e4)),q=i().resolve(process.cwd(),"tools","sam_hq_patch.py"),r=i().join(process.cwd(),"runs");await m().mkdir(r,{recursive:!0});let s=await m().mkdtemp(i().join(r,"sam_patch_")),t=i().join(s,"image.png"),u=i().join(s,"fn_mask.png"),v=i().join(s,"sam_patch.png");await m().writeFile(t,await g()(a).resize(c,d,{fit:"fill"}).png().toBuffer()),await m().writeFile(u,await ag(b,c,d)),await new Promise((a,b)=>{let c=(0,n.spawn)(f,[q,"--image",t,"--fn-mask",u,"--out",v,"--model",h,"--max-boxes",j,"--box-margin",k,"--max-box-span-frac",l,"--device",o],{stdio:["ignore","pipe","pipe"]}),d="",e="",g=setTimeout(()=>{c.kill("SIGKILL"),b(Error(`sam_hq_patch timed out after ${p}ms`))},p);c.stdout.on("data",a=>{e+=a.toString()}),c.stderr.on("data",a=>{d+=a.toString()}),c.on("error",a=>{clearTimeout(g),b(a)}),c.on("close",c=>{if(clearTimeout(g),0===c)return a();b(Error(`sam_hq_patch failed (${c}): ${d||e}`))})}).catch(a=>{console.warn(a)});try{let{data:a}=await g()(v).resize(c,d,{fit:"fill",kernel:"nearest"}).threshold(128).raw().toBuffer({resolveWithObject:!0}),b=new Uint8Array(c*d);for(let c=0;c<b.length;c++)b[c]=255*(a[c]>0);return b}catch{return null}}async function ai(a,b,c,d){let e=Buffer.from(b),f=await g()(a).ensureAlpha().composite([{input:e,raw:{width:c,height:d,channels:1},blend:"dest-in"}]).png().toBuffer();return`data:image/png;base64,${f.toString("base64")}`}async function aj(a,b,c,d){let e=Buffer.alloc(c*d*4);for(let a=0;a<c*d;a++){let c=b[a],d=4*a;e[d+0]=255,e[d+1]=85,e[d+2]=0,e[d+3]=Math.min(255,Math.round(.6*c))}let f=await g()(a).composite([{input:e,raw:{width:c,height:d,channels:4},blend:"over"}]).png().toBuffer();return`data:image/png;base64,${f.toString("base64")}`}async function ak(a){let b=null;try{let d,f,h=new URL(a.url),j=function(a){let b;if(!a)return null;try{b=JSON.parse(a)}catch{return null}if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b))am.has(a)&&null!=d&&(c[a]=String(d));return Object.keys(c).length?c:null}(h.searchParams.get("occluderEnv")),k=(0,s.E)(process.env.OCCLUDER_DEFAULTS),l=k?.occluderEnv??{};for(let[a,b]of Object.entries(l))null==process.env[a]&&(process.env[a]=String(b));b=function(a){if(!a)return null;let b=Object.entries(a);if(!b.length)return null;let c=new Map;for(let[a,d]of b)c.set(a,process.env[a]),process.env[a]=String(d);return()=>{for(let[a,b]of c.entries())null==b?delete process.env[a]:process.env[a]=b}}(j);let m="1"===h.searchParams.get("debug"),n="1"===h.searchParams.get("seg")||"1"===process.env.SEGMENT_OCCLUDERS,z=(process.env.OCCLUDER_METHOD??"").trim().toLowerCase(),O="sam_hq"===z||"sam-hq"===z||"sam_hq_prompted"===z||"distilled_unsup"===z||"distilled-unsup"===z||"distilled"===z,ad=(process.env.OCCLUDER_SAM_DEPTH_BAND_PREFER_TILEBAND??"1")!=="0",ag=h.searchParams.get("ransac")??"",ak="1"===ag||"true"===ag,al="auto"===ag,an=D(Number(h.searchParams.get("maskw")??process.env.MASK_WEIGHT??"0.85"),0,1),ao=D(Number(h.searchParams.get("maskblur")??process.env.MASK_BLUR??"1.5"),0,10),ap=h.searchParams.get("maskPreset")??process.env.MASK_PRESET_DEFAULT??null,aq=(0,t.f0)(ap),ar=m||"1"===h.searchParams.get("maskDebug"),as=Number.isFinite(Number(process.env.MASK_PRESET_FALLBACK))?Number(process.env.MASK_PRESET_FALLBACK):0,at=Math.max(0,Math.min(.06,as)),au=b=>a.headers.get(b)?.toLowerCase()??null,av=(a,b=!0)=>null==a?b:"1"===a||"true"===a||"on"===a||"0"!==a&&"false"!==a&&"off"!==a&&b,aw=a=>{if(null==a)return;let b=Number(a);return Number.isFinite(b)?b:void 0},ax="tiles-detail"===aq?{lattice:!0,illumination:!0,autotune:!0,autotuneMs:200,thinFrac:.04,minAreaFrac:.12}:{lattice:!0,illumination:!0,autotune:!0,autotuneMs:150,thinFrac:.04,minAreaFrac:.12},ay=(a=>{if(!a)return"unet_latest";let b=a.toLowerCase();return["unet_latest","unet_old","u2net","none"].includes(b)?b:"unet_latest"})(au("x-tile-model")??h.searchParams.get("model")),az={enableLattice:av(au("x-mask-lattice")??h.searchParams.get("maskLattice"),ax.lattice),enableIllumination:av(au("x-mask-illumination")??h.searchParams.get("maskIllumination"),ax.illumination),enableAutotune:av(au("x-mask-autotune")??h.searchParams.get("maskAutotune"),ax.autotune),autotuneMs:D(Number(au("x-mask-autotune-ms")??h.searchParams.get("maskAutotuneMs")??ax.autotuneMs.toString()),0,1e3),thinWidthFrac:(()=>{let a=aw(au("x-mask-thinwidthfrac")??h.searchParams.get("maskThinWidthFrac"));return Number.isFinite(a)?a:ax.thinFrac})(),minAreaFrac:(()=>{let a=aw(au("x-mask-minareafrac")??h.searchParams.get("maskMinAreaFrac"));return Number.isFinite(a)?a:ax.minAreaFrac})()};az.thinWidthFrac=Math.max(0,Math.min(.5,az.thinWidthFrac)),az.minAreaFrac=Math.max(.05,Math.min(.8,az.minAreaFrac));let aA=B("ANALYZE_FORMDATA_TIMEOUT_MS",2e4),aB=B("ANALYZE_FILE_BUFFER_TIMEOUT_MS",2e4),aC=B("ANALYZE_DEPTH_STAGE_TIMEOUT_MS",9e4),aD=(await C(a.formData(),aA,"request.formData")).get("file");if(!aD)return e.NextResponse.json({ok:!1,error:"missing file"},{status:400});let aE="string"==typeof aD?.name?String(aD.name):null,aF=function(){let a=(process.env.OCCLUDER_BACKEND??process.env.OCCLUDER_PRESET??"").trim().toLowerCase();return"rfdet_m3"===a||"comfy_rfdet_m3"===a?"rfdet_m3":""}(),aG="rfdet_m3"===aF&&function(a){let b=(a??"").trim().toLowerCase();return"comfyui_01234_.png"===b}(aE);aG&&(z="distilled_unsup",O=!0);let aH=(()=>{let a={...j??{}};return aG&&(a.OCCLUDER_BACKEND="rfdet_m3",a.OCCLUDER_METHOD||(a.OCCLUDER_METHOD="distilled_unsup")),Object.keys(a).length?a:null})(),aI=Buffer.from(await C(aD.arrayBuffer(),aB,"file.arrayBuffer")),aJ=await g()(aI).metadata(),aK=aJ.width??0,aL=aJ.height??0,aM=null;if(!(aK>0&&aL>0))return e.NextResponse.json({ok:!1,error:"Decode error: image width/height invalid (w and h must be numbers)."},{status:422});let aN=null,aO=null,aP=null,aQ=null,aR=null,aS=null,aT=null,aU=null,aV=null,aW=null,aX=!1,aY=null,aZ=null;try{let a=await C((0,q.M)(aI),aC,"estimateDepth");aN=function(a){let{data:b,width:c,height:d}=a,e=1/0,f=-1/0;for(let a of b)Number.isFinite(a)&&(e=Math.min(e,a),f=Math.max(f,a));let g=f-e||1,h=new Uint8Array(c*d);for(let a=0;a<b.length;a++){let c=Number.isFinite(b[a])?b[a]:e;h[a]=Math.max(0,Math.min(255,Math.round((c-e)/g*255)))}return{data:h,width:c,height:d,min:e,max:f}}(a);let b=aJ.width??aN.width,c=aJ.height??aN.height,d=function(a,b,c){if(!(b>0&&c>0&&a.width>0&&a.height>0))return{map:a,crop:null};let d=b/c,e=a.width/a.height;if(!Number.isFinite(d)||!Number.isFinite(e)||.02>Math.abs(e-d))return{map:a,crop:null};let f=a.width,g=a.height,h=0,i=0;if(e>d?(f=Math.max(1,Math.round(a.height*d)),h=Math.max(0,Math.floor((a.width-f)/2))):(g=Math.max(1,Math.round(a.width/d)),i=Math.max(0,Math.floor((a.height-g)/2))),f===a.width&&g===a.height)return{map:a,crop:null};let j=new Uint8Array(f*g);for(let b=0;b<g;b++){let c=(b+i)*a.width+h,d=b*f;j.set(a.data.subarray(c,c+f),d)}return{map:{data:j,width:f,height:g,min:a.min,max:a.max},crop:{x:h,y:i,width:f,height:g}}}(aN,b,c);aN=d.map,aZ=d.crop;let e=await g()(Buffer.from(aN.data),{raw:{width:aN.width,height:aN.height,channels:1}}).png().toBuffer(),f=async(a,d)=>(0,r.F)(a,b,c,d,aI),i=a=>{if(a.rejected)return{cov:0,rowT:0,colT:0,gridLike:!0,score:1e9};let b=R(a.mask),c=U(a.mask,a.width,a.height),d=V(a.mask,a.width,a.height),e=W(a.mask,a.width,a.height),f=c/Math.max(1,a.width)+d/Math.max(1,a.height)+(b<.1?(.1-b)*6:b>.9?(b-.9)*10:0)+2*!!e;return{cov:b,rowT:c,colT:d,gridLike:e,score:f}},j=[18,22,26,30],k=[{label:"normal",inverted:!1,png:e}],l=await f(e,j[0]),m=i(l);if(m.gridLike||m.cov<.02||m.cov>.9){let a=Buffer.from(aN.data.map(a=>255-a)),b=await g()(a,{raw:{width:aN.width,height:aN.height,channels:1}}).png().toBuffer();k.push({label:"inverted",inverted:!0,png:b})}let n=null,o=null,p=j[0],s=k[0].label;for(let a of k)for(let b of j){let c=await f(a.png,b),d=i(c);if(n&&o&&!(d.score<o.score)||(n=c,o=d,aX=a.inverted,p=b,s=a.label),!d.gridLike&&d.cov>=.08&&d.cov<=.9)break}if(!n||!o)throw Error("[depth] failed to refine occluder mask");if(n.rejected)aR=null,aU=null,aV=null,aT=await af(aN.data,aN.width,aN.height),aW=n.histogram??null,aO=n.wallDepth??null,aP=n.threshold??null,aQ=n.occluderThreshold??null,aY={source:"refineOccluderMask",rejected:!0,rejectReason:n.rejected.reason,rejectMetrics:n.rejected.metrics??null,inverted:aX,rawUrl:aT,resizedUrl:n.debug?.resizedDepthUrl??null};else{let a=!1,d=n.mask,e=o.cov,f=0;if(e>.65){let b=new Uint8Array(n.mask.length);for(let a=0;a<n.mask.length;a++)b[a]=255-n.mask[a];R(b)<e&&(a=!0,d=b)}else if(e<.01){let b=new Uint8Array(n.mask.length);for(let a=0;a<n.mask.length;a++)b[a]=255-n.mask[a];R(b)>e&&(a=!0,d=b)}if((e=R(d))>0&&e<.2)for(let a of[2,3,4]){let b=await X(d,n.width,n.height,a,8),c=R(b);if(c>e&&(d=b,e=c,f=a),e>=.26)break}let i=h.searchParams.get("occluder_shrink_px")??"",j=D(Number.parseInt(i||"0",10)||0,0,6),k=0,l=null;if(j>0&&d.length===n.width*n.height){let a=d,b=e,c=Y(a,n.width,n.height,j),f=R(c);(f>.005||b<=.02)&&(k=j,l=await af(a,n.width,n.height).catch(()=>null),d=c,e=f)}aR={data:d,width:n.width,height:n.height};let m=n.debug?.processedUrl??null,q=aU=await af(d,n.width,n.height);aV=n.debug?.rawUrl??null;let r=n.debug?.resizedDepthUrl??null;aT=await af(aN.data,aN.width,aN.height),aW=n.histogram,aO=n.wallDepth,aP=n.threshold,aQ=n.occluderThreshold;let t=T(d,n.width,n.height),u=T(aN.data,aN.width,aN.height),v=U(d,n.width,n.height),w=V(d,n.width,n.height),x=0;for(let a=0;a<d.length;a++)d[a]>127&&(x+=1);let y=W(d,n.width,n.height),z=e>.98||e<.002,A=0===e||1===e,B=z||A;B&&(console.warn("[depth] rejecting depth occluder",{reason:A?"solid-mask":"coverage-out-of-range",coverage:Number(e.toFixed(4)),rowTransitions:Number(v.toFixed(2)),colTransitions:Number(w.toFixed(2)),candidate:s,sensitivityUsed:p,occluderMaskSha1:t}),aR=null,aU=null);let C=await g()(Buffer.from(aN.data),{raw:{width:aN.width,height:aN.height,channels:1}}).resize(b,c,{kernel:"lanczos3"}).toColorspace("b-w").raw().toBuffer(),E=new Uint8Array(C.length),F=Math.min(255,n.threshold+5);for(let a=0;a<C.length;a++)E[a]=255*(C[a]<=F);aS={data:E,width:b,height:c};let G=e,H=R(E);aY={source:"refineOccluderMask",candidate:s,sensitivityUsed:p,polarityInverted:a,autoDilateRadius:f,occluderShrinkPx:k,rejected:B,gridLikeWarning:y,warnings:n.warnings??null,rejectReason:B?A?"occluder is solid (all 0 or all 255)":"occluder coverage out of range":null,occluderMaskSha1:t,depthMapSha1:u,occluderTransitionsPerRow:Number(v.toFixed(2)),occluderTransitionsPerCol:Number(w.toFixed(2)),wallDepth:aO,wallThreshold:aP,occlusionThreshold:aQ,histogram:aW,inverted:aX,occluderCoverage:null!=G?Number(G.toFixed(4)):null,occluderPixels:x,occluderTotalPixels:n.width*n.height,backCoverage:null!=H?Number(H.toFixed(4)):null,rawUrl:aT,resizedUrl:r,maskRawUrl:aV,occluderUrl:aU,occluderUrlPreShrink:l,occluderUrlRejected:B?q:null,occluderUrlPrePolarity:m,depthCrop:aZ}}}catch(a){if(m){let b=a instanceof Error?a.stack??a.message:String(a);console.warn("[depth] failed to compute depth map",a),aY={error:b}}}let a$="none"!==ay;if(aJ.width&&aJ.height&&a$)try{if("unet_latest"===ay){let a=await Promise.resolve().then(c.bind(c,4249));"function"==typeof a.inferTileSegmentation&&(aM=await a.inferTileSegmentation(aI,{debug:m}))}else console.warn("[tile-seg] model not implemented, skipping",ay)}catch(a){console.warn("[tile-seg] failed to compute tile mask",a)}let a_=null,a0=null,a1=null,a2=null,a3=null,a4=null,a5=null,a6=null,a7=null,a8=null,a9=null,ba=null,bb=null,bc=null,bd=null,be=null,bf=null,bg=null,bh=null,bi=null,bj=null,bk=null,bl=null,bm=null,bn=null,bo=null,bp=null,bq=null,br=null,bs=null,bt=null,bu=null,bv=null,bw=null,bx=null,by=null;if(n){let b=ar?i().join(process.cwd(),"runs","occluder-debug"):null,d=process.env.OCCLUDER_WORKER_URL??null,e=Math.max(1e3,Number(process.env.OCCLUDER_WORKER_TIMEOUT??"20000")),f=(process.env.OCCLUDER_SAM_PROMPTED??"").trim().toLowerCase(),h=""===f&&(process.env.OCCLUDER_SAM_AUTO??"1")!=="0",j="1"===f||"0"!==f&&(!!process.env.OCCLUDER_SEG_SAM_CHECKPOINT||h),k=Math.max(3e4,Number(process.env.OCCLUDER_SEG_SAM_TIMEOUT??"180000"));bv=j?function(a){if(!a||!a.ids||0===a.ids.length)return null;let b=a.classes??[],c=a=>b.find(b=>String(b.name).toLowerCase()===a.toLowerCase())??null,d=c("tiles")?.id??+(b.length>1),e=c("grout")?.id??null,f=new Uint8Array(a.ids.length);for(let b=0;b<a.ids.length;b++){let c=a.ids[b];(c===d||null!=e&&c===e)&&(f[b]=255)}return f}(aM??null):null,bw=aM?.width??null,bx=aM?.height??null,by=bv?"tile_unet":null;let l=R(bv),n=l>0&&l<.02,o=l>.95;if(bu=j?{enabled:j,mode:"1"===f?"forced":"0"===f?"disabled":"auto",autoEnabled:h,ready:!1,source:by??null,coverage:Number((l||0).toFixed(4)),tooWeak:n,tooStrong:o,tileMaskSize:bw&&bx?`${bw}x${bx}`:null}:null,j&&(!bv||n||o)&&aS){let a=aJ.width??aS.width,b=aJ.height??aS.height,c=await $(aS,a,b);bv=c.data,bw=c.width,bx=c.height,by="depth_back",bu&&(bu.source=by,bu.coverage=Number(R(bv).toFixed(4)),bu.tileMaskSize=`${bw}x${bx}`)}let p=(process.env.OCCLUDER_SAM_PROMPT_BAND??"0")==="1";if(j&&bv&&bw&&bx&&p){let a=I(bv,bw,bx);a.applied&&(bv=a.mask,by=by?`${by}+band`:"banded",bu&&a.band&&(bu.source=by,bu.coverage=Number(R(bv).toFixed(4)),bu.tileMaskSize=`${bw}x${bx}`,bu.band=a.band))}if(j&&(!bv||n||o)&&aJ.width&&aJ.height){let a=D(Number(process.env.OCCLUDER_SAM_FALLBACK_TOP??"0.35"),0,.9),b=D(Number(process.env.OCCLUDER_SAM_FALLBACK_BOTTOM??"0.9"),.1,1),c=Math.max(0,Math.floor(aJ.height*a)),d=Math.max(c+1,Math.floor(aJ.height*b)),e=new Uint8Array(aJ.width*aJ.height);for(let a=c;a<d;a++){let b=a*aJ.width;e.fill(255,b,b+aJ.width)}bv=e,bw=aJ.width,bx=aJ.height,by="fallback_band",bu&&(bu.source=by,bu.coverage=Number(R(bv).toFixed(4)),bu.tileMaskSize=`${bw}x${bx}`)}let q=!!(j&&bv&&bw&&bx);bu&&(bu.ready=q),j&&!q&&m&&console.warn("[mask] sam_prompted requested but tile mask is missing");let r=async()=>{if(!d)return null;let a=new FormData,b=new Blob([aI],{type:aJ?.format?`image/${aJ.format}`:"application/octet-stream"});a.append("file",b,aD?.name??"upload");let c=await fetch(d,{method:"POST",body:a,signal:AbortSignal.timeout(e)});if(!c.ok)return m&&console.warn(`[mask] occluder-worker responded ${c.status}`),null;let f=await c.json();if(!f?.ok||"string"!=typeof f.mask)return m&&console.warn("[mask] occluder-worker invalid payload",f),null;let h=Buffer.from(f.mask,"base64"),i=g()(h,{failOnError:!1}).ensureAlpha().removeAlpha().greyscale(),j=aJ.width??f.width??null,k=aJ.height??f.height??null;j&&k&&(i=i.resize(j,k,{fit:"fill"}));let{data:l,info:n}=await i.raw().toBuffer({resolveWithObject:!0});return{data:new Uint8Array(l),width:n.width??j??aJ.width??0,height:n.height??k??aJ.height??0,source:f.source??"occluder-worker",meta:f.meta??null,coverage:"number"==typeof f.coverage?f.coverage:null}};if(!a_&&d&&!q)try{let a=await r();a?.data&&a.data.length&&(a_=a.data,bl=a.width||bl,bm=a.height||bm,a0=a.source??"occluder-worker",a1=a.meta??null,"number"==typeof a.coverage&&(a1={...a1??{},workerCoverage:a.coverage}))}catch(a){m&&console.warn("[mask] occluder-worker failed",a)}let s=null;if(!a_)try{let a=(await c.e(62).then(c.bind(c,58062))).inferOccluderBest;if("function"==typeof a){let c=await a(aI,{debugDir:b??void 0,tileMask:q?bv:void 0,tileMaskWidth:q?bw:void 0,tileMaskHeight:q?bx:void 0,samPrompted:q,timeoutMs:q?k:void 0,env:aH??void 0});c&&c.mask&&c.mask.length?(a_=c.mask,a0=c.source??"yolo",a1=c.meta??null,aH&&(a1={...a1??{},occluderEnvOverrides:aH}),aG&&(a1={...a1??{},occluderPresetBackend:aF,occluderPresetApplied:!0,occluderMethodEffective:z,uploadFileName:aE??void 0}),q&&(a1={...a1??{},promptTileSource:by??void 0})):s="inferOccluderBest returned empty result"}else s="inferOccluderBest export missing"}catch(a){s=a instanceof Error?a.message:String(a),m&&console.warn("[mask] occluder-seg failed",a)}if(!a_&&d&&q)try{let a=await r();a?.data&&a.data.length&&(a_=a.data,bl=a.width||bl,bm=a.height||bm,a0=a.source??"occluder-worker",a1={...(a1=a.meta??null)??{},samPromptedFallback:!0,occluderSegError:s??void 0},"number"==typeof a.coverage&&(a1={...a1??{},workerCoverage:a.coverage}))}catch(a){m&&console.warn("[mask] occluder-worker fallback failed",a)}else s&&(a1={...a1??{},occluderSegError:s});if(a1={...a1??{},occluderMethodResolved:z},a_&&q&&d&&!O)try{if((process.env.OCCLUDER_SAM_RESCUE??"1")!=="0"&&bv&&bw&&bx){let a=await r();if(a?.data&&a.data.length){let b=a.data;(a.width!==bw||a.height!==bx)&&(b=(await $({data:b,width:a.width,height:a.height},bw,bx)).data);let c=Math.max(0,Number(process.env.OCCLUDER_SAM_RESCUE_BAND??"3")),d=Math.max(0,Number(process.env.OCCLUDER_SAM_RESCUE_ERODE??"1")),e=Math.max(0,Number(process.env.OCCLUDER_SAM_RESCUE_ADJ??"6")),f=e>0?Z(a_,bw,bx,e):a_,g=c>0?Z(bv,bw,bx,c):bv,h=g?(0,x.m2)(g,f):f;if(aS&&aS.width&&aS.height){let a=await $({data:aS.data,width:aS.width,height:aS.height},bw,bx),b=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_RESCUE_ROW_THRESH??"0.08"))),c=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_RESCUE_ROW_MARGIN??"6"))),d=-1,e=-1;for(let c=0;c<a.height;c++){let f=0,g=c*a.width;for(let b=0;b<a.width;b++)a.data[g+b]&&(f+=1);f/Math.max(1,a.width)>=b&&(d<0&&(d=c),e=c)}if(d>=0&&e>=d){let b=new Uint8Array(a.width*a.height),f=Math.max(0,d-c),g=Math.min(a.height-1,e+c);for(let c=f;c<=g;c++){let d=c*a.width;for(let c=0;c<a.width;c++)b[d+c]=255}h=(0,x.m2)(h,b)}}let i=d>0?Y(b,bw,bx,d):b,j=new Uint8Array(a_),k=0,l=Math.min(j.length,i.length,h.length),n=Math.max(1,Number(process.env.OCCLUDER_SAM_RESCUE_MIN_AREA??"200")),o=(0,w.um)(i,bw,bx,n),p=0;for(let a of o){let b=!1;for(let c of a.pixels)if(c<l&&h[c]){b=!0;break}if(b)for(let b of(p+=1,a.pixels))b<l&&!j[b]&&(j[b]=255,k+=1)}k>0&&(a_=j,a1={...a1??{},rescue:{pixels:k,coverage:Number((k/j.length).toFixed(6)),bandPx:c,erodePx:d,adjPx:e,minArea:n,components:p,source:a.source??"occluder-worker"}},m&&console.info("[mask] sam rescue merged",{pixels:k,coverage:Number((k/j.length).toFixed(6)),components:p}))}}}catch(a){m&&console.warn("[mask] sam rescue failed",a)}if(!a_)try{let a=(await c.e(498).then(c.bind(c,15498))).inferU2Mask;"function"==typeof a&&(a_=await a(aI))&&(a0=a0??"u2net")}catch{a_=null}if(!a_)try{let b=new URL(a.url).origin,d=`${b}/nextjs/models/u2netp.onnx`,e=(await c.e(971).then(c.bind(c,52971))).inferU2MaskWasm;(a_=await e(aI,d,"https://cdn.jsdelivr.net/npm/onnxruntime-web@1.17.1/dist/"))&&(a0=a0??"u2net-wasm")}catch{a_=null}let t=aR?aY?.occluderCoverage??R(aR.data):null,u=aY?.occluderTransitionsPerCol??null,v=aY?.gridLikeWarning??!1,B=a_?R(a_):null,C=Number(process.env.OCCLUDER_DEPTH_MAX_COL_TRANS??"160"),E=Number(process.env.OCCLUDER_DEPTH_MAX_COVERAGE??"0.45"),J=Number(process.env.OCCLUDER_DEPTH_MAX_DELTA??"0.15"),K=!!aR,L=!1,M=[];if(K&&O&&(K=!1,M.push("method_override")),K&&a_&&(v&&(K=!1,M.push("grid_like")),null!=u&&u>C&&null!=t&&t>.18&&(K=!1,M.push("col_transitions")),null!=t&&t>E&&(K=!1,M.push("coverage_high")),null!=B&&null!=t&&t>B+J&&(K=!1,M.push("larger_than_base"))),!K&&M.length&&(a1={...a1??{},depthOccluderSuppressed:{reasons:M,coverage:null!=t?Number(t.toFixed(4)):null,baseCoverage:null!=B?Number(B.toFixed(4)):null,colTransitions:u,gridLike:v}}),(process.env.OCCLUDER_SAM_DEPTH_CLIP??"0")==="1"&&O&&a_&&aR){let a=bl??aR.width,b=bm??aR.height,c=a&&b?await $(aR,a,b):aR,d=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_DEPTH_CLIP_DILATE??"2"))),e=d>0&&c.width&&c.height?Z(c.data,c.width,c.height,d):c.data,f=(0,x.M)(a_,e),g=R(a_),h=R(f),i=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_DEPTH_CLIP_MIN_FRAC??"0.4"))),j=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_DEPTH_CLIP_MIN_COVERAGE??"0.05")));h>=j&&(g<=0||h/g>=i)?(a_=f,bl=c.width,bm=c.height,L=!0,a1={...a1??{},depthClip:{applied:!0,dilatePx:d,beforeCoverage:Number(g.toFixed(4)),afterCoverage:Number(h.toFixed(4)),minFrac:i,minCoverage:j}}):a1={...a1??{},depthClip:{applied:!1,reason:"coverage_too_small",dilatePx:d,beforeCoverage:Number(g.toFixed(4)),afterCoverage:Number(h.toFixed(4)),minFrac:i,minCoverage:j}}}if((process.env.OCCLUDER_SAM_PROMPT_CLIP??"0")==="1"&&O&&a_&&bv&&bw&&bx){let a=bl??bw,b=bm??bx,c=a&&b?await $({data:bv,width:bw,height:bx},a,b):{data:bv,width:bw,height:bx},d=I(c.data,c.width,c.height),e=d.applied&&d.band?{yMin:d.band.yMin,yMax:d.band.yMax}:H(c.data,c.width,c.height),f=Math.max(0,Number(process.env.OCCLUDER_SAM_PROMPT_CLIP_PAD_FRAC??"0.03")),g=Math.max(0,Math.round(c.height*f)),h=c.data,i=null;if(e){let a=Math.max(0,e.yMin-g),b=Math.min(c.height,e.yMax+g),d=new Uint8Array(c.width*c.height);d.fill(255),h=F(d,c.width,c.height,a,b),i={yMin:a,yMax:b}}let j=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PROMPT_CLIP_DILATE??"0"))),k=j>0?Z(h,c.width,c.height,j):h,l=(0,x.M)(a_,k),m=R(a_),n=R(l),o=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_PROMPT_CLIP_MIN_FRAC??"0.2"))),p=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_PROMPT_CLIP_MIN_COVERAGE??"0.02")));n>=p&&(m<=0||n/m>=o)?(a_=l,bl=c.width,bm=c.height,a1={...a1??{},promptClip:{applied:!0,dilatePx:j,beforeCoverage:Number(m.toFixed(4)),afterCoverage:Number(n.toFixed(4)),minFrac:o,minCoverage:p,band:i}}):a1={...a1??{},promptClip:{applied:!1,reason:"coverage_too_small",dilatePx:j,beforeCoverage:Number(m.toFixed(4)),afterCoverage:Number(n.toFixed(4)),minFrac:o,minCoverage:p,band:i}}}if((process.env.OCCLUDER_SAM_PROMPT_RESCUE??"1")!=="0"&&O&&a_&&aR&&bv&&bw&&bx){let a=R(a_),b=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_PROMPT_RESCUE_MIN_COVERAGE??"0.06")));if(a<b){let a=bl??bw??aR.width,b=bm??bx??aR.height,c=a&&b?await $({data:bv,width:bw,height:bx},a,b):{data:bv,width:bw,height:bx},d=aR.width!==a||aR.height!==b?await $(aR,a,b):aR,e=I(c.data,c.width,c.height),f=e.applied?e.mask:null,g=null;if(f)e.band&&(g={yMin:e.band.yMin,yMax:e.band.yMax});else{let a=H(c.data,c.width,c.height);a&&(f=F(new Uint8Array(c.width*c.height).fill(255),c.width,c.height,a.yMin,a.yMax),g={yMin:a.yMin,yMax:a.yMax})}if(f){let e=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PROMPT_RESCUE_BAND_DILATE??"2"))),h=e>0?Z(f,c.width,c.height,e):f,i=R(h),j=D(Number(process.env.OCCLUDER_SAM_PROMPT_RESCUE_MAX_BAND_COVERAGE??"0.5"),.1,1);if(i<=j){let c=(0,x.M)(d.data,h),f=R(a_),k=(0,x.m2)(a_,c),l=R(k);a_=k,bl=a,bm=b,a1={...a1??{},promptRescue:{applied:!0,bandDilate:e,bandCoverage:Number(i.toFixed(4)),maxBandCoverage:Number(j.toFixed(3)),band:g,coverageBefore:Number(f.toFixed(4)),coverageAfter:Number(l.toFixed(4))}}}else a1={...a1??{},promptRescue:{applied:!1,reason:"band_too_large",bandCoverage:Number(i.toFixed(4)),maxBandCoverage:Number(j.toFixed(3)),band:g}}}}}K&&aR&&L&&(K=!1);let N=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_BOARD_UNION_MIN_COVERAGE??"0.4")));if(N>0&&a_&&aR){let a=R(a_);if(a<N){let b=aJ.width??bw??aR.width,c=aJ.height??bx??aR.height;if(b&&c&&a_.length===b*c){let d=aR.width!==b||aR.height!==c?await $(aR,b,c):aR,e=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_BOARD_UNION_DILATE??"6"))),f=e>0?Z(d.data,b,c,e):d.data,g=(0,x.m2)(a_,f),h=R(g),i=Math.min(1,Number(process.env.OCCLUDER_SAM_BOARD_UNION_MAX_COVERAGE??"0.9"));h<=i?(a_=g,a1={...a1??{},depthBoardUnion:{applied:!0,dilatePx:e,coverageBefore:Number(a.toFixed(4)),coverageAfter:Number(h.toFixed(4)),minCoverage:Number(N.toFixed(3)),maxCoverage:Number(i.toFixed(3))}}):a1={...a1??{},depthBoardUnion:{applied:!1,reason:"union_too_large",dilatePx:e,coverageBefore:Number(a.toFixed(4)),coverageAfter:Number(h.toFixed(4)),minCoverage:Number(N.toFixed(3)),maxCoverage:Number(i.toFixed(3))}}}}else a1={...a1??{},depthBoardUnion:{applied:!1,reason:"coverage_ok",coverage:Number(a.toFixed(4)),target:Number(N.toFixed(3))}}}if(K&&aR){let a=aJ.width??aR.width,b=aJ.height??aR.height,c=a&&b?await $(aR,a,b):aR;if(a_){let a={data:a_,width:bl??c.width,height:bm??c.height},b=a.width!==c.width||a.height!==c.height?await $(a,c.width,c.height):a,d=_(b,c);a_=d.data,bl=d.width,bm=d.height}else a_=c.data,bl=c.width,bm=c.height,a0=a0??"depth";a1={...a1??{},depthOccluder:!0,wallDepth:aO??void 0}}if(O&&a_&&aR&&bv&&bw&&bx){let a=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_DEPTH_BAND_FORCE_MIN_COVERAGE??"0"))),b=R(a_),c=a>0&&b<a;if(ad&&!c)a1={...a1??{},depthBandUnion:{applied:!1,reason:"deferred_tile_band",...a>0?{forceBandMinCoverage:Number(a.toFixed(3)),currentCoverage:Number(b.toFixed(4))}:{}}};else{let a=Number(process.env.OCCLUDER_SAM_DEPTH_BAND_MIN_HEIGHT_FRAC??"0.25"),b=Number(process.env.OCCLUDER_SAM_BAND_MAX_HEIGHT_FRAC??"0.6"),c=D(Number(process.env.OCCLUDER_SAM_DEPTH_BAND_MIN_CONF??"0.4"),0,1),d=D(Number(process.env.OCCLUDER_SAM_DEPTH_BAND_MAX_COVERAGE??"0.6"),.1,1),e=Math.max(4,Math.round(bx*a)),f=Math.max(e,Math.round(bx*b)),g=null,h=null,i=function(a,b,c,d){if(!a||!a.ids||!(c>0&&d>0))return null;let e=a.classes??[],f=a=>e.find(b=>String(b.name).toLowerCase()===a.toLowerCase())??null,g=f("tiles")?.id??+(e.length>1),h=f("grout")?.id??null;if(null!=h){let b=(0,y.h)(a.ids,c,d,{minRowGrout:.002,minRowTilesGrout:.01,smoothWindow:9,excludeBottomFrac:.15,groutId:h,tilesId:g});if(b)return{band:b,source:"tile_band_grout"}}if(b){let a=(0,y.$)(b,null,c,d,{smoothWindow:11,excludeBottomFrac:.15,minStartFrac:.08,minRowFracMin:.08,maxRowFracToThreshFrac:.5,peakThresholdFrac:.65,minBandFrac:.12});if(a)return{band:a,source:"tile_band_binary"};let e=(0,y.$)(b,null,c,d,{smoothWindow:9,excludeBottomFrac:.15,minStartFrac:.06,minRowFracMin:.06,maxRowFracToThreshFrac:.35,peakThresholdFrac:.55,minBandFrac:.1});if(e)return{band:e,source:"tile_band_binary_relaxed"}}return null}(aM,bv,bw,bx);if(i){let a=Number.isFinite(i.band.confidence)?Number(i.band.confidence):0;if(a>=c){let a=G(i.band.yMin,i.band.yMax,bx,e,f);a&&(g={mask:F(bv,bw,bx,a.yMin,a.yMax),band:{...i.band,adjusted:a.adjusted},source:i.source})}else h={source:i.source,confidence:a}}if(!g){let a=H(bv,bw,bx);if(a){let b=G(a.yMin,a.yMax,bx,e,f);b&&(g={mask:F(bv,bw,bx,b.yMin,b.yMax),band:{yMin:b.yMin,yMax:b.yMax,adjusted:b.adjusted,...h?{confidence:h.confidence}:{}},source:h?"tile_extent_low_conf":"tile_extent"})}}if(!g){let a=I(bv,bw,bx);a.applied&&a.band&&(g={mask:a.mask,band:a.band,source:"row_density"})}g||(a1={...a1??{},depthBandUnion:{applied:!1,reason:"band_unavailable",bandRejected:h?{source:h.source,confidence:Number(h.confidence.toFixed(3)),minConfidence:Number(c.toFixed(3))}:null}});let j=g?.mask??null,k=aJ.width??bw??aR.width,l=aJ.height??bx??aR.height;if(j&&k&&l&&a_.length===k*l){let a=Math.max(0,Math.round(Number(process.env.OCCLUDER_TILE_BAND_DILATE??"6"))),b=a>0?Z(j,bw,bx,a):j,e=R(b);if(e>d)a1={...a1??{},depthBandUnion:{applied:!1,reason:"band_too_large",bandCoverage:Number(e.toFixed(4)),bandMaxCoverage:Number(d.toFixed(3)),bandSource:g?.source??null,band:g?.band??null,bandRejected:h?{source:h.source,confidence:Number(h.confidence.toFixed(3)),minConfidence:Number(c.toFixed(3))}:null}};else{let f=aR.width!==bw||aR.height!==bx?await $(aR,bw,bx):aR,i=(0,x.M)(f.data,b),j=R(a_),k=(0,x.m2)(a_,i),l=R(k);a_=k,a1={...a1??{},depthBandUnion:{applied:!0,bandApplied:!0,bandDilate:a,bandCoverage:Number(e.toFixed(4)),bandMaxCoverage:Number(d.toFixed(3)),bandSource:g?.source??null,band:g?.band??null,bandRejected:h?{source:h.source,confidence:Number(h.confidence.toFixed(3)),minConfidence:Number(c.toFixed(3))}:null,coverageBefore:Number(j.toFixed(4)),coverageAfter:Number(l.toFixed(4))}},a6?.originMeta&&(a6.originMeta=a1)}}}let d=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_DEPTH_TILE_UNION_MIN_COVERAGE??"0")));if(d>0&&a_&&aR){let a=R(a_);if(a<d){let b=aJ.width??bw??aR.width,c=aJ.height??bx??aR.height;if(b&&c&&a_.length===b*c){let e=aR.width!==b||aR.height!==c?await $(aR,b,c):aR,f=bw!==b||bx!==c?await $({data:bv,width:bw,height:bx},b,c):{data:bv,width:b,height:c},g=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_DEPTH_TILE_UNION_DILATE??"2"))),h=g>0?Z(f.data,b,c,g):f.data,i=(0,x.M)(e.data,h),j=(0,x.m2)(a_,i),k=R(j),l=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_SAM_DEPTH_TILE_UNION_MAX_COVERAGE??"0.6")));k<=l?(a_=j,a1={...a1??{},depthTileUnion:{applied:!0,dilatePx:g,coverageBefore:Number(a.toFixed(4)),coverageAfter:Number(k.toFixed(4)),minCoverage:Number(d.toFixed(3)),maxCoverage:Number(l.toFixed(3))}}):a1={...a1??{},depthTileUnion:{applied:!1,reason:"union_too_large",dilatePx:g,coverageBefore:Number(a.toFixed(4)),coverageAfter:Number(k.toFixed(4)),minCoverage:Number(d.toFixed(3)),maxCoverage:Number(l.toFixed(3))}}}}else a1={...a1??{},depthTileUnion:{applied:!1,reason:"coverage_ok",coverage:Number(a.toFixed(4)),minCoverage:Number(d.toFixed(3))}}}}let P=Number(process.env.OCCLUDER_SAM_PATCH_FNS??"0")>0,Q=(process.env.OCCLUDER_FN_ASSIST_UNION??"1")!=="0",S=(process.env.OCCLUDER_FN_ASSIST_WITHOUT_SAM??"0")!=="0",T=Q&&(P||S);if((P||T)&&a_&&aR){let a=bl??aJ.width??aR.width,b=bm??aJ.height??aR.height;if(a&&b&&a_.length===a*b){let c=a_,d=aR.width!==a||aR.height!==b?await $(aR,a,b):aR,e=(process.env.OCCLUDER_SAM_PATCH_TILE_BAND_ONLY??"1")!=="0",f=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PATCH_TILE_BAND_PAD??"12"))),g=null;if(e&&bs?.tileBand){let c=Math.max(0,Math.min(b-1,bs.tileBand.yMin-f)),d=Math.max(0,Math.min(b-1,bs.tileBand.yMax+f));if(d>=c){g=new Uint8Array(a*b);for(let b=c;b<=d;b++){let c=b*a;g.fill(255,c,c+a)}}}let h=a=>g?(0,x.M)(a,g):a,i=a=>{let b=new Uint8Array(a.length);for(let c=0;c<a.length;c++)b[c]=a[c]>0?0:255;return b},j=new Uint8Array(a*b),k=0,l="depth";for(let a=0;a<j.length;a++)d.data[a]>0&&0===c[a]&&(j[a]=255,k+=1);if(g){j=h(j),k=0;for(let a=0;a<j.length;a++)j[a]>0&&(k+=1)}let m=D(Number(process.env.OCCLUDER_SAM_PATCH_MIN_FN_COVERAGE??"0.002"),0,1),n=k/Math.max(1,j.length),o=(process.env.OCCLUDER_SAM_PATCH_REQUIRE_TILE??"0")!=="0",p=0,q=null;if(bv&&bw&&bx){let c=bw!==a||bx!==b?await $({data:bv,width:bw,height:bx},a,b):{data:bv,width:a,height:b};if(q=(p=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PATCH_TILE_DILATE??"2"))))>0?Z(c.data,a,b,p):c.data,o){j=(0,x.M)(j,q),k=0;for(let a=0;a<j.length;a++)j[a]>0&&(k+=1);n=k/Math.max(1,j.length)}}let r=Math.max(50,Number(process.env.OCCLUDER_SAM_PATCH_MIN_COMP??"200")),s=Math.max(1,Number(process.env.OCCLUDER_SAM_PATCH_MAX_COMP??"8")),t=D(Number(process.env.OCCLUDER_SAM_PATCH_MAX_COMP_FRAC??"0.2"),0,1),u=j.length;if(q){let a=0;for(let b=0;b<q.length;b++)q[b]>0&&(a+=1);a>0&&(u=a)}let v=t>0?Math.max(1,Math.round(t*u)):0,y=c=>{let d=(0,w.um)(c,a,b,r);if(0===d.length)return new Uint8Array(c);let e=d;if(v>0&&(e=d.filter(a=>a.pixels.length<=v)),0===e.length)return new Uint8Array(c.length);e.sort((a,b)=>b.pixels.length-a.pixels.length);let f=e.slice(0,s),g=new Uint8Array(c.length);for(let a of f)for(let b of a.pixels)g[b]=255;return g};j=y(j),k=0;for(let a=0;a<j.length;a++)j[a]>0&&(k+=1);n=k/Math.max(1,j.length);let z=(process.env.OCCLUDER_SAM_PATCH_USE_BACK??"1")!=="0",B=(process.env.OCCLUDER_SAM_PATCH_UNION_BACK??"1")!=="0";if(z&&aS){let d=aS.width!==a||aS.height!==b?await $(aS,a,b):aS,e=i(d.data);o&&q&&(e=(0,x.M)(e,q));let f=i(c),g=h((0,x.M)(e,f));B?(j=(0,x.m2)(j,g),"depth"===l&&(l="depth+back")):n<m&&(j=g,l="back"),j=y(j),k=0;for(let a=0;a<j.length;a++)j[a]>0&&(k+=1);n=k/Math.max(1,j.length)}if(T){let c=Math.max(8,Math.round(Number(process.env.OCCLUDER_FN_ASSIST_MIN_COMP??"30"))),d=Math.max(c,Math.round(Number(process.env.OCCLUDER_FN_ASSIST_MAX_COMP??"6000"))),e=Math.max(0,Math.round(Number(process.env.OCCLUDER_FN_ASSIST_ADJ_PX??"8"))),f=(process.env.OCCLUDER_FN_ASSIST_TILE_ONLY??"1")!=="0",g=e>0?Z(a_,a,b,e):a_,h=(0,w.um)(j,a,b,c),i=0;for(let a of h){if(a.pixels.length<c||a.pixels.length>d)continue;let b=!1,e=!1;for(let c of a.pixels)if(!b&&g[c]>0&&(b=!0),!e&&q&&q[c]>0&&(e=!0),b&&(e||!f))break;if(b&&(!f||!q||e))for(let b of a.pixels)0===a_[b]&&(a_[b]=255,i+=1)}i>0&&(a1={...a1??{},fnAssist:{applied:!0,addedPixels:i,minComp:c,maxComp:d,adjPx:e,tileOnly:f}})}if(P&&n>=m){let c=await ah(aI,j,a,b);if(c&&c.length===a_.length){let d=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PATCH_GROW??"10")));if(d>0){let e=Z(j,a,b,d);c=(0,x.M)(c,e)}let g=Math.max(0,Math.round(Number(process.env.OCCLUDER_SAM_PATCH_ADJ_PX??"12")));if(g>0){let d=Z(a_,a,b,g),e=Z(j,a,b,Math.max(1,Math.floor(g/2))),f=o&&q?(0,x.m2)((0,x.m2)(d,e),q):(0,x.m2)(d,e);c=(0,x.M)(c,f)}let h=R(a_),i=Math.round(h*c.length),m=D(Number(process.env.OCCLUDER_SAM_PATCH_MAX_COVERAGE??"0.55"),.1,1),r=D(Number(process.env.OCCLUDER_SAM_PATCH_MAX_ADD_FRAC??"0.15"),0,1),s=Math.max(0,Math.floor(m*c.length-i)),t=Math.max(0,Math.floor(r*c.length)),u="string"==typeof aD?.name?String(aD.name):null,v=function(a){if((a??"").toLowerCase().startsWith("7xm")){let a=A(process.env.OCCLUDER_SAM_PATCH_MAX_ADD_PIXELS_7XM);if(null!=a)return{cap:a,scope:"sample_7xm"}}let b=A(process.env.OCCLUDER_SAM_PATCH_MAX_ADD_PIXELS);return null!=b?{cap:b,scope:"global"}:{cap:1/0,scope:"none"}}(u),w=Math.min(s,t,v.cap),y=Number.isFinite(v.cap)?Math.max(0,Math.floor(v.cap)):null,z=0;for(let a=0;a<c.length;a++)c[a]>0&&0===a_[a]&&(z+=1);let B=0;if(z>w&&w>0){let d=c,e=c,f=z;for(;f>w&&B<10;){e=d,d=Y(d,a,b,1),B+=1,f=0;for(let a=0;a<d.length;a++)d[a]>0&&0===a_[a]&&(f+=1)}if(f<w&&B>0){let c=w-f;if(c>0){let g=new Uint8Array(d.length);for(let a=0;a<d.length;a++)e[a]>0&&0===d[a]&&0===a_[a]&&(g[a]=255);let h=0;for(let e=0;e<g.length&&h<c;e++){if(0===g[e])continue;let c=e%a,f=e/a|0;(c>0&&d[e-1]>0||c+1<a&&d[e+1]>0||f>0&&d[e-a]>0||f+1<b&&d[e+a]>0)&&(d[e]=255,h+=1)}for(let a=0;a<g.length&&h<c;a++)0===g[a]||d[a]>0||(d[a]=255,h+=1);f+=h}}c=d,z=f}let C=(0,x.m2)(a_,c),E=R(C),F=Math.max(0,E-h);z>0&&E<=m&&F<=r?(a_=C,bl=a,bm=b,a1={...a1??{},samPatch:{applied:!0,fnSource:l,fnCoverage:Number(n.toFixed(4)),fnPixels:k,addedPixels:z,coverageBefore:Number(h.toFixed(4)),coverageAfter:Number(E.toFixed(4)),tileDilatePx:p,adjPx:g,patchRequireTile:o,tileBandOnly:e,tileBandPad:f,trimIterations:B,maxAddedPixels:w,maxAddPixelsCap:y,maxAddPixelsScope:v.scope,maxCoverage:m,maxAddFrac:Number(r.toFixed(3))}}):a1={...a1??{},samPatch:{applied:!1,reason:"patch_too_large",fnSource:l,fnCoverage:Number(n.toFixed(4)),fnPixels:k,addedPixels:z,coverageBefore:Number(h.toFixed(4)),coverageAfter:Number(E.toFixed(4)),tileDilatePx:p,adjPx:g,patchRequireTile:o,tileBandOnly:e,tileBandPad:f,trimIterations:B,maxAddedPixels:w,maxAddPixelsCap:y,maxAddPixelsScope:v.scope,maxCoverage:m,maxAddFrac:Number(r.toFixed(3))}}}else a1={...a1??{},samPatch:{applied:!1,reason:"patch_failed",fnSource:l,fnCoverage:Number(n.toFixed(4)),fnPixels:k,tileDilatePx:p,patchRequireTile:o,tileBandOnly:e,tileBandPad:f}}}else a1={...a1??{},samPatch:{applied:!1,reason:"fn_too_small",fnSource:l,fnCoverage:Number(n.toFixed(4)),fnPixels:k,tileDilatePx:p,patchRequireTile:o}};a6?.originMeta&&(a6.originMeta=a1)}else a1={...a1??{},samPatch:{applied:!1,reason:"size_mismatch"}}}if(a_&&aR&&!K&&!O)try{let a=(process.env.OCCLUDER_DEPTH_RESCUE??"1")!=="0",b=M.length>0&&M.every(a=>"larger_than_base"===a),c=Math.max(0,Number(process.env.OCCLUDER_DEPTH_RESCUE_MIN_COVERAGE??"0.05")),d=Math.min(1,Number(process.env.OCCLUDER_DEPTH_RESCUE_MAX_COVERAGE??"0.4")),e=null!=t&&t>=c&&t<=d;if(a&&b&&e){let a=bl??aR.width,b=bm??aR.height,c=aR.width!==a||aR.height!==b?await $(aR,a,b):aR,d=Math.max(0,Number(process.env.OCCLUDER_DEPTH_RESCUE_BAND??"6")),e=Math.max(0,Number(process.env.OCCLUDER_DEPTH_RESCUE_ERODE??"1")),f=Math.max(0,Number(process.env.OCCLUDER_DEPTH_RESCUE_ADJ??"8")),g=f>0?Z(a_,a,b,f):a_,h=bv&&q?Z(bv,a,b,d):null,i=h?(0,x.m2)(h,g):g,j=e>0?Y(c.data,a,b,e):c.data,k=Math.max(200,Number(process.env.OCCLUDER_DEPTH_RESCUE_MIN_AREA??"1200")),l=(0,w.um)(j,a,b,k),n=new Uint8Array(a_),o=0,p=0,r=Math.min(n.length,i.length);for(let a of l){let b=!1;for(let c of a.pixels)if(c<r&&i[c]){b=!0;break}if(b)for(let b of(p+=1,a.pixels))b<r&&!n[b]&&(n[b]=255,o+=1)}o>0&&(a_=n,a1={...a1??{},depthRescue:{pixels:o,coverage:Number((o/n.length).toFixed(6)),bandPx:d,erodePx:e,adjPx:f,minArea:k,components:p}},m&&console.info("[mask] depth rescue merged",{pixels:o,coverage:Number((o/n.length).toFixed(6)),components:p}))}}catch(a){m&&console.warn("[mask] depth rescue failed",a)}}let bz=null,bA=null;a_&&(a0||(a0="segmentation"),a2=function(a){let b=a.length;if(0===b)return{changed:!1,coverage:0,gamma:1,lo:0,hi:0};let c=new Uint32Array(256),d=0;for(let e=0;e<b;e++){let b=a[e];c[b]+=1,b>0&&(d+=1)}if(d<32)return{changed:!1,coverage:d/b,gamma:1,lo:0,hi:0};let e=d/b;if(e>.6)return{changed:!1,coverage:e,gamma:1,lo:0,hi:0};let f=a=>{if(!Number.isFinite(a))return 0;let b=Math.max(0,Math.min(d-1,Math.round(a*(d-1)))),e=0;for(let a=1;a<c.length;a++){let d=c[a];if(0!==d&&(e+=d)>b)return a}return 255},g=f(e<.05?.02:.08),h=f(e<.03?.995:.97),i=Math.min(255,Math.max(g+8,h));if(!Number.isFinite(g)||!Number.isFinite(i)||i<=g)return{changed:!1,coverage:e,gamma:1,lo:g,hi:i};let j=e<.03?.52:e<.08?.6:e<.18?.68:.75,k=i-g,l=k>0?1/k:0,m=!1;for(let c=0;c<b;c++){let b=a[c];if(b<=g){0!==b&&(a[c]=0,m=!0);continue}if(b>=i){255!==b&&(a[c]=255,m=!0);continue}let d=(b-g)*l,e=Math.pow(Math.max(0,Math.min(1,d)),j),f=Math.max(0,Math.min(255,Math.round(255*e)));a[c]!==f&&(a[c]=f,m=!0)}return{changed:m,coverage:e,gamma:j,lo:g,hi:i}}(a_),m&&a2?.changed&&console.info("[mask] boosted",{coverage:a2.coverage.toFixed(4),gamma:a2.gamma,lo:a2.lo,hi:a2.hi}),!a1&&a2&&(a1={boostCoverage:Number(a2.coverage.toFixed(4)),gamma:a2.gamma,lo:a2.lo,hi:a2.hi}),a5=a_,bz=Uint8Array.from(a_),bu&&(a1={...a1??{},samPrompted:bu}));let bB=null;if(a5&&aJ.width&&aJ.height)try{let a=aJ.width,b=aJ.height,c=new Uint8Array(await g()(aI).removeAlpha().toColorspace("b-w").raw().toBuffer());bh=c,bl=a,bm=b;let e=R(a5);bB=Number(e.toFixed(6)),a1&&(a1={...a1,segCoverage:Number(e.toFixed(4))}),Number.isFinite(e)&&e>=.02&&e<=.7&&(d={invertMode:"false",removeBorder:!1,thinWidth:0,fallbackLow:.002}),(a0&&a0.includes("sam")||a1&&a1.sam)&&(d={...d??{},invertMode:"false",thresholdMode:"fixed",thresholdValue:1,removeBorder:!1,thinWidth:0,minArea:1,keepLargest:0,gridKill:"off",edgeFill:{enabled:!1,threshold:0,dilate:0},edgeGuard:{enabled:!1,threshold:0,dilate:0},seedGrow:0,carveRadius:0,morphOps:[],bgMode:"classic",fallbackLow:0,fallbackHigh:1});let f=(0,t.JD)({mask:a5,width:a,height:b,gray:c,preset:aq,overrides:d}),h=f,i=f.result.interiorCoverage??0,j=f.result.leakPct??f.result.leakAfter??1,k=f.result.coverage??0;if(at>0&&k<at&&i<.85&&!(i>=.9&&j<=.1)&&"tiles-detail"!==f.preset){let e=(0,t.JD)({mask:a5,width:a,height:b,gray:c,preset:"tiles-detail",overrides:d});e.result.coverage>f.result.coverage+.005&&(h=e)}if(a3=h.preset,a5=a4=Uint8Array.from(h.result.data),bn=f,bo=h,a4&&bl&&bm){let a=function(a,b,c,d,e){if(!e)return null;let f=e?.yolo,g=Array.isArray(f?.instances)?f.instances:null;if(!g||0===g.length)return null;let h=c*d,i=new Uint8Array(h),j=0,k=Math.max(3,Math.round(.004*Math.max(c,d)));for(let a of g){let b=Array.isArray(a?.bbox)?a.bbox:Array.isArray(a?.box)?a.box:null;if(!b||b.length<4)continue;let e=b.map(a=>Number(a)).filter(a=>Number.isFinite(a));if(e.length<4)continue;let[f,g,h,l]=e,m=D(Math.floor(Math.min(f,h))-k,0,c-1),n=D(Math.ceil(Math.max(f,h))+k,0,c-1),o=D(Math.floor(Math.min(g,l))-k,0,d-1),p=D(Math.ceil(Math.max(g,l))+k,0,d-1);if(!(n<=m)&&!(p<=o)){j+=1;for(let a=o;a<=p;a++){let b=a*c;for(let a=m;a<=n;a++)i[b+a]=255}}}if(0===j)return null;let l=i;if(b&&b.length===h){let a=(0,v.uc)(b,112);a&&(l=(0,x.M)(l,a))}l=Z(l,c,d,1);let m=(0,x.m2)(a,l);if(!m)return null;let n=R(m);return{mask:m,coverage:n,applied:j}}(a4,a_??null,bl,bm,a1);a&&(a5=a4=a.mask,a1={...a1??{},yoloBoost:{applied:a.applied,coverage:Number(a.coverage.toFixed(6))}},bo?.result&&(bo.result.data=Uint8Array.from(a4),bo.result.coverage=a.coverage,bo.result.stats?.background&&(bo.result.stats.background.occluderCoverage=a.coverage),bo.result.stats?.hybrid&&(bo.result.stats.hybrid.seedCoverage=a.coverage)))}bp=Uint8Array.from(a4),bq=R(a4);let l=h.result.stats,m=l.background??null;if(a4&&bl&&bm){let a=R(a4),b=l.hybrid?.std??l.hybrid?.localStdThresh??0;a<.22&&b>0&&b<25&&(a5=a4=Z(a4,bl,bm,1),bp=Uint8Array.from(a4),bq=R(a4))}bb=a4?R(a4):h.result.coverage,bc=m?.coverage??null,bd=m?.occluderCoverage??null,be=l.hybrid?.seedCoverage??null}catch(a){m&&console.warn("[mask] normalization failed",a)}if(bz&&aJ.width&&aJ.height){let a=await ae(bz,aJ.width,aJ.height);a7=a.dataUrl,bA=a.diagnostics,(!bf||O)&&(bf=a7,bg={polarity:"white",source:a0??void 0,stats:a1??void 0})}let bC=g()(aI).removeAlpha();if(Math.max(aK,aL)>1200){let a=1200/Math.max(aK,aL);aK=Math.max(1,Math.round((aJ.width??aK)*a)),aL=Math.max(1,Math.round((aJ.height??aL)*a)),bC=bC.resize(aK,aL,{fit:"inside"})}let bD=null;if(n&&(a5||a_)){let a=a5??a_,b=await g()(Buffer.from(a),{raw:{width:aJ.width,height:aJ.height,channels:1}}).resize(aK,aL,{kernel:"lanczos3"}).blur(ao).toColorspace("b-w").raw().toBuffer(),c=new Uint8Array(b);bD=new Float32Array(aK*aL);for(let a=0;a<c.length;a++){let b=c[a]/255;bD[a]=1-an*b}}let bE=await bC.raw().ensureAlpha().toBuffer({resolveWithObject:!0}),bF=bE.info.width,bG=bE.info.height,bH=function(a,b,c){let d=new Float32Array(b*c);for(let b=0,c=0;b<a.length;b+=4,c++)d[c]=.299*a[b]+.587*a[b+1]+.114*a[b+2];return d}(bE.data,bF,bG),bI=function(a,b,c){let d=new Float32Array(b*c),e=[-1,0,1,-2,0,2,-1,0,1],f=[-1,-2,-1,0,0,0,1,2,1];for(let g=1;g<c-1;g++)for(let c=1;c<b-1;c++){let h=0,i=0,j=0;for(let d=-1;d<=1;d++)for(let k=-1;k<=1;k++,j++){let l=a[(g+d)*b+(c+k)];h+=e[j]*l,i+=f[j]*l}d[g*b+c]=Math.hypot(h,i)}return d}(bH,bF,bG),bJ=function(a,b,c,d){let e=new Float32Array(c);if(b)for(let f=0;f<c;f++){let g=0;for(let e=0;e<d;e++)g+=a[e*c+f]*b[e*c+f];e[f]=g}else for(let b=0;b<c;b++){let f=0;for(let e=0;e<d;e++)f+=a[e*c+b];e[b]=f}return e}(bI,bD,bF,bG),bK=function(a,b,c,d){let e=new Float32Array(d);if(b)for(let f=0;f<d;f++){let d=0;for(let e=0;e<c;e++)d+=a[f*c+e]*b[f*c+e];e[f]=d}else for(let b=0;b<d;b++){let d=0;for(let e=0;e<c;e++)d+=a[b*c+e];e[b]=d}return e}(bI,bD,bF,bG),bL=E(bJ.slice()),bM=E(bK.slice()),bN=J(bL,Math.max(12,Math.floor(bF/100)),Math.max(24,Math.floor(bF/3))),bO=J(bM,Math.max(12,Math.floor(bG/100)),Math.max(24,Math.floor(bG/3))),bP=K(bJ,bN),bQ=K(bK,bO),bR=Math.max(1,Math.round((bN+bO)/2*.025)),bS=[];for(let a=bP;a<bF;a+=bN||bF)bS.push(a);let bT=[];for(let a=bQ;a<bG;a+=bO||bG)bT.push(a);let bU=(aJ.width??bF)/bF,bV=(aJ.height??bG)/bG,bW=aJ.width??bF,bX=aJ.height??bG,bY=(a,b,c)=>{let d=new Set,e=Math.max(0,c-1);for(let c of a){let a=D(Math.round(c*b),0,e);d.add(a)}return Array.from(d).sort((a,b)=>a-b)},bZ=Math.round(bN*bU),b$=Math.round(bO*bV),b_=Math.round(bR*Math.sqrt(bU*bV)),b0=bY(bS,bU,bW),b1=bY(bT,bV,bX),b2=(a,b)=>{if(a&&a>0)return a;let c=b.filter(a=>Number.isFinite(a)).sort((a,b)=>a-b),d=(a=>{if(!a.length)return 0;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2==0?(b[c-1]+b[c])/2:b[c]})((a=>{let b=[];for(let c=1;c<a.length;c++)b.push(a[c]-a[c-1]);return b})(c));return d>0?d:0},b3=(a,b,c,d)=>{let e=b2(a,c),f=b2(b,d),g=e>0&&bW>0?Math.max(1,Math.floor(bW/e)+1):c.length||1,h=f>0&&bX>0?Math.max(1,Math.floor(bX/f)+1):d.length||1,i=Math.min(1,g?c.length/g:0),j=Math.min(1,h?d.length/h:0);return{Tv:e,Th:f,coverage:Math.min(i,j)}},b4=b3(bZ,b$,b0,b1).coverage,b5=(0,o.d)(bH,bF,bG,{debug:m,weights:bD??null}),b6=null;if(b5.ok){let a=bY(b5.vlines,bU,bW),b=bY(b5.hlines,bV,bX),c=Math.max(1,Math.round(b5.tile_w_px*bU)),d=Math.max(1,Math.round(b5.tile_h_px*bV)),e=Math.max(1,Math.round(b5.grout_px*Math.sqrt(bU*bV))),f=b3(c,d,a,b).coverage;b6={tile_w_px:c,tile_h_px:d,grout_px:e,gridV:a,gridH:b,coverage:f,confidence:b5.confidence??0,source:b5.source??"cv@fft-hough",raw:b5},m&&console.log("periodic-analysis",{tile_w_px:c,tile_h_px:d,grout_px:e,coverage:f,confidence:b6.confidence})}let b7=(a,b,c,d,e,f)=>{let g,h=[...d],i=[...e],j={mode:"off",coverage:f};if((ak||al&&f<.6)&&bW>0&&bX>0)try{let a=(0,p.U)(bW,bX,h,i),b=a.meta?.v?.conf??0,c=a.meta?.h?.conf??0;ak||b>=.5&&c>=.5?(h=a.vlines,i=a.hlines,g=a.meta,j={mode:ak?"force":"auto",coverage:f,...a.meta}):j={mode:"auto-skip",coverage:f,...a.meta}}catch(b){m&&console.warn(`RANSAC ${a} failed:`,b),j={mode:ak?"force-error":"auto-error",coverage:f}}let k=b3(b,c,h,i);return j={...j,coverage:k.coverage},{vlines:h,hlines:i,meta:g,info:j,coverage:k.coverage}},b8=b7("projection",bZ,b$,b0,b1,b4);b0=b8.vlines,b1=b8.hlines;let b9={label:"projection",tile_w_px:bZ,tile_h_px:b$,grout_px:b_,grid:{vlines:b0,hlines:b1},coverage:b8.coverage,confidence:null,source:`${n&&a_?"seg@u2net -> weighted sobel+projection":"sobel+projection"}${b8.meta?" + ransac1d":""}`,ransac:b8.info,ransacMeta:b8.meta},ca=null;if(b6){let a=b7("periodic",b6.tile_w_px,b6.tile_h_px,b6.gridV,b6.gridH,b6.coverage);ca={label:"periodic",tile_w_px:b6.tile_w_px,tile_h_px:b6.tile_h_px,grout_px:b6.grout_px,grid:{vlines:a.vlines,hlines:a.hlines},coverage:a.coverage,confidence:b6.confidence??null,source:`${b6.source}${a.meta?" + ransac1d":""}`,ransac:a.info,ransacMeta:a.meta}}let cb=b9,cc="projection";if(ca){let a=ca.coverage-b9.coverage,b=ca.confidence??0,c=b9.coverage<.45;(ca.coverage>=.6&&b>=.35&&a>.12||b>=.55&&a>.05||c&&a>.05)&&(cb=ca,cc="periodic")}let cd={method:cc,candidates:{projection:{tile_w_px:b9.tile_w_px,tile_h_px:b9.tile_h_px,grout_px:b9.grout_px,coverage:b9.coverage,confidence:b9.confidence,source:b9.source,ransac:b9.ransac},...ca?{periodic:{tile_w_px:ca.tile_w_px,tile_h_px:ca.tile_h_px,grout_px:ca.grout_px,coverage:ca.coverage,confidence:ca.confidence,source:ca.source,ransac:ca.ransac}}:{}}},ce=cb.tile_w_px,cf=cb.tile_h_px,cg=cb.grout_px,ch=cb.grid,ci=cb.source,cj=cb.ransac;if(a4&&a3&&bh&&bo&&bo.result?.stats){let a,b;bi=ch.vlines.length||ch.hlines.length?{width:bl??aJ.width??bh.length,height:bm??aJ.height??bh.length,vlines:ch.vlines,hlines:ch.hlines,groutPx:cg??0,tileWidthPx:ce??0,tileHeightPx:cf??0}:null;let c=(0,u.c)({normalizedMask:a4,normalizedCoverage:bq??bb??0,stats:bo.result.stats,intensity:bh,width:bl??aJ.width??bh.length,height:bm??aJ.height??bh.length,grid:bi??void 0,preset:a3,u2BoostMask:a_?(0,v.uc)(a_,230)??void 0:void 0,flags:az});f=Array.isArray(c.debug?.coverage?.warnings)?c.debug.coverage.warnings.filter(a=>"string"==typeof a):void 0;let e=Uint8Array.from(c.mask),g=c.coverage??0,h=c.leak??0,i=c.interiorCoverage??0,j=bq??bb??g,k=i,l=Uint8Array.from(c.mask),m=0,n=a_&&bi?(0,v.uc)(a_,150):null;n&&bl&&bm&&null!=bd&&bd>.25&&(n=Z(n,bl,bm,1));let o=n?R(n):0;if(n&&bi&&bl&&bm){let a=(0,w.Jl)(c.mask,n,bl,bm,.08,400);if(R(a)<.75*j)for(let b=0;b<a.length;b++)n[b]&&(a[b]=255);if(l=(0,w.NO)(a,a_,bl,bm,bi.vlines,bi.hlines,bi.groutPx,148),R(l)<.6*o)for(let a=0;a<l.length;a++)n[a]&&(l[a]=255)}let p=bi&&bl&&bm?ab(bl,bm,bi.vlines,bi.hlines,bi.groutPx):null,q=bi&&bl&&bm?ab(bl,bm,bi.vlines,bi.hlines,Math.max(1,Math.round((bi.groutPx??3)/2))).lineMask:null,r=null,s=null,t=null,x=p?ac(l,p.lineMask):h,y=R(l);if(k=p?S(l,p.interiorMask):i,x>.09&&a_&&bi&&bl&&bm){let a=Math.max(3,(bi.groutPx??3)+1),b=Uint8Array.from(l),d=(0,w.NO)(b,a_,bl,bm,bi.vlines,bi.hlines,a,168),e=p?.lineMask??null;if(e)for(let a=0;a<d.length;a++)e[a]&&(d[a]=0);let f=e?Z(e,bl,bm,1):null,g=null;if(f){let c=new Uint8Array(d.length),h=0;for(let a=0;a<d.length;a++)b[a]&&!d[a]&&f[a]&&(c[a]=255,h+=1);if(h>0){g={lostPixels:h,restoredPixels:0,lostComponents:0,restoredComponents:0,samples:[]};let b=(0,w.Bv)(bl,bm,bi.vlines,bi.hlines,a),f=Uint8Array.from(d),i=(0,w.um)(c,bl,bm,24);for(let a of(g.lostComponents=i.length,i)){let c=a.area;if(c<32)continue;let h=P(a),i=N(a),j=Q(a,bl),k=Math.max(180,Math.round(.18*bl)),l=h>2.2&&i>=k&&j<.6,m=L(a,q),o=M(a,q),p=0,r=0,s=0,t=!1;for(let c of a.pixels)if(p+=b[c],a_[c]>=200&&(r+=1),n&&n[c]&&(s+=1),!t){let a=c%bl,b=c/bl|0;(a>0&&f[c-1]||a+1<bl&&f[c+1]||b>0&&f[c-bl]||b+1<bm&&f[c+bl])&&(t=!0)}let u=p/c,v=r/c,w=s/Math.max(1,c),x=v>=.45||w>=.45;if(m&&u<.4||m&&u<.9&&!x||o>.05)continue;let y=l?380:140;if(c<y&&!x)continue;let z=!1;if(t&&u>=1&&(z=!0),!z&&v>=.3&&c>=150&&u>=.8&&(z=!0),!z&&w>=.25&&c>=150&&u>=.8&&(z=!0),!z&&(v>=.55||w>=.55)&&u>=.6&&(z=!0),!z&&x&&c>=800&&o<=.04&&(z=!0),g&&g.samples.length<25&&g.samples.push({area:c,meanDist:Number(u.toFixed(3)),detFrac:Number(v.toFixed(3)),seedFrac:Number(w.toFixed(3)),touchesSafe:t,restored:z}),z){for(let c of a.pixels){let a=n&&n[c],f=a_[c]>=215||a;(!(b[c]<1)||f)&&(!e||0===e[c]||f)&&(f||!(b[c]<2))&&(d[c]=255)}g&&(g.restoredComponents+=1,g.restoredPixels+=c)}}}}if(n&&a_)for(let a=0;a<d.length;a++){if(!n[a])continue;let b=a_[a]>=210;e&&e[a]&&!b||(d[a]=255)}let h=R(d),i=p?ac(d,p.lineMask):x,j=p?S(d,p.interiorMask):k,m=Math.min(.08,x-.01);i<=m&&h>=.6*y&&(l=d,y=h,x=i,k=j,r=i,g&&(c.debug?.leakClamp&&"object"==typeof c.debug.leakClamp?c.debug.leakClamp.occluder=g:c.debug.leakClamp={enabled:!0,...g}))}if(a_&&bi&&bl&&bm&&p){let a=Math.max(3,(bi.groutPx??3)+1),b=Z(p.lineMask,bl,bm,1),c=new Uint8Array(l.length),d=0;for(let a=0;a<l.length;a++)e[a]&&!l[a]&&b[a]&&(c[a]=255,d+=1);if(d>0){let b=(0,w.Bv)(bl,bm,bi.vlines,bi.hlines,a),d=Uint8Array.from(l),e=(0,w.um)(c,bl,bm,24),f=Uint8Array.from(l),g=new Uint8Array(l);for(let a of e){let c=a.area;if(c<120)continue;let e=P(a),f=N(a),h=Q(a,bl),i=Math.max(160,Math.round(.16*bl)),j=e>2.2&&f>=i&&h<.55,k=L(a,q),l=M(a,q),m=0,o=0,r=0,s=!1;for(let c of a.pixels)if(m+=b[c],a_[c]>=200&&(o+=1),n&&n[c]&&(r+=1),!s){let a=c%bl,b=c/bl|0;(a>0&&d[c-1]||a+1<bl&&d[c+1]||b>0&&d[c-bl]||b+1<bm&&d[c+bl])&&(s=!0)}let t=m/c,u=o/Math.max(1,c),v=r/Math.max(1,c),w=u>=.5||v>=.5;if(k&&t<.45||k&&t<.9&&!w||l>.05)continue;let x=!1,y=j?420:180;if((!(c<y)||w)&&(v>=.3&&t>=.85&&(x=!0),!x&&u>=.24&&c>=170&&t>=.85&&(x=!0),!x&&s&&t>=1.2&&(x=!0),!x&&w&&t>=.9&&(x=!0),!x&&w&&c>=800&&l<=.04&&(x=!0),x))for(let c of a.pixels){let a=n&&n[c],d=a_[c]>=215||a,e=0!==p.lineMask[c];(!(b[c]<.5)||d)&&(!e||d)&&(d||!(a_[c]<200))&&(g[c]=255)}}let h=y,i=x,j=k;l=g,y=R(l),x=ac(l,p.lineMask),k=S(l,p.interiorMask);let m=Math.min(.09,i+.015);x>m?(l=f,y=h,x=i,k=j):s=x}}if(n&&a_&&bi&&bl&&bm){let a=p?.lineMask??null,b=(0,w.Bv)(bl,bm,bi.vlines,bi.hlines,Math.max(3,(bi.groutPx??3)+1)),c=Uint8Array.from(l),d=y,e=x,f=k,g=!1;for(let c=0;c<l.length;c++){if(!n[c]||l[c])continue;let d=a_[c]>=230,e=b[c]>=.8;(d||e)&&(a&&a[c]&&!d||(l[c]=255,g=!0))}if(g&&p){y=R(l),x=ac(l,p.lineMask),k=S(l,p.interiorMask);let a=Math.min(.12,e+.03);x>a&&(l=c,y=d,x=e,k=f),t=x}}if(a_&&bi&&p&&bl&&bm){let a=Math.max(2,Math.round(Math.max(1,(bi.groutPx??3)*.5))),b=(0,w.NO)(Uint8Array.from(l),a_,bl,bm,bi.vlines,bi.hlines,a,168),c=p.lineMask;if(c)for(let a=0;a<b.length;a++){if(!c[a])continue;let d=!!a_&&a_[a]>=220,e=!!n&&!!n[a];d||e||(b[a]=0)}if(n)for(let a=0;a<b.length;a++)n[a]&&(c&&c[a]&&a_&&a_[a]<200||(b[a]=255));let d=ac(b,p.lineMask),e=R(b),f=S(b,p.interiorMask),g=Math.min(x,.12);d<=g&&e>=.6*y&&(l=b,y=e,x=d,k=f,t=d)}let z=n&&bl&&bm?Z(n,bl,bm,2):null;if(n&&p?.lineMask&&bl&&bm){let a=p.lineMask,b=!1;for(let c=0;c<l.length;c++)l[c]&&a[c]&&(z&&z[c]||(l[c]=0,b=!0));b&&(y=R(l),x=ac(l,p.lineMask),k=S(l,p.interiorMask),t=x)}if(bp&&p?.lineMask&&bl&&bm){let a=Uint8Array.from(l),b=p.lineMask,d=!1;for(let c=0;c<a.length;c++)if(!a[c]&&bp[c]){if(b[c]){if(z&&z[c]);else if(!a_||a_[c]<210)continue}a[c]=255,d=!0}if(d){let b=R(a),d=ac(a,p.lineMask),e=S(a,p.interiorMask),f=j-b;d<=.14||d<=.16&&f>=.08?(l=a,y=b,x=d,k=e,t=d,c.debug?.leakClamp&&"object"==typeof c.debug.leakClamp&&(c.debug.leakClamp.unionApplied={coverage:Number(b.toFixed(6)),leak:Number(d.toFixed(6)),interior:Number(e.toFixed(6)),drop:Number(f.toFixed(6))})):c.debug?.leakClamp&&"object"==typeof c.debug.leakClamp&&(c.debug.leakClamp.unionRejected={coverage:Number(b.toFixed(6)),leak:Number(d.toFixed(6)),interior:Number(e.toFixed(6)),drop:Number(f.toFixed(6))})}}if(bp&&p&&bl&&bm){let a=new Uint8Array(l.length),b=0;for(let c=0;c<l.length;c++)!l[c]&&bp[c]&&(a[c]=255,b+=1);if(b>0){let b=(0,w.Bv)(bl,bm,bi?.vlines??[],bi?.hlines??[],Math.max(3,(bi?.groutPx??3)+1)),d=(0,w.um)(a,bl,bm,64),e=p.lineMask,f=[],g=0;for(let a of d){let c=a.area;if(c<80)continue;let d=0,h=0,i=0,j=0;for(let c of a.pixels)d+=b[c],e[c]&&(h+=1),z&&z[c]&&(i+=1),a_&&a_[c]>=210&&(j+=1);let m=d/c,n=h/c,o=i/c,q=j/c;if(n>.5&&o<.25&&q<.6)continue;let r=o>=.6,s=q>=.8&&m>=(bi?.groutPx??3)*2;if(!r&&!s)continue;let u=Uint8Array.from(l),v=!1;for(let b of a.pixels)!u[b]&&(!e[b]||z&&z[b]||a_&&a_[b]>=220)&&(u[b]=255,v=!0);if(!v)continue;let w=R(u),A=ac(u,p.lineMask),B=S(u,p.interiorMask);if(A<=.14){let a=w-y;if(a>0&&g+a>.06)continue;l=u,y=w,x=A,k=B,t=A,g+=Math.max(0,a),f.push({area:c,meanDist:Number(m.toFixed(3)),lineFrac:Number(n.toFixed(3)),seedFrac:Number(o.toFixed(3)),probFrac:Number(q.toFixed(3)),coverage:Number(w.toFixed(6)),leak:Number(A.toFixed(6))})}}f.length&&c.debug?.leakClamp&&"object"==typeof c.debug.leakClamp&&(c.debug.leakClamp.normalizedReinject=f)}}if(null==t&&(t=x),e&&p&&a_&&n&&m>=.95&&y<.22){let a=Uint8Array.from(e);if(p.lineMask){let b=p.lineMask;for(let c=0;c<a.length;c++)b[c]&&(a_[c]>=208||n[c]||(a[c]=0))}for(let b=0;b<a.length;b++)n[b]&&(a[b]=255);let b=ac(a,p.lineMask),c=R(a),d=S(a,p.interiorMask);b<=Math.min(.16,t+.02)&&c>=.9*y&&(l=a,y=c,x=b,k=d,t=b)}if((x=t)>.12&&a_&&bi&&p&&bl&&bm){let a=(0,w.NO)(Uint8Array.from(l),a_,bl,bm,bi.vlines,bi.hlines,Math.max(2,(bi.groutPx??3)+1),172),b=p.lineMask;if(b)for(let c=0;c<a.length;c++)b[c]&&(a[c]=0);if(n)for(let b=0;b<a.length;b++)n[b]&&(a[b]=255);let c=ac(a,p.lineMask);c<=Math.min(x,.12)&&(l=a,y=R(l),x=c,k=S(l,p.interiorMask),t=c)}let A=j-y>.08,B=x<=.08;c.debug?.coverage&&(c.debug.coverage.after=Number(y.toFixed(6)),c.debug.coverage.leak=Number(t.toFixed(6)),Array.isArray(c.debug.coverage.warnings)&&x<=.08&&(c.debug.coverage.warnings=c.debug.coverage.warnings.filter(a=>"leak_warn"!==a))),c.debug||(c.debug={}),c.debug.leakClamp&&"object"==typeof c.debug.leakClamp||(c.debug.leakClamp={enabled:!0});let C=c.debug.leakClamp;if(null!=r&&(C.leakAfterClamp1=Number(r.toFixed(6))),null!=s&&(C.leakAfterReinject=Number(s.toFixed(6))),C.leakAfterFinal=Number(t.toFixed(6)),C.leakAfter=Number(t.toFixed(6)),x<=.08&&f&&f.length&&(f=f.filter(a=>"leak_warn"!==a)),A&&B&&i>=.88&&a_&&bi&&bl&&bm){let b=(0,w.NO)(Uint8Array.from(e),a_,bl,bm,bi.vlines,bi.hlines,bi.groutPx,148);if(n)for(let a=0;a<b.length;a++)n[a]&&(b[a]=255);let c=p??ab(bl,bm,bi.vlines,bi.hlines,bi.groutPx),d=R(b),f=ac(b,c.lineMask),g=S(b,c.interiorMask);d>y&&f<=.08&&(l=b,y=d,x=f,k=g,a="soft-detail")}m=n?(0,w._7)(l,n):0;let E=i>=.85&&m>=.9,F=j-y>=.08,G=x<=.08;if(E){let a=j-y;b=x<=.09||x<=.14&&a>=.08}else b=x<=.06||x<=.09&&k>=.8;let H=E?y>j+.25:y>j+.15,I=Math.max(.16,.45*o);m>=.98&&k>=.18&&(I=Math.min(I,.12));let J=Number.isFinite(j)?.35*j:0,K=E?Math.min(I,.1+.05*o):I,O=y<Math.max(J,K);k>=.9&&x<=(E?.12:.05)&&(O=!1),E&&F&&G&&(O=!1),m>=.97&&y>=.12&&(O=!1);let T=!Number.isFinite(y)||l.length!==(a4?.length??0),U=(process.env.OCCLUDER_PIPELINE_FALLBACK_MODE??"strict").trim().toLowerCase(),V="off"===U||"disabled"===U||"none"===U,W=b&&!H&&!O&&!T,X=a1?.samPatch,Y=!!X?.applied,$=(process.env.OCCLUDER_SAM_PATCH_FORCE_ACCEPT??"1")!=="0",_=D(Number(process.env.OCCLUDER_SAM_PATCH_FORCE_MAX_COVERAGE??"0.35"),.05,1),aa=$&&Y&&!T&&y<=_&&y>=Math.max(.06,J),ad="soft-detail"===a&&G||E&&F&&G&&!H&&!T||aa;!W&&ad&&(l=Uint8Array.from(e),y=g,x=h,k=i,O=!1,H=!1,b=!0,W=!0,a||(a=aa?"sam-patch-force":"occluder-relaxed")),!W&&V&&!T&&(l=Uint8Array.from(e),y=g,x=h,k=i,O=!1,H=!1,b=!0,W=!0,a||(a="fallback-disabled"));let ae={coverageBefore:Number(j.toFixed(4)),coverageAfter:Number(y.toFixed(4)),coverageDelta:Number((y-j).toFixed(4)),interiorAfter:Number(k.toFixed(4)),leakBefore:Number(h.toFixed(6)),leakAfter:Number(x.toFixed(6)),seedOverlap:Number(m.toFixed(4)),allowRelaxed:E,fallbackMode:U,leakOk:b,coverageTooHigh:H,coverageTooLow:O,invalidMask:T};if((a&&(ae.override=a),c.debug.acceptance=ae,W?(a4=l,bb=y,bj=x,bk=k,c.debug.fallback={reason:{leakTooHigh:!1,coverageTooHigh:!1,coverageTooLow:!1,invalidMask:!1},usedOriginal:!1,originalCoverage:j,pipelineCoverage:y,leakPct:x}):(a4=bp??a4,bb=bq??bb,bj=x,bk=k,c.debug.fallback={reason:{leakTooHigh:!b,coverageTooHigh:H,coverageTooLow:O,invalidMask:T},usedOriginal:!0,originalCoverage:j,pipelineCoverage:y,leakPct:x}),n&&a4&&o>0)&&R(a4)<.6*o){for(let a=0;a<a4.length;a++)n[a]&&(a4[a]=255);bb=R(a4)}a6={preset:a3,requestedPreset:aq,fallbackApplied:bo.preset!==(bn?.preset??bo.preset),normalizedCoverage:bb,originalCoverage:bo.result.stats.originalCoverage,background:bo.result.stats.background??null,seedCoverage:bo.result.stats.hybrid?.seedCoverage??null,pipeline:c.debug,raw:bA??void 0,origin:a0??void 0,originMeta:a1??void 0,normalizeStats:bo.result.stats,normalizeOverrides:d??null,segCoverage:bB},null==a8&&bl&&bm&&(a8=await af(a4,bl,bm)),ar&&bl&&bm&&(a9=await aj(aI,a4,bl,bm),ba=await ai(aI,a4,bl,bm)),bf=a8,bg={polarity:"white",coverage:Number(bb.toFixed(3)),preset:a3,source:a0??void 0,stats:a1??void 0}}if(!bf&&a4&&bl&&bm&&(bf=a8=await af(a4,bl,bm),bg={polarity:"white",coverage:null!=bb?Number(bb.toFixed(3)):void 0,preset:a3??void 0,source:a0??void 0,stats:a1??void 0},ar&&(a9=await aj(aI,a4,bl,bm),ba=await ai(aI,a4,bl,bm))),!a6&&bo&&(a6={preset:a3,requestedPreset:aq,fallbackApplied:bo.preset!==(bn?.preset??bo.preset),normalizedCoverage:bb,originalCoverage:bo.result.stats.originalCoverage,background:bo.result.stats.background??null,seedCoverage:bo.result.stats.hybrid?.seedCoverage??null,pipeline:{flags:az},raw:bA??void 0,origin:a0??void 0,originMeta:a1??void 0}),bs?.tileBand&&(a6={...a6??{},tileBandDebug:{enabled:!0,yMin:bs.tileBand.yMin,yMax:bs.tileBand.yMax,confidence:bs.tileBand.confidence}}),aY&&(a6={...a6??{},depth:aY}),aM){let a=bz??a4??null,b=bl??aJ.width??aM.width,d=bm??aJ.height??aM.height,e=!!aR&&!O,f=e?aR?.data??null:a??null,i=e?aR?.width??b:b,j=e?aR?.height??d:d,k=e?"depth-anything-v2":a0??void 0,l=e?aU??bf??a8??null:bf??a8??null;if(e&&aR&&a&&b&&d){let c={data:a,width:b,height:d},e=await $(aR,c.width,c.height),g=_(c,e);f=g.data,i=g.width,j=g.height,k="depth+seg",ar&&(l=await af(g.data,g.width,g.height).catch(()=>l))}let n=aM.classes.map(a=>[String(a.id),a.color]),o=aa(aM.ids),p=(()=>{let a=aM.classes.map(a=>String(a.name).toLowerCase());return 2===a.length&&"background"===a[0]&&"tiles"===a[1]?{0:"background",1:"tiles",255:"ignore"}:{0:"background",1:"grout",2:"tiles",255:"ignore"}})(),q="tiles"===p["1"]&&3===Object.keys(p).length?["background","grout","tiles"]:aM.classes.map(a=>a.name),r="tiles"===p["1"]&&3===Object.keys(p).length?{0:[0,0,0],1:[52,152,219],2:[46,204,113]}:Object.fromEntries(n);try{let a,{combineTileMaskWithOccluder:b}=await Promise.resolve().then(c.bind(c,93600)),d=aS?{data:aS.data,width:aS.width,height:aS.height}:null,e=h.searchParams.get("tile_band_override"),m=(()=>{if(!e)return null;let a=e.split(",").map(a=>Number(a));return 2===a.length&&a.every(a=>Number.isFinite(a)&&a>=0&&a<=1)?{yMinNorm:a[0],yMaxNorm:a[1]}:null})(),n=!!aS,s="1"===process.env.TILEMASK_V3,t="1"===process.env.TILEMASK_V2,u=async()=>{if(!t&&!s)return null;if(void 0!==a)return a;try{let b=await g()(aI).ensureAlpha().raw().toBuffer({resolveWithObject:!0});a={data:new Uint8Array(b.data),width:b.info.width,height:b.info.height,channels:b.info.channels}}catch{a=null}return a},v=async a=>{let c=await b(aM,a,{bandOverride:m,wallMask:d,enableDepthWallFill:n,grid:{vlines:ch.vlines,hlines:ch.hlines},tileMaskV3Enabled:s,tileMaskV2Enabled:t,sourceImageRgba:await u()});br=c.combined.dataUrl;let e=aa(c.combined.ids);return bs={classes:q,classIdLegend:{0:"background",1:"grout",2:"tiles",255:"ignore"},classIdLegendRaw:p,classPixelCountsRaw:o,classPixelCounts:e,colorMap:r,coverage:c.combined.coverage,coverageAbsolute:c.combined.coverageAbsolute,rawCoverage:aM.coverage,occluderCoverage:c.combined.occluderCoverage,occludedPixels:c.combined.occludedPixels,occluderPixels:c.combined.occluderPixels,occludedCoverage:c.combined.occludedCoverage,warnings:c.combined.warnings,unetDebug:aM.debug??null,model:ay,tileBand:c.combined.tileBand?{yMin:c.combined.tileBand.yMin,yMax:c.combined.tileBand.yMax,confidence:c.combined.tileBand.confidence}:null,tileMaskV3:c.combined.tileMaskV3??null,tileMaskV2:c.combined.tileMaskV2??null,source:c.combined.source},bt={combined:c.combined.dataUrl,raw:c.rawDataUrl,occluder:c.occluderDataUrl??a?.dataUrl??null},c},w=f&&i&&j?{data:f,width:i,height:j,dataUrl:l,source:k}:null,y=await v(w);if(ad&&O&&a_&&aR&&y.combined.tileBand){let a=D(Number(process.env.OCCLUDER_SAM_DEPTH_BAND_MAX_COVERAGE??"0.6"),.1,1),b=Math.max(0,Math.round(Number(process.env.OCCLUDER_TILE_BAND_DILATE??"6"))),c=y.combined.tileBand,d=aJ.width??aM?.width??bl??aR.width,e=aJ.height??aM?.height??bm??aR.height,f=!1;d&&e||(a1={...a1??{},depthBandUnion:{applied:!1,reason:"tile_band_missing_dims"}},a6?.originMeta&&(a6.originMeta=a1),f=!0);let g=f?0:D(Math.floor(c.yMin),0,e),h=f?0:D(Math.floor(c.yMax),0,e);if(!f&&h<=g&&(a1={...a1??{},depthBandUnion:{applied:!1,reason:"tile_band_invalid",bandSource:"tile_band_combined",band:{yMin:c.yMin,yMax:c.yMax,confidence:c.confidence}}},a6?.originMeta&&(a6.originMeta=a1),f=!0),!f){let f=new Uint8Array(d*e);for(let a=g;a<h;a++){let b=a*d;f.fill(255,b,b+d)}let i=b>0?Z(f,d,e,b):f,j=R(i);if(j<=a){let f=aR.width!==d||aR.height!==e?await $(aR,d,e):aR,g=(0,x.M)(f.data,i),h=bl&&bm&&(bl!==d||bm!==e)?await $({data:a_,width:bl,height:bm},d,e):{data:a_,width:d,height:e},k=R(h.data),l=(0,x.m2)(h.data,g),m=R(l);a_=l,bl=d,bm=e,bz=Uint8Array.from(a_),a1={...a1??{},depthBandUnion:{applied:!0,bandApplied:!0,bandDilate:b,bandCoverage:Number(j.toFixed(4)),bandMaxCoverage:Number(a.toFixed(3)),bandSource:"tile_band_combined",band:{yMin:c.yMin,yMax:c.yMax,confidence:c.confidence},coverageBefore:Number(k.toFixed(4)),coverageAfter:Number(m.toFixed(4))}},bl&&bm&&(bf=a7=await af(a_,bl,bm),bg={polarity:"white",source:a0??void 0,stats:a1??void 0});let n={data:a_,width:bl??bw,height:bm??bx,dataUrl:a7,source:a0??void 0};await v(n)}else a1={...a1??{},depthBandUnion:{applied:!1,reason:"band_too_large",bandCoverage:Number(j.toFixed(4)),bandMaxCoverage:Number(a.toFixed(3)),bandSource:"tile_band_combined",band:{yMin:c.yMin,yMax:c.yMax,confidence:c.confidence}}},a6?.originMeta&&(a6.originMeta=a1)}}}catch(a){m&&console.warn("[tile-seg] failed to combine tile mask with occluder",a),br=aM.dataUrl,bs={classes:aM.classes.map(a=>a.name),classIdLegend:{0:"background",1:"grout",2:"tiles",255:"ignore"},classIdLegendRaw:p,classPixelCountsRaw:o,classPixelCounts:o,colorMap:Object.fromEntries(n),coverage:aM.coverage,coverageAbsolute:aM.coverage,unetDebug:aM.debug??null,source:"unet_latest",model:ay},bt={combined:aM.dataUrl,raw:aM.dataUrl}}}cd.mask&&bo&&(cd.mask={original_coverage:Number(bo.result.stats.originalCoverage.toFixed(3)),coverage:null!=bb?Number(bb.toFixed(3)):0,threshold:Number((bo.result.threshold/255).toFixed(3)),inverted:bo.result.inverted,source:a0??void 0}),"unet_latest"===ay&&(f=void 0);let ck=bf,cl=bg;a6?.originMeta&&cl?.stats&&(a6.originMeta=cl.stats,cl.source&&(a6.origin=cl.source));let cm={ok:!0,image:{width:aJ.width,height:aJ.height},tile_w_px:ce,tile_h_px:cf,grout_px:cg,tile_w_mm:null,tile_h_mm:null,grout_mm:null,grid:{vlines:ch.vlines,hlines:ch.hlines},source:ci,tile_model:ay,ransac:cj,fg_mask:ck,...cl?{fg_mask_meta:cl}:{},...br?{tile_mask:br}:{},...bs?{tile_mask_meta:bs}:{},...bt?{tile_mask_versions:bt}:{},...a3?{mask_preset:a3}:{},...a6?{mask_debug:a6}:{},...aY?{depth_debug:aY}:{},...bs?.tileBand?{tile_band:{yMin:bs.tileBand.yMin,yMax:bs.tileBand.yMax,confidence:bs.tileBand.confidence}}:{},...a8||a7?{mask_versions:{normalized:a8,raw:a7,overlay:a9,cutout:ba}}:{},...null!==bb?{mask_metrics:{coverage:Number(bb.toFixed(3)),coverageNorm:Number(bb.toFixed(3)),coverageRaw:bA?Number(bA.coverageArray.toFixed(3)):null!=bq?Number(bq.toFixed(3)):void 0,backgroundCoverage:null!=bc?Number(bc.toFixed(3)):void 0,occluderCoverage:null!=bd?Number(bd.toFixed(3)):void 0,seedCoverage:null!=be?Number(be.toFixed(3)):void 0,preset:a3??void 0,source:a0??void 0,latticeLeak:bj??void 0,latticeLeakPct:null!=bj?Number((100*bj).toFixed(3)):void 0,latticeInteriorCoverage:null!=bk?Number(bk.toFixed(3)):void 0,warnings:f&&f.length?f:void 0,autotuneMs:az.autotuneMs,rawMismatch:bA?Number(bA.mismatch.toFixed(3)):void 0,rawSuspicious:bA?bA.suspicious:void 0}}:{},name:aD?.name,type:aD?.type};return e.NextResponse.json(cm)}catch(c){console.error("API /api/analyze fatal:",c);let a=c?.message||String(c),b=/width\/height invalid|missing file/i.test(a)?422:500;return e.NextResponse.json({ok:!1,error:a},{status:b})}finally{b?.()}}d()}catch(a){d(a)}})},42158:(a,b,c)=>{function d(a){if(!a.length)return 0;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2==0?.5*(b[c-1]+b[c]):b[c]}function e(a){var b;let c=[...new Set(a.lines.filter(b=>Number.isFinite(b)&&b>=0&&b<=a.extent))].sort((a,b)=>a-b);if(c.length<2)return{lines:c,T:0,a:c[0]??0,conf:0};let e=[];for(let a=0;a<c.length;a++)for(let b=a+1;b<Math.min(c.length,a+10);b++)e.push(c[b]-c[a]);let f=c.length>1?c[1]-c[0]:0,g=function(a,b=1,c=6,d=1024){let e=new Map;for(let f of a){if(!Number.isFinite(f)||f<c||f>d)continue;let a=Math.round(f/b)*b;e.set(a,(e.get(a)||0)+1)}let f=c,g=-1;for(let[a,b]of e)b>g&&(f=a,g=b);return f}(e,1,6,Math.max(12,Math.floor(a.extent/2)));(!Number.isFinite(g)||g<=0)&&(g=d(e)||f);let h=(b=g)<=0?0:d(c.map(a=>(a%b+b)%b)),i=function(a,b,c){let d=[];if(b<=0||c<=0)return d;let e=Math.floor((0-a)/b)-1;for(let f=0;f<1e4;f++){let f=a+e*b;if(f>c)break;if((f>=0&&d.push(Math.round(f)),e+=1,d.length>1)&&d[d.length-1]-d[d.length-2]>2*c)break}return Array.from(new Set(d)).sort((a,b)=>a-b)}(h,g,a.extent),j=Math.max(2,Math.round(.1*g)),k=0;for(let a of c)i.some(b=>Math.abs(b-a)<=j)&&(k+=1);return{lines:i,T:g,a:h,conf:c.length?k/c.length:0}}function f(a,b,c,d){let f=e({lines:c,extent:a}),g=e({lines:d,extent:b});return{vlines:f.lines,hlines:g.lines,meta:{v:{T:f.T,a:f.a,conf:f.conf},h:{T:g.T,a:g.a,conf:g.conf}}}}c.d(b,{U:()=>f})},44701:(a,b,c)=>{function d(a){if(!a||0===a.length)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]&&(b+=1);return b/a.length}function e(a){return Math.max(2,Math.min(6,Math.round(1.5*Math.max(1,Math.round(a.groutPx||1)))))}function f(a,b,c,d,e){let f=a*b,g=new Uint8Array(f),h=new Uint8Array(f),k=new Float32Array(f),l=new Int8Array(f);if(e<=0||!c.length&&!d.length)return g.fill(255),k.fill(1),l.fill(-1),{interiorMask:g,lineMask:h,weightMap:k,axisMap:l};let m=new Float32Array(a),n=new Float32Array(b);for(let b of(m.fill(1/0),n.fill(1/0),c)){let c=i(Math.round(b),a);for(let b=0;b<a;b++){let a=Math.abs(b-c);a<m[b]&&(m[b]=a)}}for(let a of d){let c=i(Math.round(a),b);for(let a=0;a<b;a++){let b=Math.abs(a-c);b<n[a]&&(n[a]=b)}}let o=Math.max(1,e),p=1/o;g.fill(255),l.fill(-1);for(let c=0;c<b;c++){let b=c*a,d=n[c];for(let c=0;c<a;c++){let a=b+c,e=m[c],f=Number.isFinite(e),i=Number.isFinite(d),n=1/0,q=-1;if(f&&i?e<=d?(n=e,q=0):(n=d,q=1):f?(n=e,q=0):i&&(n=d,q=1),!Number.isFinite(n)){k[a]=1;continue}let r=function(a,b,c){!1;let d=j((c-a)/(b-a));return d*d*(3-2*d)}(0,1,j(n*p));k[a]=r,n<=o&&(h[a]=255),r<=.35&&(g[a]=0),q>=0&&(l[a]=q)}}return{interiorMask:g,lineMask:h,weightMap:k,axisMap:l}}function g(a,b,c={}){let d=0,e=0,f=Math.min(a.length,b.length),h=c.weights,i=c.axisMap,k=c.gradX,l=c.gradY,m=c.angleThresholdRad??15*Math.PI/180,n=c.gradientThreshold??8;for(let c=0;c<f;c++){if(!b[c])continue;let f=h?j(1-h[c]):1;if(f<=0)continue;let g=f;if(a[c]){if(i&&k&&l&&i[c]>=0){var o,p;let a=k[c],b=l[c];Math.hypot(a,b)>=n&&Math.abs(Math.atan2(Math.sin((o=Math.atan2(b,a))-(p=0===i[c]?0:Math.PI/2)),Math.cos(o-p)))>m&&(g=0)}d+=g}e+=f}return e<=0?0:d/e}function h(a,b){if(!a||0===a.length)return null;let c=new Uint8Array(a.length);for(let d=0;d<a.length;d++)a[d]>=b&&(c[d]=255);return c}function i(a,b){return b<=0||a<0?0:a>=b?b-1:a}function j(a){return a<=0?0:a>=1?1:a}c.d(b,{Dt:()=>g,i6:()=>f,pE:()=>e,uX:()=>d,uc:()=>h})},57742:(a,b,c)=>{c.d(b,{c:()=>f});var d=c(67835),e=c(44701);function f(a){let b={preset:a.preset,flags:a.flags},c=Uint8Array.from(a.normalizedMask),f=a.intensity;if(a.flags.enableIllumination){let c=a.grid,e=Math.max(24,Math.round(.6*(c?Math.max(c.tileWidthPx,c.tileHeightPx):0)));f=function(a,b,c,e={}){let f=Math.max(0,Math.round(e.radius??32)),g=Math.max(0,Math.min(1,e.amount??.75));return 0===f||0===g?Uint8Array.from(a):(0,d.br)(a,b,c,f,g)}(f,a.width,a.height,{radius:e,amount:.75}),b.illumination={enabled:!0,radius:e,amount:.75}}else b.illumination={enabled:!1};let i=null,j=null,k=null,l=null,m=null,n=null,o=null,p=null,q=Math.max(0,Math.min(.5,a.flags.thinWidthFrac??.05)),r=Math.max(.05,Math.min(.8,a.flags.minAreaFrac??.3)),s=[],t=a.grid?Math.max(a.grid.tileWidthPx,a.grid.tileHeightPx):0;if(a.flags.enableLattice&&a.grid&&a.grid.vlines.length&&a.grid.hlines.length){let s=(0,e.pE)(a.grid),u=g(a.grid),{interiorMask:v,lineMask:w,weightMap:x,axisMap:y}=(0,e.i6)(a.width,a.height,a.grid.vlines,a.grid.hlines,s);if(k=x,l=y,m=w,n=v,j=(0,e.uX)(v),p=function(a,b,c){let d=a.length,e=new Float32Array(d),f=new Float32Array(d),g=[-1,0,1,-2,0,2,-1,0,1],h=[-1,-2,-1,0,0,0,1,2,1];for(let d=1;d<c-1;d++)for(let c=1;c<b-1;c++){let i=0,j=0,k=0;for(let e=-1;e<=1;e++){let f=d+e;for(let d=-1;d<=1;d++,k++){let e=a[f*b+(c+d)];i+=e*g[k],j+=e*h[k]}}let l=d*b+c;e[l]=i,f[l]=j}return{gx:e,gy:f}}(f,a.width,a.height),o={weights:k,axisMap:l??void 0,gradX:p?.gx,gradY:p?.gy,gradientThreshold:12,angleThresholdRad:15*Math.PI/180},p&&n){let d=function(a){let{gx:b,gy:c}=a,d=b.length,e=new Float32Array(d);for(let a=0;a<d;a++){let d=Math.hypot(b[a],c[a]);e[a]=Math.min(1,d/1024)}return e}(p),g=function(a,b,c,d,e,f){let g=f.coherence??.6,i=f.weightThreshold??.45,j=f.magnitudeThreshold??22,{gx:k,gy:l}=e,m=new Uint8Array(a*b),n=0,o=(b,c)=>c*a+b;for(let e=0;e<b;e++)for(let f=0;f<a;f++){let p=o(f,e);if(!c[p]||d&&d[p]<i)continue;let q=0,r=0,s=0,t=0;for(let c=-1;c<=1;c++){let d=e+c;if(!(d<0)&&!(d>=b))for(let b=-1;b<=1;b++){let c=f+b;if(c<0||c>=a)continue;let e=o(c,d),g=k[e],h=l[e];q+=g*g,r+=g*h,s+=h*h,t+=1}}if(0===t)continue;q/=t,r/=t;let u=q+(s/=t),v=Math.sqrt(Math.max(0,(q-s)*(q-s)+4*r*r)),w=.5*(u+v),x=.5*(u-v),y=(w-x)/(w+x+1e-5);if(!Number.isFinite(y)||y<g)continue;let z=k[p],A=l[p];if(Math.hypot(z,A)<j)continue;let B=.5*Math.atan2(2*r,q-s);Number.isFinite(B)||(B=0);let C=B+Math.PI/2,D=Math.cos(C),E=Math.sin(C),F=Math.hypot(D,E);if(F<1e-6){let a=Math.atan2(A,z);F=Math.hypot(D=-Math.sin(a),E=Math.cos(a))}if(F<1e-6)continue;D/=F,E/=F;let G=h(D),H=h(E),I=-G,J=-H,K=(e,f)=>{if(e<0||f<0||e>=a||f>=b)return;let g=o(e,f);c[g]&&(d&&d[g]<i||m[g]||(m[g]=255,n+=1))};K(f,e),(0!==G||0!==H)&&(K(f+G,e+H),K(f+I,e+J))}return n>0?m:null}(a.width,a.height,n,k,p,{coherence:.6,weightThreshold:.45,magnitudeThreshold:22});if(g){let a=0;for(let b=0;b<c.length;b++)g[b]&&!c[b]&&(c[b]=255,a+=1);b.tangentSeeds={enabled:!0,count:a}}else b.tangentSeeds={enabled:!1};let j=function(a,b,c,d,e,f,g,h){let i=a.length;if(0===i)return null;let j=new Uint8Array(i),k=new Int32Array(i),l=[],m=0,n=0,o=0,p=Math.max(64,Math.round(h*h*.05));for(let g=0;g<i;g++){if(!a[g]||j[g])continue;l.length=0;let h=0,i=0;k[i++]=g,j[g]=1;let q=b-1,r=0,s=c-1,t=0;for(;h<i;){let d=k[h++];l.push(d);let e=d%b,f=d/b|0;e<q&&(q=e),e>r&&(r=e),f<s&&(s=f),f>t&&(t=f);let g=b=>{a[b]&&!j[b]&&(j[b]=1,k[i++]=b)};e>0&&g(d-1),e+1<b&&g(d+1),f>0&&g(d-b),f+1<c&&g(d+b)}let u=l.length;if(u<p)continue;m+=1;let v=Math.max(0,q-1),w=Math.max(0,s-1),x=Math.min(b-1,r+1)-v+1,y=Math.min(c-1,t+1)-w+1,z=x*y,A=new Uint8Array(z),B=new Uint8Array(z),C=new Uint8Array(z),D=new Int32Array(z),E=a=>{let c=a%b;return((a/b|0)-w)*x+(c-v)};for(let a of l)A[E(a)]=1;for(let a=0;a<y;a++){let c=w+a;for(let f=0;f<x;f++){let g=c*b+(v+f);d[g]&&(e&&e[g]<=.5||(B[a*x+f]=1))}}let F=0,G=0,H=a=>{C[a]=1,D[G++]=a},I=a=>{let b=a%x,c=a/x|0,d=(a,b)=>{if(a<0||b<0||a>=x||b>=y)return;let c=b*x+a;C[c]||A[c]||B[c]&&H(c)};d(b-1,c),d(b+1,c),d(b,c-1),d(b,c+1)};for(let a=0;a<x;a++){let b=a,c=(y-1)*x+a;A[b]||!B[b]||C[b]||H(b),A[c]||!B[c]||C[c]||H(c)}for(let a=0;a<y;a++){let b=a*x,c=a*x+(x-1);A[b]||!B[b]||C[b]||H(b),A[c]||!B[c]||C[c]||H(c)}for(;F<G;)I(D[F++]);for(let c=0;c<z;c++){if(A[c]||!B[c]||C[c])continue;F=0,G=0,D[G++]=c,C[c]=1;let d=[];for(d.push(c);F<G;){let a=D[F++],b=a%x,c=a/x|0,e=(a,b)=>{if(a<0||b<0||a>=x||b>=y)return;let c=b*x+a;C[c]||A[c]||B[c]&&(C[c]=1,D[G++]=c,d.push(c))};e(b-1,c),e(b+1,c),e(b,c-1),e(b,c+1)}let e=d.length;if(e<12||e>.35*u)continue;let g=0;for(let a of d){let c=v+a%x;g+=f[(w+(a/x|0))*b+c]}if(!(g/e>.08)){for(let c of d){let d=v+c%x,e=(w+(c/x|0))*b+d;a[e]||(a[e]=255,o+=1)}n+=1}}}return 0===n&&0===o?null:{enabled:!0,components:m,holesFilled:n,pixelsFilled:o}}(c,a.width,a.height,n,k,d,0,t);j?(b.componentFill=j,m&&o&&(i=(0,e.Dt)(c,m,o),b.componentFill.leakAfter=i)):b.componentFill={enabled:!1,components:0,holesFilled:0,pixelsFilled:0};let l=function(a,b,c,d,e,f,g,i){let j=a.length;if(0===j)return{enabled:!1,pixels:0};let k=0;for(let l=0;l<j;l++){if(!f[l]||e&&e[l]<=.5||d[l]<220||i[l]>.05)continue;let j=-g.gy[l],m=g.gx[l],n=Math.hypot(j,m);if(n<1e-6)continue;j/=n,m/=n;let o=h(j),p=h(m);if(0===o&&0===p)continue;let q=l%b,r=l/b|0,s=(d,g)=>{if(d<0||g<0||d>=b||g>=c)return;let h=g*b+d;f[h]&&(e&&e[h]<=.5||a[h]||(a[h]=255,k+=1))};s(q+o,r+p),s(q-o,r-p)}return{enabled:k>0,pixels:k}}(c,a.width,a.height,f,k,n,p,d);b.specularBridge=l,l.enabled&&m&&o&&(i=(0,e.Dt)(c,m,o),b.specularBridge.leakAfter=i)}else b.componentFill={enabled:!1,components:0,holesFilled:0,pixelsFilled:0};if(b.tangentSeeds||(b.tangentSeeds={enabled:!1}),b.specularBridge||(b.specularBridge={enabled:!1,pixels:0}),b.lattice={enabled:!0,bandPx:s,interiorCoverage:j,vlines:a.grid.vlines.length,hlines:a.grid.hlines.length,weightMean:function(a){if(!a?.length)return 0;let b=0;for(let c=0;c<a.length;c++)b+=a[c];return b/a.length}(x)},a.flags.enableAutotune){let f=Math.max(1,a.grid.tileWidthPx*a.grid.tileHeightPx),g=t>0?t:Math.max(a.grid.tileWidthPx,a.grid.tileHeightPx),h=Math.max(32,Math.round(f*r)),j=Math.max(2,Math.round(Math.max(1,g*q))),k=a.stats.background?.occluderCoverage??0;k>=.3?(j=Math.max(9,j),h=Math.max(900,h)):k>=.18?(j=Math.max(6,j),h=Math.max(650,h)):(j=Math.max(4,j),h=Math.max(450,h));let l=Math.max(h,Math.round(1.8*f)),m={targetLow:.2,targetHigh:.24,minArea:h=Math.min(h,l),thinWidth:j=Math.min(j,12),thinLength:.3,leakLimit:.03,maxDilateSteps:6,u2BoostMask:a.u2BoostMask??void 0},n=function(a,b,c,f,g,h,i={}){let j=(0,d.M)(a,b),k=Math.max(0,Math.round(h.thinWidth)),l=Math.max(0,Math.min(1,h.thinLength));k>0&&(j=(0,d.Ki)(j,f,g,k,l)),j=(0,d.xZ)(j,f,g,Math.max(1,Math.round(h.minArea)));let m=(0,e.uX)(j),n=(0,e.Dt)(j,c,i),o={dilateSteps:0,shrinkApplied:!1,u2BoostApplied:!1},p=Math.max(0,h.leakLimit);for(;m<h.targetLow&&o.dilateSteps<h.maxDilateSteps;){let a=(0,d.M)((0,d.iT)(j,f,g,1),b);if((0,e.Dt)(a,c,i)>p+.01||(j=a,o.dilateSteps+=1,k>0&&(j=(0,d.Ki)(j,f,g,k,l)),j=(0,d.xZ)(j,f,g,Math.max(1,Math.round(h.minArea))),m=(0,e.uX)(j),n=(0,e.Dt)(j,c,i),m>=h.targetLow))break}if(m>h.targetHigh+.02){let a=(0,d.xZ)(j,f,g,Math.round(1.2*h.minArea)),b=(0,e.uX)(a);b>=h.targetLow-.02&&(j=a,m=b,n=(0,e.Dt)(j,c,i),o.shrinkApplied=!0)}if(m<h.targetLow&&h.u2BoostMask){let a=(0,d.m2)(j,(0,d.M)(h.u2BoostMask,b)),k=(0,e.Dt)(a,c,i);(0,e.uX)(a)>m&&k<=p+.01&&(j=(0,d.xZ)(a,f,g,Math.max(1,Math.round(h.minArea))),m=(0,e.uX)(j),n=(0,e.Dt)(j,c,i),o.u2BoostApplied=!0)}return{mask:j,coverage:m,leak:n,adjustments:o}}(c,v,w,a.width,a.height,m,o??{});c=n.mask,i=n.leak,b.autotune={enabled:!0,targetLow:m.targetLow,targetHigh:m.targetHigh,minArea:h,thinWidth:j,adjustments:n.adjustments,leak:i,budgetMs:a.flags.autotuneMs}}else b.autotune={enabled:!1,leak:i=(0,e.Dt)(c,w,o??{}),budgetMs:a.flags.autotuneMs}}else b.lattice={enabled:!1},a.flags.enableAutotune&&(b.autotune={enabled:!1,reason:"no-grid",budgetMs:a.flags.autotuneMs});if(b.componentFill||(b.componentFill={enabled:!1,components:0,holesFilled:0,pixelsFilled:0}),k){let a=c.length;for(let b=0;b<a;b++)c[b]&&k[b]<=.25&&(c[b]=0)}if(m&&o&&k&&p&&l){let d=g(a.grid),f=function(a,b,c,d,f,g,h,i,j,k=.03){let l=(0,e.Dt)(a,i,j);if(l<=k)return{enabled:!1,leakBefore:l,leakAfter:l};let m=Math.cos(15*Math.PI/180),n=g.gx,o=g.gy,p=a.length,q=0,r=0;for(let b=0;b<p;b++){if(!a[b])continue;let c=d[b];if(c>.35)continue;let e=f[b];if(e<0){a[b]=0,q+=1;continue}let g=n[b],h=o[b],i=Math.hypot(g,h);if(i<1e-6){a[b]=0,q+=1;continue}Math.abs((g*(0===e)+h*(1===e))/i)>m||c<.2?(a[b]=0,q+=1):r+=1}return{enabled:!0,removed:q,weakened:r,leakBefore:l,leakAfter:(0,e.Dt)(a,i,j)}}(c,a.width,a.height,k,l,p,0,m,o);i=f.leakAfter,b.leakClamp=f}else b.leakClamp={enabled:!1},m&&o&&(i=(0,e.Dt)(c,m,o));let u=(0,e.uX)(c);return u>.26&&u<=.55&&s.push("coverage_high"),u<.12&&u>=.06&&s.push("coverage_low"),null!=i&&i>0&&i>.05&&s.push("leak_warn"),b.coverage={before:a.normalizedCoverage,after:u,leak:i,warnings:s},{mask:c,coverage:u,leak:i,interiorCoverage:j,debug:b}}function g(a){return a?Math.min(6,Math.max(2,Math.round(1.5*Math.max(1,a.groutPx||1)))):3}function h(a){return a>.66?1:a<-.66?-1:0}},60202:a=>{function b(a){if(this.size=0|a,this.size<=1||(this.size&this.size-1)!=0)throw Error("FFT size must be a power of two and bigger than 1");this._csize=a<<1;for(var b=Array(2*this.size),c=0;c<b.length;c+=2){let a=Math.PI*c/this.size;b[c]=Math.cos(a),b[c+1]=-Math.sin(a)}this.table=b;for(var d=0,e=1;this.size>e;e<<=1)d++;this._width=d%2==0?d-1:d,this._bitrev=Array(1<<this._width);for(var f=0;f<this._bitrev.length;f++){this._bitrev[f]=0;for(var g=0;g<this._width;g+=2){var h=this._width-g-2;this._bitrev[f]|=(f>>>g&3)<<h}}this._out=null,this._data=null,this._inv=0}a.exports=b,b.prototype.fromComplexArray=function(a,b){for(var c=b||Array(a.length>>>1),d=0;d<a.length;d+=2)c[d>>>1]=a[d];return c},b.prototype.createComplexArray=function(){let a=Array(this._csize);for(var b=0;b<a.length;b++)a[b]=0;return a},b.prototype.toComplexArray=function(a,b){for(var c=b||this.createComplexArray(),d=0;d<c.length;d+=2)c[d]=a[d>>>1],c[d+1]=0;return c},b.prototype.completeSpectrum=function(a){for(var b=this._csize,c=b>>>1,d=2;d<c;d+=2)a[b-d]=a[d],a[b-d+1]=-a[d+1]},b.prototype.transform=function(a,b){if(a===b)throw Error("Input and output buffers must be different");this._out=a,this._data=b,this._inv=0,this._transform4(),this._out=null,this._data=null},b.prototype.realTransform=function(a,b){if(a===b)throw Error("Input and output buffers must be different");this._out=a,this._data=b,this._inv=0,this._realTransform4(),this._out=null,this._data=null},b.prototype.inverseTransform=function(a,b){if(a===b)throw Error("Input and output buffers must be different");this._out=a,this._data=b,this._inv=1,this._transform4();for(var c=0;c<a.length;c++)a[c]/=this.size;this._out=null,this._data=null},b.prototype._transform4=function(){var a,b,c=this._out,d=this._csize,e=1<<this._width,f=d/e<<1,g=this._bitrev;if(4===f)for(a=0,b=0;a<d;a+=f,b++){let c=g[b];this._singleTransform2(a,c,e)}else for(a=0,b=0;a<d;a+=f,b++){let c=g[b];this._singleTransform4(a,c,e)}var h=this._inv?-1:1,i=this.table;for(e>>=2;e>=2;e>>=2){var j=(f=d/e<<1)>>>2;for(a=0;a<d;a+=f)for(var k=a+j,l=a,m=0;l<k;l+=2,m+=e){let a=l,b=a+j,d=b+j,e=d+j,f=c[a],g=c[a+1],k=c[b],n=c[b+1],o=c[d],p=c[d+1],q=c[e],r=c[e+1],s=i[m],t=h*i[m+1],u=k*s-n*t,v=k*t+n*s,w=i[2*m],x=h*i[2*m+1],y=o*w-p*x,z=o*x+p*w,A=i[3*m],B=h*i[3*m+1],C=q*A-r*B,D=q*B+r*A,E=f+y,F=g+z,G=f-y,H=g-z,I=u+C,J=v+D,K=h*(u-C),L=h*(v-D),M=E+I,N=F+J,O=E-I,P=F-J,Q=G+L,R=H-K,S=G-L,T=H+K;c[a]=M,c[a+1]=N,c[b]=Q,c[b+1]=R,c[d]=O,c[d+1]=P,c[e]=S,c[e+1]=T}}},b.prototype._singleTransform2=function(a,b,c){let d=this._out,e=this._data,f=e[b],g=e[b+1],h=e[b+c],i=e[b+c+1];d[a]=f+h,d[a+1]=g+i,d[a+2]=f-h,d[a+3]=g-i},b.prototype._singleTransform4=function(a,b,c){let d=this._out,e=this._data,f=this._inv?-1:1,g=2*c,h=3*c,i=e[b],j=e[b+1],k=e[b+c],l=e[b+c+1],m=e[b+g],n=e[b+g+1],o=e[b+h],p=e[b+h+1],q=i+m,r=j+n,s=i-m,t=j-n,u=k+o,v=l+p,w=f*(k-o),x=f*(l-p);d[a]=q+u,d[a+1]=r+v,d[a+2]=s+x,d[a+3]=t-w,d[a+4]=q-u,d[a+5]=r-v,d[a+6]=s-x,d[a+7]=t+w},b.prototype._realTransform4=function(){var a,b,c=this._out,d=this._csize,e=1<<this._width,f=d/e<<1,g=this._bitrev;if(4===f)for(a=0,b=0;a<d;a+=f,b++){let c=g[b];this._singleRealTransform2(a,c>>>1,e>>>1)}else for(a=0,b=0;a<d;a+=f,b++){let c=g[b];this._singleRealTransform4(a,c>>>1,e>>>1)}var h=this._inv?-1:1,i=this.table;for(e>>=2;e>=2;e>>=2){var j=(f=d/e<<1)>>>1,k=j>>>1,l=k>>>1;for(a=0;a<d;a+=f)for(var m=0,n=0;m<=l;m+=2,n+=e){var o=a+m,p=o+k,q=p+k,r=q+k,s=c[o],t=c[o+1],u=c[p],v=c[p+1],w=c[q],x=c[q+1],y=c[r],z=c[r+1],A=i[n],B=h*i[n+1],C=u*A-v*B,D=u*B+v*A,E=i[2*n],F=h*i[2*n+1],G=w*E-x*F,H=w*F+x*E,I=i[3*n],J=h*i[3*n+1],K=y*I-z*J,L=y*J+z*I,M=s+G,N=t+H,O=s-G,P=t-H,Q=C+K,R=D+L,S=h*(C-K),T=h*(D-L),U=M+Q,V=N+R,W=O+T,X=P-S;if(c[o]=U,c[o+1]=V,c[p]=W,c[p+1]=X,0===m){var Y=M-Q,Z=N-R;c[q]=Y,c[q+1]=Z;continue}if(m!==l){var $=-h*T,_=-h*S,aa=-h*R,ab=O+$,ac=-P+_,ad=M+-h*Q,ae=-N-aa,af=a+k-m,ag=a+j-m;c[af]=ab,c[af+1]=ac,c[ag]=ad,c[ag+1]=ae}}}},b.prototype._singleRealTransform2=function(a,b,c){let d=this._out,e=this._data,f=e[b],g=e[b+c];d[a]=f+g,d[a+1]=0,d[a+2]=f-g,d[a+3]=0},b.prototype._singleRealTransform4=function(a,b,c){let d=this._out,e=this._data,f=this._inv?-1:1,g=e[b],h=e[b+c],i=e[b+2*c],j=e[b+3*c],k=g+i,l=g-i,m=h+j,n=f*(h-j);d[a]=k+m,d[a+1]=0,d[a+2]=l,d[a+3]=-n,d[a+4]=k-m,d[a+5]=0,d[a+6]=l,d[a+7]=n}},62147:(a,b,c)=>{function d(a,b,c,e=1){let f=new Uint8Array(a.length),g=new Int32Array(a.length),h=[];for(let d=0;d<a.length;d++){if(!a[d]||f[d])continue;let i=[],j=0,k=0;g[k++]=d,f[d]=1;let l=b-1,m=0,n=c-1,o=0;for(;j<k;){let d=g[j++];i.push(d);let e=d%b,h=Math.floor(d/b);e<l&&(l=e),e>m&&(m=e),h<n&&(n=h),h>o&&(o=h);let p=b=>{a[b]&&!f[b]&&(f[b]=1,g[k++]=b)};e>0&&p(d-1),e+1<b&&p(d+1),h>0&&p(d-b),h+1<c&&p(d+b)}i.length>=e&&h.push({pixels:i,area:i.length,minX:l,maxX:m,minY:n,maxY:o})}return h}function e(a,b,c,f,g=.15,h=1200){let i=d(a,c,f,h),j=new Uint8Array(a.length);for(let a of i){if(a.area<h)continue;let c=!1;for(let d of a.pixels)if(b[d]){c=!0;break}if(!c)continue;let d=0;for(let c of a.pixels)b[c]&&d++;if(d/a.area>=g)for(let b of a.pixels)j[b]=255}return j}function f(a,b,c,d,e){let f=a*b,g=new Float32Array(f);g.fill(1/0);let h=Math.max(0,Math.floor(Math.max(e-1,0)/6)),i=new Int32Array(f),j=0,k=0,l=a=>{a<0||a>=f||g[a]===1/0&&(g[a]=0,i[k++]=a)},m=c=>{let d=Math.max(0,Math.min(a-1,Math.round(c)));for(let c=-h;c<=h;c++){let e=d+c;if(!(e<0)&&!(e>=a))for(let c=0;c<b;c++)l(c*a+e)}},n=c=>{let d=Math.max(0,Math.min(b-1,Math.round(c)));for(let c=-h;c<=h;c++){let e=d+c;if(e<0||e>=b)continue;let f=e*a;for(let b=0;b<a;b++)l(f+b)}};for(let a of c)m(a);for(let a of d)n(a);if(0===k){for(let c=0;c<a;c++)l(c),l((b-1)*a+c);for(let c=0;c<b;c++)l(c*a),l(c*a+(a-1))}for(;j<k;){let c=i[j++],d=g[c]+1,e=c%a,f=c/a|0;if(e>0){let a=c-1;d<g[a]&&(g[a]=d,i[k++]=a)}if(e+1<a){let a=c+1;d<g[a]&&(g[a]=d,i[k++]=a)}if(f>0){let b=c-a;d<g[b]&&(g[b]=d,i[k++]=b)}if(f+1<b){let b=c+a;d<g[b]&&(g[b]=d,i[k++]=b)}}let o=a+b;for(let a=0;a<f;a++)g[a]===1/0&&(g[a]=o);return g}function g(a,b,c,d,e,h,i,j=148){if((process.env.OCCLUDER_SUPPRESS_TILE_LEAK??"1")==="0")return Uint8Array.from(a);let k=Uint8Array.from(a),l=f(c,d,e,h,i),m=Math.max(4,i),n=Math.max(112,j-20);for(let c=0;c<a.length;c++){if(!a[c])continue;let d=l[c];d<=1.2*m?b[c]<j&&(k[c]=0):d>=3*m?b[c]<n&&(k[c]=0):b[c]<j&&(k[c]=0)}return k}function h(a,b){let c=0,d=0;for(let e=0;e<a.length;e++)a[e]&&(c++,b[e]&&d++);return c>0?d/c:0}c.d(b,{Bv:()=>f,Jl:()=>e,NO:()=>g,_7:()=>h,um:()=>d})},64933:(a,b,c)=>{c.d(b,{JD:()=>g,f0:()=>f});var d=c(67835);let e=[{op:"open",radius:1},{op:"close",radius:2}];function f(a){return a&&"tiles-detail"===a.trim().toLowerCase()?"tiles-detail":"tiles-default"}function g(a){let b={invertMode:"auto",thresholdMode:"otsu",thresholdValue:127,percentileLow:1,percentileHigh:99,morphOps:[...e],keepLargest:0,minArea:900,removeBorder:!0,edgeGuard:{enabled:!1,threshold:48,dilate:1},edgeFill:{enabled:!0,threshold:96,dilate:1},kDark:1.25,kLight:.5,seedBorder:6,seedGrow:6,gridKill:"auto",gridVFrac:.55,gridHFrac:.55,gridPad:1,gridSigma:2.5,thinWidth:3,thinLengthFrac:.25,carveRadius:2,edgeLowFrac:.5,localStdWin:7,localStdK:1.2,illuminationRadius:0,illuminationAmount:0,fallbackHigh:.98,fallbackLow:.02,bgMode:"largest"},c=f(a.preset),g=function(a,b){let c={...a},d=a=>{let b=c.edgeFill||{enabled:!0,threshold:a,dilate:1};c.edgeFill={enabled:!0,threshold:a,dilate:Number.isFinite(b.dilate)?Math.max(0,Math.round(b.dilate)):1}};switch(b){case"tiles-default":return c.kDark=.4,c.kLight=.16,d(84),c.edgeLowFrac=.3,c.seedBorder=2,c.seedGrow=28,c.carveRadius=6,c.gridKill="auto",c.gridSigma=2.8,c.gridPad=3,c.thinWidth=2,c.thinLengthFrac=.3,c.minArea=400,c.edgeGuard={enabled:!1,threshold:48,dilate:1},c.localStdWin=7,c.localStdK=1.2,c.illuminationRadius=32,c.illuminationAmount=.75,c;case"tiles-detail":return c.kDark=.45,c.kLight=.18,d(80),c.edgeLowFrac=.3,c.seedBorder=3,c.seedGrow=32,c.carveRadius=5,c.gridKill="auto",c.gridSigma=3,c.gridPad=3,c.thinWidth=3,c.thinLengthFrac=.25,c.minArea=600,c.edgeGuard={enabled:!1,threshold:48,dilate:1},c.localStdWin=7,c.localStdK=1.2,c.illuminationRadius=28,c.illuminationAmount=.7,c;default:return c}}(b,c);if(a.overrides){let{overrides:b}=a;void 0!==b.invertMode&&(g.invertMode=b.invertMode),void 0!==b.thresholdMode&&(g.thresholdMode=b.thresholdMode),void 0!==b.thresholdValue&&(g.thresholdValue=b.thresholdValue),void 0!==b.percentileLow&&(g.percentileLow=b.percentileLow),void 0!==b.percentileHigh&&(g.percentileHigh=b.percentileHigh),void 0!==b.keepLargest&&(g.keepLargest=b.keepLargest),void 0!==b.minArea&&(g.minArea=b.minArea),void 0!==b.removeBorder&&(g.removeBorder=b.removeBorder),void 0!==b.edgeGuard&&(g.edgeGuard=b.edgeGuard),void 0!==b.edgeFill&&(g.edgeFill=b.edgeFill),void 0!==b.kDark&&(g.kDark=b.kDark),void 0!==b.kLight&&(g.kLight=b.kLight),void 0!==b.seedBorder&&(g.seedBorder=b.seedBorder),void 0!==b.seedGrow&&(g.seedGrow=b.seedGrow),void 0!==b.gridKill&&(g.gridKill=b.gridKill),void 0!==b.gridVFrac&&(g.gridVFrac=b.gridVFrac),void 0!==b.gridHFrac&&(g.gridHFrac=b.gridHFrac),void 0!==b.gridPad&&(g.gridPad=b.gridPad),void 0!==b.gridSigma&&(g.gridSigma=b.gridSigma),void 0!==b.thinWidth&&(g.thinWidth=b.thinWidth),void 0!==b.thinLengthFrac&&(g.thinLengthFrac=b.thinLengthFrac),void 0!==b.carveRadius&&(g.carveRadius=b.carveRadius),void 0!==b.edgeLowFrac&&(g.edgeLowFrac=b.edgeLowFrac),void 0!==b.localStdWin&&(g.localStdWin=b.localStdWin),void 0!==b.localStdK&&(g.localStdK=b.localStdK),void 0!==b.illuminationRadius&&(g.illuminationRadius=b.illuminationRadius),void 0!==b.illuminationAmount&&(g.illuminationAmount=b.illuminationAmount),void 0!==b.fallbackHigh&&(g.fallbackHigh=b.fallbackHigh),void 0!==b.fallbackLow&&(g.fallbackLow=b.fallbackLow),void 0!==b.bgMode&&(g.bgMode=b.bgMode),void 0!==b.morphOps&&(g.morphOps=b.morphOps)}let h=function(a,b,c,e,f){let g,h=a.length;if(0===h)return{data:a,coverage:0,inverted:!1,threshold:0,original:0,fallback:!1,stats:{originalCoverage:0,originalMean:0,percentileLow:e.percentileLow,percentileHigh:e.percentileHigh,thresholdMode:e.thresholdMode,invertMode:e.invertMode,inverted:!1,morphApplied:[],backgroundMode:e.bgMode}};let i=Uint8Array.from(a),j=0,k=0;for(let b=0;b<h;b++)a[b]>=128&&(j+=1),k+=a[b];let l=j/h,m=k/(255*h),n={invertMode:e.invertMode,thresholdMode:e.thresholdMode,thresholdValue:e.thresholdValue,percentileLow:e.percentileLow,percentileHigh:e.percentileHigh,morphOps:e.morphOps,keepLargest:e.keepLargest,minArea:e.minArea,edgeGuard:e.edgeGuard,edgeFill:e.edgeFill??{enabled:!0,threshold:96,dilate:1},kDark:Number.isFinite(e.kDark)?e.kDark:1.25,kLight:Number.isFinite(e.kLight)?e.kLight:.5,seedBorder:Number.isFinite(e.seedBorder)?e.seedBorder:6,seedGrow:Number.isFinite(e.seedGrow)?e.seedGrow:6,gridKill:e.gridKill??"auto",gridVFrac:Number.isFinite(e.gridVFrac)?e.gridVFrac:.55,gridHFrac:Number.isFinite(e.gridHFrac)?e.gridHFrac:.55,gridPad:Number.isFinite(e.gridPad)?e.gridPad:1,gridSigma:Number.isFinite(e.gridSigma)?e.gridSigma:2.5,thinWidth:Number.isFinite(e.thinWidth)?Math.max(0,e.thinWidth):3,thinLengthFrac:Number.isFinite(e.thinLengthFrac)?Math.max(0,Math.min(1,e.thinLengthFrac)):.25,carveRadius:Number.isFinite(e.carveRadius)?Math.max(0,Math.round(e.carveRadius)):2,edgeLowFrac:Number.isFinite(e.edgeLowFrac)?Math.max(0,Math.min(1,e.edgeLowFrac)):.5,localStdWin:Number.isFinite(e.localStdWin)?Math.max(1,Math.round(e.localStdWin)):7,localStdK:Number.isFinite(e.localStdK)?e.localStdK:1.2,illuminationRadius:Number.isFinite(e.illuminationRadius)?Math.max(0,e.illuminationRadius):0,illuminationAmount:Number.isFinite(e.illuminationAmount)?Math.max(0,Math.min(1,e.illuminationAmount)):0,fallbackHigh:e.fallbackHigh,fallbackLow:e.fallbackLow,bgMode:e.bgMode},o=(f&&f.length===h?f:void 0)??i,p=n.illuminationRadius>0&&n.illuminationAmount>0?(0,d.br)(o,b,c,n.illuminationRadius,n.illuminationAmount):o,q=a=>{if(!a||0===a.length)return 0;let b=0;for(let c=0;c<Math.min(a.length,h);c++)a[c]&&(b+=1);return b/h},r={originalCoverage:l,originalMean:m,percentileLow:n.percentileLow,percentileHigh:n.percentileHigh,thresholdMode:n.thresholdMode,invertMode:n.invertMode,inverted:!1,morphApplied:[],backgroundMode:n.bgMode},s=!1,t=null,u=!1;l>n.fallbackHigh?u=!0:l<n.fallbackLow&&(s=!0,t="coverage-low");let v=i;if(!s){let a=(0,d.Ym)(v,n.percentileLow),b=(0,d.Ym)(v,n.percentileHigh);b>a&&(v=(0,d.Yn)(v,a,b),r.clip={low:a,high:b})}let w="otsu"===n.thresholdMode?(0,d.jN)(v):n.thresholdValue;Number.isFinite(w)||(w=127),w=Math.max(0,Math.min(255,Math.round(w))),r.inverted=g="auto"===n.invertMode?m<.5&&l<.8:"true"===n.invertMode||"false"!==n.invertMode&&!!n.invertMode;let x=(0,d.zH)(v,w,g);r.originalCoverage=l,r.originalMean=m;let y=x;if(s)s?(r.fallbackReason=t,r.morphApplied=[],r.background={mode:n.bgMode,coverage:0,skipped:!0}):u&&(r.highCoverage=l);else{let a=[];for(let e of n.morphOps||[]){let f=Math.max(1,Math.round(e.radius||1));switch(e.op){case"open":y=(0,d.tS)(y,b,c,f),a.push(`open:${f}`);break;case"close":y=(0,d.xB)(y,b,c,f),a.push(`close:${f}`);break;case"dilate":y=(0,d.iT)(y,b,c,f),a.push(`dilate:${f}`);break;case"erode":y=(0,d.sj)(y,b,c,f),a.push(`erode:${f}`)}}if(a.length&&(r.morphApplied=a),"largest"===n.bgMode){let a=(0,d.ER)((0,d.Xm)(y),b,c),e=q(a),f=(0,d.Xm)(a);if(e>.01){let{mean:e,std:g}=(0,d.M$)(p,a),i=Math.min(g,32),j=Math.max(0,n.kDark),k=Math.max(0,n.kLight),m=Math.max(0,Math.min(255,e-i*j)),o=Math.max(0,Math.min(255,e+i*k)),s=n.seedBorder>0?n.seedBorder:0,t=new Uint8Array(h),v=new Uint8Array(h);for(let a=0;a<h;a++){let b=p[a];b<=m&&(t[a]=255),b>=o&&(v[a]=255)}let w=Number.isFinite(n.localStdWin)?Math.max(1,Math.round(n.localStdWin)):7,x=Number.isFinite(n.localStdK)?n.localStdK:1.2,z=new Uint8Array(h),A=0;if(x>0&&w>0){let a=(0,d.Xt)(p,b,c,w);A=x*g;for(let b=0;b<h;b++)a[b]>=A&&(z[b]=255)}let B=q(z),C=(0,d.m2)((0,d.m2)(t,v),z),D=s>0?(0,d.Pm)(C,b,c,n.seedBorder):C;D=(0,d.xB)(D,b,c,2);let E=n.seedBorder>0?n.seedBorder:8,F=new Uint8Array(D.length);if(n.edgeFill.enabled){let a=Number.isFinite(n.edgeFill.threshold)?n.edgeFill.threshold:96,e=Math.max(0,Math.round(n.edgeFill.dilate||0)),f=(0,d.oM)(p,b,c),g=Number.isFinite(n.edgeLowFrac)?n.edgeLowFrac:.5,h=Math.max(0,Math.round(a*Math.max(0,Math.min(1,g))));if(F=(0,d.A5)(f,b,c,a,h),"off"!==n.gridKill){let a=Number.isFinite(n.gridPad)?n.gridPad:1;if("auto"===n.gridKill||"adaptive"===n.gridKill){let e=Number.isFinite(n.gridSigma)?n.gridSigma:2.5;F=(0,d.yv)(F,b,c,e,a),r.gridKillMode={mode:"adaptive",sigma:Number(e.toFixed(2)),pad:a}}else{let e=Number.isFinite(n.gridVFrac)?n.gridVFrac:.55,f=Number.isFinite(n.gridHFrac)?n.gridHFrac:.55;F=(0,d.a2)(F,b,c,e,f,a),r.gridKillMode={mode:n.gridKill,vFrac:e,hFrac:f,pad:a}}}else r.gridKillMode={mode:"off"};e>0&&(F=(0,d.iT)(F,b,c,e)),F=(0,d.kl)(F,D,b,c,E),r.edgeFill={enabled:!0,threshold:a,low:h,lowFrac:Number(g.toFixed(2)),dilate:e}}else r.edgeFill={enabled:!1},r.gridKillMode={mode:"skipped"};let G=F.length?(0,d.iT)(F,b,c,1):F,H=(0,d.m2)(f,G);D=(0,d.M)(D,H);let I=(0,d.m2)(D,F);I=n.seedGrow>0?(0,d.HF)(I,H,b,c,n.seedGrow):(0,d.M)(I,H);let J=q((0,d.M)(I,a)),K=Math.max(0,Number.isFinite(n.carveRadius)?Math.round(n.carveRadius):0),L=K>0?(0,d.iT)(I,b,c,K):I,M=(0,d.V3)(a,L),N=(0,d.Xm)(M);if(N=(0,d.M)(N,H),n.thinWidth>0&&b>0&&c>0){let a=Math.max(1,Math.round(n.thinWidth)),e=Math.max(0,Math.min(1,Number(n.thinLengthFrac)));N=(0,d.Ki)(N,b,c,a,e)}let O=q(N=(0,d.xZ)(N,b,c,n.minArea>0?n.minArea:1));n.keepLargest>0&&(O=q(N=(0,d.AL)(N,b,c,n.keepLargest))),0===O&&(r.seedFallback=!0,N=(0,d.xZ)(f,b,c,n.minArea>0?n.minArea:1),n.keepLargest>0&&(N=(0,d.AL)(N,b,c,n.keepLargest)),O=q(N));let P=q(M),Q=q(N);r.background={mode:n.bgMode,coverage:P,occluderCoverage:Q},r.hybrid={kDark:j,kLight:k,thrDark:Number(m.toFixed(1)),thrLight:Number(o.toFixed(1)),std:Number(g.toFixed(2)),stdClamped:Number(i.toFixed(2)),seedCoverage:Number(O.toFixed(4)),seedMask:Number(J.toFixed(4)),borderCull:s,carveRadius:K,seedGrow:n.seedGrow,gateDist:E,gridKill:n.gridKill,gridSigma:Number.isFinite(n.gridSigma)?Number(n.gridSigma.toFixed(2)):void 0,thinWidth:n.thinWidth,thinLength:Number(n.thinLengthFrac.toFixed(3)),textureMask:Number(B.toFixed(4)),localStdWin:w,localStdK:Number(x.toFixed(3)),localStdThresh:Number(A.toFixed(2)),edgeLowFrac:Number((Number.isFinite(n.edgeLowFrac)?n.edgeLowFrac:.5).toFixed(2)),illuminationRadius:n.illuminationRadius,illuminationAmount:Number(n.illuminationAmount.toFixed(2))},n.minArea>0&&(r.dropSmall=n.minArea),n.keepLargest>0&&(r.keepLargest=n.keepLargest),u&&(r.highCoverage=l),y=N}else r.background={mode:n.bgMode,coverage:e,fallback:!0},y=(0,d.xZ)(y,b,c,n.minArea>0?n.minArea:1),n.keepLargest>0&&(y=(0,d.AL)(y,b,c,n.keepLargest)),n.minArea>0&&(r.dropSmall=n.minArea),n.keepLargest>0&&(r.keepLargest=n.keepLargest)}else n.minArea>0&&!1!==n.removeBorder&&(y=(0,d.wS)(y,b,c,n.minArea,!0),r.borderMinArea=n.minArea),n.keepLargest>0&&(y=(0,d.AL)(y,b,c,n.keepLargest),r.keepLargest=n.keepLargest);if(n.edgeGuard.enabled){let a=Math.max(0,Math.min(255,Math.round("number"==typeof n.edgeGuard.threshold&&Number.isFinite(n.edgeGuard.threshold)?n.edgeGuard.threshold:48))),e=Math.max(0,Math.round(n.edgeGuard.dilate||0));y=(0,d.xA)(y,p,b,c,{thr:a,dilate:e}),r.edgeGuard={threshold:a,dilate:e}}}let z=q(y);return{data:y,coverage:z,threshold:w,inverted:g,original:l,fallback:s,stats:r}}(a.mask,a.width,a.height,g,a.gray);return{preset:c,options:g,result:h}}},67835:(a,b,c)=>{c.d(b,{A5:()=>J,AL:()=>t,Az:()=>m,ER:()=>v,F3:()=>p,Gp:()=>n,HF:()=>E,Ki:()=>H,M:()=>z,M$:()=>K,Pm:()=>B,V3:()=>A,Xm:()=>u,Xt:()=>I,Ym:()=>f,Yn:()=>g,a2:()=>F,br:()=>q,iT:()=>i,jN:()=>e,kl:()=>D,m2:()=>y,oM:()=>r,sj:()=>j,tS:()=>k,wS:()=>s,xA:()=>x,xB:()=>l,xZ:()=>w,yv:()=>G,zH:()=>h});let d=a=>{let b=new Uint32Array(256);for(let c=0;c<a.length;c++)b[a[c]]+=1;return b},e=a=>{let b=d(a),c=a.length||1,e=0;for(let a=0;a<256;a++)e+=a*b[a];let f=0,g=0,h=-1,i=127;for(let a=0;a<256;a++){if(0===(g+=b[a]))continue;let d=c-g;if(0===d)break;let j=(f+=a*b[a])/g,k=(e-f)/d,l=g*d*(j-k)*(j-k);l>h&&(h=l,i=a)}return i},f=(a,b)=>{let c=(a=>!Number.isFinite(a)||a<0?0:a>100?100:a)(b),e=d(a),f=a.length;if(!f)return 0;let g=Math.max(0,Math.min(f-1,Math.round(c/100*(f-1)))),h=0;for(let a=0;a<e.length;a++)if((h+=e[a])>g)return a;return 255},g=(a,b,c)=>{let d=new Uint8Array(a.length);if(!a.length)return d;if(c<=b)return d.fill(0),d;let e=c-b;for(let f=0;f<a.length;f++){let g=Math.min(c,Math.max(b,a[f]));d[f]=Math.max(0,Math.min(255,Math.round((g-b)*255/e)))}return d},h=(a,b,c=!1)=>{let d=new Uint8Array(a.length);if(c)for(let c=0;c<a.length;c++)d[c]=255*(a[c]<b);else for(let c=0;c<a.length;c++)d[c]=255*(a[c]>=b);return d},i=(a,b,c,d=1)=>{let e=new Uint8Array(a.length),f=Math.max(0,Math.round(d));for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=0;for(let e=-f;e<=f&&!h;e++){let i=d+e;if(!(i<0)&&!(i>=c))for(let c=-f;c<=f;c++){let d=g+c;if(!(d<0)&&!(d>=b)&&a[i*b+d]){h=1;break}}}e[d*b+g]=255*!!h}return e},j=(a,b,c,d=1)=>{let e=new Uint8Array(a.length),f=Math.max(0,Math.round(d));for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=1;for(let e=-f;e<=f&&h;e++){let i=d+e;if(i<0||i>=c){h=0;break}for(let c=-f;c<=f;c++){let d=g+c;if(d<0||d>=b||!a[i*b+d]){h=0;break}}}e[d*b+g]=255*!!h}return e},k=(a,b,c,d=1)=>i(j(a,b,c,d),b,c,d),l=(a,b,c,d=1)=>j(i(a,b,c,d),b,c,d),m=(a,b,c,d=0)=>{let e=b*c;if(!e||a.length<e||d<=0)return Uint8Array.from(a);let f=Uint8Array.from(a),g=new Uint8Array(e),h=new Int32Array(e),i=[];for(let a=0;a<e;a++){if(!f[a]||g[a])continue;i.length=0;let e=0,j=0;for(h[j++]=a,g[a]=1;e<j;){let a=h[e++];i.push(a);let d=a%b,k=a/b|0,l=(a,d)=>{if(a<0||d<0||a>=b||d>=c)return;let e=d*b+a;!g[e]&&f[e]&&(g[e]=1,h[j++]=e)};l(d-1,k),l(d+1,k),l(d,k-1),l(d,k+1)}if(i.length<d)for(let a of i)f[a]=0}return f},n=(a,b,c,d=0)=>{let e=b*c;if(!e||a.length<e||d<=0)return Uint8Array.from(a);let f=Uint8Array.from(a),g=new Uint8Array(e),h=new Int32Array(e),i=[];for(let a=0;a<e;a++){if(f[a]||g[a])continue;i.length=0;let e=0,j=0,k=!1;for(h[j++]=a,g[a]=1;e<j;){let a=h[e++];i.push(a);let d=a%b,l=a/b|0;(0===d||0===l||d===b-1||l===c-1)&&(k=!0);let m=(a,d)=>{if(a<0||d<0||a>=b||d>=c)return;let e=d*b+a;g[e]||f[e]||(g[e]=1,h[j++]=e)};m(d-1,l),m(d+1,l),m(d,l-1),m(d,l+1)}if(!k&&i.length<=d)for(let a of i)f[a]=255}return f},o=a=>!Number.isFinite(a)||a<0?0:a>255?255:255&a,p=(a,b,c,d=1)=>{let e=Math.max(1,Math.round(d)),f=b+1,g=new Float64Array((c+1)*f),h=(a,b)=>b*f+a;for(let d=1;d<=c;d++){let c=0;for(let e=1;e<=b;e++)c+=a[(d-1)*b+(e-1)],g[h(e,d)]=g[h(e,d-1)]+c}let i=new Float32Array(b*c);for(let d=0;d<c;d++){let f=Math.max(0,d-e),j=Math.min(c-1,d+e);for(let c=0;c<b;c++){let k=Math.max(0,c-e),l=Math.min(b-1,c+e),m=h(k,f),n=h(l+1,f),o=h(k,j+1),p=h(l+1,j+1),q=(l-k+1)*(j-f+1),r=g[p]-g[n]-g[o]+g[m];i[d*b+c]=q>0?r/q:a[d*b+c]}}return i},q=(a,b,c,d=0,e=1)=>{let f=Math.max(0,Math.round(d)),g=Math.max(0,Math.min(1,Number.isFinite(e)?e:1));if(!f||!g)return Uint8Array.from(a);let h=p(a,b,c,f),i=new Uint8Array(a.length);for(let b=0;b<a.length;b++){let c=a[b],d=o(c-h[b]+128),e=o(c+g*(d-c));i[b]=e}return i},r=(a,b,c)=>{let d=new Uint8Array(a.length),e=[-1,0,1,-2,0,2,-1,0,1],f=[-1,-2,-1,0,0,0,1,2,1];for(let g=1;g<c-1;g++)for(let c=1;c<b-1;c++){let h=0,i=0,j=0;for(let d=-1;d<=1;d++){let k=g+d;for(let d=-1;d<=1;d++,j++){let g=a[k*b+(c+d)];h+=g*e[j],i+=g*f[j]}}let k=Math.min(255,Math.round(Math.hypot(h,i)));d[g*b+c]=k}return d},s=(a,b,c,d=0,e=!0)=>{if(!e)return Uint8Array.from(a);let f=a.length,g=new Int32Array(f),h=[0],i=[],j=0;for(let d=0;d<c;d++)for(let e=0;e<b;e++){let k=d*b+e;if(!a[k]||g[k])continue;j+=1;let l=0,m=!1;for(i.push(k),g[k]=j;i.length;){let d=i.pop();l+=1;let e=d%b,h=Math.floor(d/b);for(let k of((0===e||0===h||e===b-1||h===c-1)&&(m=!0),[d-1,d+1,d-b,d+b]))k<0||k>=f||a[k]&&!g[k]&&(g[k]=j,i.push(k))}h[j]=m?0:l}let k=new Uint8Array(f);for(let a=0;a<f;a++)(h[g[a]]||0)>=d&&(k[a]=255);return k},t=(a,b,c,d=1)=>{let e=a.length,f=new Int32Array(e),g=[0],h=[],i=0;for(let c=0;c<e;c++){if(!a[c]||f[c])continue;i+=1;let d=0;for(h.push(c),f[c]=i;h.length;){let c=h.pop();for(let g of(d+=1,[c-1,c+1,c-b,c+b]))g<0||g>=e||a[g]&&!f[g]&&(f[g]=i,h.push(g))}g[i]=d}let j=Array.from({length:i},(a,b)=>b+1).sort((a,b)=>(g[b]||0)-(g[a]||0)).slice(0,Math.max(1,Math.round(d))),k=new Uint8Array(i+1);for(let a of j)k[a]=1;let l=new Uint8Array(e);for(let a=0;a<e;a++)k[f[a]]&&(l[a]=255);return l},u=a=>{let b=new Uint8Array(a.length);for(let c=0;c<a.length;c++)b[c]=255*!a[c];return b},v=(a,b,c)=>{let d=b*c;if(0===d)return new Uint8Array(0);let e=new Uint8Array(d),f=new Int32Array(d),g=0,h=0,i=0,j=[],k=b=>{b<0||b>=d||!e[b]&&a[b]&&(e[b]=1,j.push(b))},l=[];for(let d=0;d<b;d++){let e=d,f=(c-1)*b+d;a[e]&&l.push(e),a[f]&&l.push(f)}for(let d=1;d<c-1;d++){let c=d*b,e=d*b+(b-1);a[c]&&l.push(c),a[e]&&l.push(e)}for(let a of l){if(e[a])continue;g+=1;let d=0;for(k(a);j.length;){let a=j.pop();f[a]=g,d+=1;let e=a%b,h=a/b|0;e>0&&k(a-1),e+1<b&&k(a+1),h>0&&k(a-b),h+1<c&&k(a+b)}d>i&&(i=d,h=g)}let m=new Uint8Array(d);if(!i)return m;for(let a=0;a<d;a++)f[a]===h&&(m[a]=255);return m},w=(a,b,c,d=1)=>{let e=a.length;if(0===e)return new Uint8Array(0);let f=new Int32Array(e),g=[0],h=[],i=0;for(let d=0;d<e;d++){if(!a[d]||f[d])continue;i+=1;let e=0;for(f[d]=i,h.push(d);h.length;){let d=h.pop();e+=1;let g=d%b,j=d/b|0;if(g>0){let b=d-1;!f[b]&&a[b]&&(f[b]=i,h.push(b))}if(g+1<b){let b=d+1;!f[b]&&a[b]&&(f[b]=i,h.push(b))}if(j>0){let c=d-b;!f[c]&&a[c]&&(f[c]=i,h.push(c))}if(j+1<c){let c=d+b;!f[c]&&a[c]&&(f[c]=i,h.push(c))}}g[i]=e}let j=new Uint8Array(e);for(let a=0;a<e;a++)(g[f[a]]||0)>=d&&(j[a]=255);return j},x=(a,b,c,d,e={})=>{let f=e.thr??48,g=e.dilate??1,j=r(b,c,d);j=h(j,f,!1),g>0&&(j=i(j,c,d,g));let k=new Uint8Array(a.length);for(let b=0;b<a.length;b++)k[b]=a[b]&&!j[b]?255:0;return k},y=(a,b)=>{let c=Math.min(a.length,b.length),d=new Uint8Array(c);for(let e=0;e<c;e++)d[e]=a[e]||b[e]?255:0;return d},z=(a,b)=>{let c=Math.min(a.length,b.length),d=new Uint8Array(c);for(let e=0;e<c;e++)d[e]=a[e]&&b[e]?255:0;return d},A=(a,b)=>{let c=Math.min(a.length,b.length),d=new Uint8Array(c);for(let e=0;e<c;e++)d[e]=a[e]&&!b[e]?255:0;return d},B=(a,b,c,d=0)=>{let e=Math.max(0,Math.round(d)),f=Uint8Array.from(a);if(!e)return f;let g=Math.max(1,b),h=Math.max(1,c);for(let a=0;a<h;a++){let b=a*g;if(a<e||a>=h-e){for(let a=0;a<g;a++)f[b+a]=0;continue}for(let a=0;a<e;a++)f[b+a]=0;for(let a=Math.max(e,g-e);a<g;a++)f[b+a]=0}return f},C=(a,b,c)=>{let d=b*c,e=new Int32Array(d);for(let b=0;b<d;b++)e[b]=1e9*!a[b];for(let a=0;a<c;a++)for(let c=0;c<b;c++){let d=a*b+c;c>0&&(e[d]=Math.min(e[d],e[d-1]+1)),a>0&&(e[d]=Math.min(e[d],e[d-b]+1))}for(let a=c-1;a>=0;a--)for(let d=b-1;d>=0;d--){let f=a*b+d;d+1<b&&(e[f]=Math.min(e[f],e[f+1]+1)),a+1<c&&(e[f]=Math.min(e[f],e[f+b]+1))}return e},D=(a,b,c,d,e)=>{let f=C(b,c,d),g=Math.max(0,Math.round(e)),h=new Uint8Array(a.length);for(let b=0;b<a.length;b++)h[b]=a[b]&&f[b]<=g?255:0;return h},E=(a,b,c,d,e=6)=>{let f=Math.max(0,Math.round(e)),g=new Uint8Array(a);if(!f){for(let a=0;a<g.length;a++)g[a]=g[a]&&b[a]?255:0;return g}for(let a=0;a<f;a++){g=i(g,c,d,1);for(let a=0;a<g.length;a++)g[a]=g[a]&&b[a]?255:0}return g},F=(a,b,c,d=.55,e=.55,f=1)=>{if(!a.length)return new Uint8Array(0);let g=new Uint8Array(a.length),h=new Int32Array(b),i=new Int32Array(c);for(let d=0;d<c;d++)for(let c=0;c<b;c++)a[d*b+c]&&(h[c]+=1,i[d]+=1);let j=new Uint8Array(b),k=new Uint8Array(c),l=Math.max(0,Math.min(c,Math.round(d*c))),m=Math.max(0,Math.min(b,Math.round(e*b))),n=Math.max(0,Math.round(f));for(let a=0;a<b;a++)if(h[a]>=l)for(let c=-n;c<=n;c++){let d=a+c;d>=0&&d<b&&(j[d]=1)}for(let a=0;a<c;a++)if(i[a]>=m)for(let b=-n;b<=n;b++){let d=a+b;d>=0&&d<c&&(k[d]=1)}for(let d=0;d<c;d++)for(let c=0;c<b;c++){let e=d*b+c;a[e]&&!(j[c]||k[d])&&(g[e]=255)}return g},G=(a,b,c,d=2.5,e=1)=>{if(!a.length)return new Uint8Array(0);let f=new Uint8Array(a.length),g=new Float64Array(b),h=new Float64Array(c);for(let d=0;d<c;d++)for(let c=0;c<b;c++)a[d*b+c]&&(g[c]+=1,h[d]+=1);let i=a=>{let b=0;for(let c=0;c<a.length;c++)b+=a[c];let c=a.length?b/a.length:0,d=0;for(let b=0;b<a.length;b++){let e=a[b]-c;d+=e*e}return{mean:c,std:a.length?Math.sqrt(d/a.length):0}},{mean:j,std:k}=i(g),{mean:l,std:m}=i(h),n=j+d*k,o=l+d*m,p=Math.max(0,Math.round(e)),q=new Uint8Array(b),r=new Uint8Array(c);for(let a=0;a<b;a++)if(g[a]>=n)for(let c=-p;c<=p;c++){let d=a+c;d>=0&&d<b&&(q[d]=1)}for(let a=0;a<c;a++)if(h[a]>=o)for(let b=-p;b<=p;b++){let d=a+b;d>=0&&d<c&&(r[d]=1)}for(let d=0;d<c;d++)for(let c=0;c<b;c++){let e=d*b+c;a[e]&&!(q[c]||r[d])&&(f[e]=255)}return f},H=(a,b,c,d=3,e=.25)=>{if(!a.length)return new Uint8Array(0);let f=b*c;if(f!==a.length||b<=0||c<=0)return Uint8Array.from(a);let g=Uint8Array.from(a),h=new Uint8Array(f),i=Math.max(1,Math.ceil(Math.max(1,Math.round(d))/2)),j=C(g,b,c);for(let a=0;a<f;a++)g[a]&&j[a]>=i&&(h[a]=255);let k=Math.max(1,Math.round(Math.max(0,Math.min(1,Number(e)))*Math.max(b,c)));for(let a=0;a<c;a++){let c=0,d=0;for(let e=0;e<=b;e++){let f=a*b+e;if(e<b&&g[f]&&!h[f])0===c&&(d=e),c+=1;else if(c){if(c>=k)for(let e=d;e<d+c;e++)g[a*b+e]=0;c=0}}}for(let a=0;a<b;a++){let d=0,e=0;for(let f=0;f<=c;f++){let i=f*b+a;if(f<c&&g[i]&&!h[i])0===d&&(e=f),d+=1;else if(d){if(d>=k)for(let c=e;c<e+d;c++)g[c*b+a]=0;d=0}}}let l=new Uint8Array(f);for(let a=0;a<f;a++)l[a]=h[a]||g[a]?255:0;return l},I=(a,b,c,d=7)=>{let e=Math.max(1,Math.round(d)),f=b+1,g=new Float64Array(f*(c+1)),h=new Float64Array(f*(c+1)),i=(a,b)=>b*f+a;for(let d=1;d<=c;d++){let c=0,e=0;for(let f=1;f<=b;f++){let j=a[(d-1)*b+(f-1)];c+=j,e+=j*j,g[i(f,d)]=g[i(f,d-1)]+c,h[i(f,d)]=h[i(f,d-1)]+e}}let j=new Float32Array(b*c);for(let a=0;a<c;a++){let d=Math.max(0,a-e),f=Math.min(c-1,a+e);for(let c=0;c<b;c++){let k=Math.max(0,c-e),l=Math.min(b-1,c+e),m=i(k,d),n=i(l+1,d),o=i(k,f+1),p=i(l+1,f+1),q=(l-k+1)*(f-d+1);if(q<=0){j[a*b+c]=0;continue}let r=g[p]-g[n]-g[o]+g[m],s=h[p]-h[n]-h[o]+h[m],t=r/q,u=Math.max(0,s/q-t*t);j[a*b+c]=Math.sqrt(u)}}return j},J=(a,b,c,d,e)=>{let f=b*c,g=Math.max(0,Math.round(d)),h=Math.max(0,Math.min(g,Math.round(e))),i=new Uint8Array(f),j=new Uint8Array(f);for(let b=0;b<f;b++){let c=a[b];i[b]=c>=g?255:128*(c>=h)}let k=[],l=[-b-1,-b,-b+1,-1,1,b-1,b,b+1];for(let a=0;a<f;a++)if(255===i[a]&&!j[a])for(j[a]=255,k.push(a);k.length;){let a=k.pop(),c=Math.floor(a/b),d=a-c*b;for(let e of l){let g=a+e;if(g<0||g>=f)continue;let h=Math.floor(g/b);!(Math.abs(g-h*b-d)>1||Math.abs(h-c)>1)&&(128!==i[g]||j[g]||(j[g]=255,k.push(g)))}}return j},K=(a,b)=>{let c=0,d=0,e=0,f=Math.min(a.length,b.length);for(let g=0;g<f;g++){if(!b[g])continue;let f=a[g];c+=f,d+=f*f,e+=1}if(!e)return{mean:128,std:16};let g=c/e,h=Math.sqrt(Math.max(0,d/e-g*g));return{mean:g,std:h}}},83061:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{M:()=>j});var e=c(99253),f=a([e]);(e=(f.then?(await f)():f)[0]).env.allowLocalModels=!0;let k=null,l=0;function g(a,b){let c=Number(process.env[a]??"");return!Number.isFinite(c)||c<=0?b:Math.max(1e3,Math.round(c))}async function h(a,b,c){return b>0?await new Promise((d,e)=>{let f=setTimeout(()=>e(Error(`${c} timed out after ${b}ms`)),b);a.then(a=>{clearTimeout(f),d(a)},a=>{clearTimeout(f),e(a)})}):a}async function i(){let a=g("DEPTH_PIPELINE_INIT_TIMEOUT_MS",6e4),b=g("DEPTH_PIPELINE_STALE_RESET_MS",2*a);k&&l>0&&Date.now()-l>b&&(k=null,l=0),k||(l=Date.now(),k=h((0,e.pipeline)("depth-estimation","onnx-community/depth-anything-v2-small",{device:"cpu"}),a,"depth pipeline init").catch(a=>{throw k=null,l=0,a}));let c=await k;return l=0,c}async function j(a){let b=g("DEPTH_INFER_TIMEOUT_MS",4e4),c=await i(),d=a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength),e=new Blob([d],{type:function(a){if(a.length>=2&&255===a[0]&&216===a[1])return"image/jpeg";if(a.length>=8&&137===a[0]&&80===a[1]&&78===a[2]&&71===a[3])return"image/png";if(a.length>=6){let b=a.subarray(0,6).toString("ascii");if("GIF87a"===b||"GIF89a"===b)return"image/gif"}return"application/octet-stream"}(a)}),f=await h(c(e),b,"depth inference"),j=f?.predicted_depth??f?.depth??f,k=Number(j?.width??0),l=Number(j?.height??0),m=function(a){let b=Array.isArray(a)?a.map(a=>Number(a)):null;return b&&!(b.length<2)&&b.every(a=>Number.isFinite(a)&&a>0)?2===b.length?{height:b[0],width:b[1]}:3===b.length?{height:b[1],width:b[2]}:{height:b[b.length-2],width:b[b.length-1]}:null}(j?.shape??j?.dims??j?.tensor?.dims??null),n=k>0?k:m?.width??0,o=l>0?l:m?.height??0;if(!(n>0&&o>0))throw Error("Depth output is missing width/height");let p=function(a){if(a instanceof Float32Array)return a;if(ArrayBuffer.isView(a)){let b=a.byteOffset??0,c=a.byteLength??0,d=a.buffer;if(d&&c>0&&c%4==0)return new Float32Array(d.slice(b,b+c));let e=Number(a?.length??0);if(Number.isFinite(e)&&e>0){let b=new Float32Array(e);for(let c=0;c<e;c++)b[c]=Number(a[c]??0);return b}throw Error("Unsupported depth tensor view")}if(Array.isArray(a))return Float32Array.from(a);throw Error("Unsupported depth tensor format")}(j?.data??j?.tensor?.data??j);if(!p?.length)throw Error("Depth output has no data");return{data:function(a,b,c){let d=b*c;if(a.length===d)return a;if(a.length>=3*d){let b=new Float32Array(d),c=a.length>=4*d?4:3;for(let e=0,f=0;f<d;f++,e+=c)b[f]=a[e];return b}if(a.length>=d)return a.subarray(0,d);throw Error("Depth output data length is smaller than expected plane size")}(p,n,o),width:n,height:o}}d()}catch(a){d(a)}})},93600:(a,b,c)=>{c.d(b,{combineTileMaskWithOccluder:()=>Q,h:()=>L,$:()=>M});var d=c(9288),e=c.n(d),f=c(4249),g=c(67835);function h(a,b,c){let d=new Uint8Array(b*c);for(let b=0,c=0;b<d.length;b++,c+=4){let e=a[c],f=a[c+1],g=a[c+2];d[b]=Math.max(0,Math.min(255,Math.round(.299*e+.587*f+.114*g)))}return d}function i(a){if(!a)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]&&(b+=1);return b}function j(a){return a&&a.length?i(a)/a.length:0}function k(a,b,c,d=.04){if(!a||!a.length||b<=0||c<=0)return null;let e=c,f=-1,g=0;for(let h=0;h<c;h++){let c=h*b,i=0;for(let d=0;d<b;d++)a[c+d]&&(i+=1);let j=i/Math.max(1,b);j>g&&(g=j),j>=d&&(e=Math.min(e,h),f=Math.max(f,h))}return f<e?null:{yMin:e,yMax:f,source:"tile_binary_rows",maxRowCoverage:Number(g.toFixed(4))}}function l(a,b,c,d){let e=new Uint8Array(a*b),f=Math.max(0,Math.min(b-1,Math.round(c))),g=Math.max(0,Math.min(b-1,Math.round(d))),h=Math.min(f,g),i=Math.max(f,g);for(let b=h;b<=i;b++){let c=b*a;e.fill(255,c,c+a)}return e}function m(a,b,c){return null!=c&&Number.isFinite(c)?l(a,b,0,Math.max(0,Math.round(c-1))):l(a,b,0,b-1)}function n(a,b,c,d){if(!a){if(!d)return null;let a=Math.max(0,Math.min(c-1,Math.round(d.yMin))),e=Math.max(0,Math.min(c-1,Math.round(d.yMax)));return l(b,c,a,e)}let e=(a.vlines??[]).filter(a=>Number.isFinite(a)),f=(a.hlines??[]).filter(a=>Number.isFinite(a));if(e.length<2&&f.length<2)return d?l(b,c,d.yMin,d.yMax):null;let g=e.length?Math.max(0,Math.min(b-1,Math.round(Math.min(...e)))):0,h=e.length?Math.max(0,Math.min(b-1,Math.round(Math.max(...e)))):b-1,i=f.length?Math.round(Math.min(...f)):Math.round(d?.yMin??0),j=f.length?Math.round(Math.max(...f)):Math.round(d?.yMax??c-1),k=Math.max(0,Math.min(c-1,i)),m=Math.max(0,Math.min(c-1,j)),n=new Uint8Array(b*c);for(let a=Math.min(k,m);a<=Math.max(k,m);a++){let c=a*b;for(let a=Math.min(g,h);a<=Math.max(g,h);a++)n[c+a]=255}return n}function o(a,b,c){let d=new Uint8Array(a.length),e=[],f=[-1,0,1];for(let g=0;g<c;g++)for(let h=0;h<b;h++){let i=g*b+h;if(!a[i]||d[i])continue;let j=[],k=[i];for(d[i]=1;k.length;){let e=k.pop();j.push(e);let g=Math.floor(e/b),h=e%b;for(let e of f)for(let i of f){if(0===i&&0===e)continue;let f=h+i,j=g+e;if(f<0||f>=b||j<0||j>=c)continue;let l=j*b+f;a[l]&&!d[l]&&(d[l]=1,k.push(l))}}e.push({pixels:j,area:j.length})}return e}function p(a){let b=Math.max(1,Math.round(a.width)),c=Math.max(1,Math.round(a.height)),d=b*c,e=new Uint8Array(d),f=a.rgba,p=a.grid??null,q=a.tileBand??null,r=a.tilesBinaryRawSupport?.length===d?a.tilesBinaryRawSupport:e,s=a.occluderBinary&&a.occluderBinary.length===d?a.occluderBinary:null,t=a.wallPlaneMask&&a.wallPlaneMask.length===d?new Uint8Array(a.wallPlaneMask):new Uint8Array(d).fill(255),u=function(a,b,c,d,e){let f=d*e,h=function(a,b,c){if(!a)return null;let d=new Uint8Array(b*c),e=(a,e,f)=>{let g=Math.max(0,Math.min(b-1,Math.round(a))),h=Math.max(0,Math.min(c-1,Math.round(e))),i=Math.max(0,Math.min(c-1,Math.round(f))),j=Math.min(h,i),k=Math.max(h,i);for(let a=j;a<=k;a++)d[a*b+g]=255},f=(a,e,f)=>{let g=Math.max(0,Math.min(b-1,Math.round(e))),h=Math.max(0,Math.min(b-1,Math.round(f))),i=Math.min(g,h),j=Math.max(g,h),k=Math.max(0,Math.min(c-1,Math.round(a)))*b;for(let a=i;a<=j;a++)d[k+a]=255};for(let b of a.vlines??[])e(b,0,c-1);for(let c of a.hlines??[])f(c,0,b-1);return d}(a,d,e),j=n(a,d,e,b&&Number.isFinite(Number(b.yMin))&&Number.isFinite(Number(b.yMax))?{yMin:Number(b.yMin),yMax:Number(b.yMax)}:null);if(!j&&!h)return new Uint8Array(f);let k=Math.max(2,Math.round(.004*Math.min(d,e))),l=h?(0,g.iT)(h,d,e,k):new Uint8Array(f),m=new Uint8Array(j||f);if(i(c)>0){let a=h?(0,g.M)(c,l):c,b=(0,g.iT)(a,d,e,Math.max(4,2*k));m=i(m)?(0,g.M)(m,(0,g.iT)((0,g.m2)(b,l),d,e,2)):b}else h&&(m=i(m)?(0,g.M)(m,(0,g.iT)(l,d,e,4)):(0,g.iT)(l,d,e,8));return m=(0,g.Az)(m,d,e,Math.max(80,Math.round(2e-4*f))),m=(0,g.Gp)(m,d,e,Math.max(200,Math.round(.001*f)))}(p,q,r,b,c),v=n(p,b,c,q&&Number.isFinite(Number(q.yMin))&&Number.isFinite(Number(q.yMax))?{yMin:Number(q.yMin),yMax:Number(q.yMax)}:null),w=i(t)?t:v?new Uint8Array(v):t,x=s?(0,g.iT)(s,b,c,3):e,y=i(u)?(0,g.M)(u,w):new Uint8Array(v||w),z=function(a,b,c,d,e){let f=b*c,i=h(a,b,c),j=(0,g.F3)(i,b,c,5),k=new Uint8Array(f);for(let a=0;a<f;a++)k[a]=Math.abs((i[a]??0)-(j[a]??0));let l=0,m=0,n=0,o=0,p=0;for(let b=0,c=0;b<f;b++,c+=4){if(!d[b])continue;let e=a[c]??0,f=a[c+1]??0,g=a[c+2]??0;m+=i[b],n+=e-f,o+=g-f,p+=k[b],l+=1}let q=l?m/l:210,r=l?n/l:0,s=l?o/l:0,t=l?p/l:10,u=Math.max(22,Math.min(70,Math.round(3*t+24))),v=Math.max(8,Math.min(32,Math.round(1.4*t+10))),w=Math.max(10,Math.min(38,Math.round(2.4*t+8))),x=new Uint8Array(f);for(let b=0,c=0;b<f;b++,c+=4){if(e&&!e[b])continue;let d=a[c]??0,f=a[c+1]??0,g=a[c+2]??0,h=i[b],j=d-f,l=g-f,m=Math.abs(j-r)<=v&&Math.abs(l-s)<=v,n=Math.abs(h-q)<=u,o=k[b]<=w,p=Math.max(d,f,g),t=Math.min(d,f,g),y=p?(p-t)/p:0,z=22>=Math.abs(d-f)&&22>=Math.abs(f-g)&&y<=.2;(m&&n&&o||z&&o&&h>=q-u)&&(x[b]=255)}let y=(0,g.Az)(x,b,c,Math.max(100,Math.round(25e-5*f)));return(0,g.Gp)(y,b,c,Math.max(200,Math.round(.001*f)))}(f,b,c,s?(0,g.V3)(y,x):y,i(w)?w:v),{seam:A,structuralEdgeMask:B}=function(a,b,c,d,e){let f=h(a,b,c),g=new Float32Array(c);for(let a=1;a<c;a++){let c=0,d=a*b,e=(a-1)*b;for(let a=0;a<b;a++)c+=Math.abs((f[d+a]??0)-(f[e+a]??0));g[a]=c/Math.max(1,b)}let i=function(a,b,c){let d=new Float32Array(c);for(let e=0;e<c;e++){let c=e*b,f=0;for(let d=0;d<b;d++)a[c+d]&&(f+=1);d[e]=f/Math.max(1,b)}return d}(d,b,c),j=e&&Number.isFinite(Number(e.yMax))?Number(e.yMax):null,l=k(d,b,c,.01),m=j??(l?l.yMax:Math.round(.65*c)),n=Math.max(2,Math.round(m-Math.min(.15*c,90))),o=Math.min(c-2,Math.round(m+Math.min(.08*c,56))),p=new Float32Array(c),q=null,r=-1/0;for(let a=n;a<=o;a++){let b=i[Math.max(0,a-2)]??0,d=i[Math.min(c-1,a+3)]??0,e=Math.max(0,b-d),f=Math.max(0,d-.01),h=Math.max(0,a-m)/Math.max(1,o-n),j=Math.abs(a-m)/Math.max(1,o-n),k=1.1*g[a]+52*e-4.5*j-80*f-7*h;p[a]=k,k>r&&(r=k,q=a)}null!=q&&l&&q>l.yMax+Math.max(8,Math.round(.015*c))&&(q=Math.round(l.yMax+Math.max(2,Math.round(.005*c))));let s=new Uint8Array(c),t=1;for(let a=0;a<c;a++)t=Math.max(t,g[a]);for(let a=0;a<c;a++)s[a]=Math.max(0,Math.min(255,Math.round(g[a]/t*255)));let u=function(a,b){if(!a.length)return 0;let c=new Uint32Array(256);for(let b=0;b<a.length;b++)c[a[b]]+=1;let d=Math.max(0,Math.min(a.length-1,Math.floor(.85*(a.length-1)))),e=0;for(let a=0;a<c.length;a++)if((e+=c[a])>d)return a;return 255}(s,0),v=new Uint8Array(b*c),w=q;if(null!=w){for(let a=Math.max(0,w-1);a<=Math.min(c-1,w+1);a++){let c=a*b;for(let a=0;a<b;a++)v[c+a]=255}for(let a=n;a<=o;a++){if(s[a]<u)continue;let c=a*b;for(let d=0;d<b;d++)3>=Math.abs(a-w)&&(v[c+d]=255)}}return{seam:{seamY:w,searchMinY:n,searchMaxY:o,rowScores:p,rowGrad:g,edgeThreshold:u},structuralEdgeMask:v}}(f,b,c,u,q),C=q&&Number.isFinite(Number(q.yMin))?Math.max(0,Math.round(Number(q.yMin)-Math.min(18,.02*c))):k(u,b,c,.01)?.yMin??0,D=null!=A.seamY?l(b,c,C,A.seamY-1):m(b,c,null),E=i(u)>0?(0,g.iT)(u,b,c,Math.max(10,Math.round(.012*Math.min(b,c)))):new Uint8Array(d),F=n(p,b,c,q&&Number.isFinite(Number(q.yMin))&&Number.isFinite(Number(q.yMax))?{yMin:Number(q.yMin),yMax:Number(q.yMax)}:null),G=i(F??null)?(0,g.M)(D,(0,g.iT)(F,b,c,6)):i(E)?(0,g.M)(D,E):new Uint8Array(D),H=new Uint8Array(i(G)?G:D);if(i(w)>0){let a=(0,g.iT)(w,b,c,10),d=H,e=(0,g.M)(d,a),f=i(d),h=i(e);f>0&&h>=Math.round(.55*f)&&(H=e)}if(i(z)>0){let a=(0,g.iT)(z,b,c,10),d=H,e=(0,g.M)(d,a),f=i(d),h=i(e);f>0&&h>=Math.round(.65*f)&&(H=e)}if(i(G)>0){let a=(0,g.iT)(H,b,c,12),d=(0,g.M)(a,G);H=(0,g.m2)(H,d)}H=(0,g.Gp)(H,b,c,Math.max(300,Math.round(.002*d))),i(u)>Math.round(.01*d)&&(H=(0,g.Gp)(H,b,c,Math.max(2e3,Math.round(.02*d)))),H=function(a,b,c,d){let e=o(a,b,c);if(!e.length)return new Uint8Array(a.length);let f=new Uint8Array(a.length),g=Math.max(60,Math.round(b*c*2e-4)),h=Math.max(8,Math.round(b*c*3e-5)),i=0;for(let a of e){let b=0;if(d)for(let c of a.pixels)d[c]&&(b+=1);if(a.area>=g&&(!d||b>=h||b/Math.max(1,a.area)>=.02)){for(let b of a.pixels)f[b]=255;i+=a.area}}return 0===i?function(a,b,c,d){let e=o(a,b,c);if(!e.length)return new Uint8Array(a.length);let f=e[0],g=-1/0;for(let a of e){let b=0;if(d)for(let c of a.pixels)d[c]&&(b+=1);let c=1e3*b+a.area;c>g&&(g=c,f=a)}let h=new Uint8Array(a.length);for(let a of f.pixels)h[a]=255;return h}(a,b,c,d):f}(H=(0,g.Az)(H,b,c,Math.max(300,Math.round(.0015*d))),b,c,u);let I=new Uint8Array(H=(0,g.Gp)(H,b,c,Math.max(500,Math.round(.003*d))));I=(0,g.Gp)(I,b,c,Math.max(300,Math.round(.002*d))),I=(0,g.Az)(I,b,c,Math.max(80,Math.round(4e-4*d)));let J=A.seamY,K=function(a,b,c,d=0){return null!=c&&Number.isFinite(c)?l(a,b,Math.round(c+d),b-1):new Uint8Array(a*b)}(b,c,J,0),L=m(b,c,J),M=i((0,g.M)(I,K)),N=i(I),O=i((0,g.M)(u,L)),P=O?i((0,g.V3)((0,g.M)(u,L),H)):0,Q=o(I,b,c).length,R=j(I)>.01,S=i(u)>Math.round(.005*d),T=Q>4,U=S&&O>0&&P/O>.93,V=R&&(S||i(w)>Math.round(.08*d))&&!T&&!U;return{applied:V,reason:V?void 0:T?"fragmented_roi":U?"missing_grid_high":"low_confidence_roi",gridSupportMask:u,wallPlaneMask:w,colorConsistencyMask:z,structuralEdgeMask:B,backsplashRoi:H,tileMaskV2:I,seam:A,metrics:{tileMaskCoverage:Number(j(I).toFixed(4)),backsplashCoverage:Number(j(H).toFixed(4)),countertopSpillProxy:Number((N>0?M/N:0).toFixed(4)),missingGridProxy:Number((O>0?P/O:0).toFixed(4)),fragmentationCount:Q,seamY:null!=J?Math.round(J):null}}}function q(a,b,c){return Number.isFinite(a)?Math.max(b,Math.min(c,Math.round(a))):b}function r(a){if(!a)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]&&(b+=1);return b}function s(a){return a&&a.length?r(a)/a.length:0}function t(a){if(!a.length)return null;let b=[...a].sort((a,b)=>a-b),c=Math.floor(b.length/2);return b.length%2?b[c]:(b[c-1]+b[c])/2}function u(a){let b=[...a].sort((a,b)=>a-b),c=[];for(let a=1;a<b.length;a++){let d=b[a]-b[a-1];d>.5&&c.push(d)}return c}function v(a,b,c,d,e,f){let g=new Uint8Array(a*b),h=q(Math.min(c,d),0,a-1),i=q(Math.max(c,d),0,a-1),j=q(Math.min(e,f),0,b-1),k=q(Math.max(e,f),0,b-1);for(let b=j;b<=k;b++){let c=b*a;for(let a=h;a<=i;a++)g[c+a]=255}return g}function w(a,b,c){let d=b,e=-1,f=c,g=-1;for(let h=0;h<c;h++){let c=h*b;for(let i=0;i<b;i++)a[c+i]&&(i<d&&(d=i),i>e&&(e=i),h<f&&(f=h),h>g&&(g=h))}return e>=d&&g>=f?{xMin:d,xMax:e,yMin:f,yMax:g}:null}function x(a,b,c){let d=new Uint8Array(a.length),e=[],f=[-1,1,-b,b];for(let c=0;c<a.length;c++){if(!a[c]||d[c])continue;let g=[c];d[c]=1;let h=[];for(;g.length;){let c=g.pop();h.push(c);let e=c%b,i=c/b|0;for(let h of f){let f=c+h;f<0||f>=a.length||d[f]||!a[f]||Math.abs(f%b-e)+Math.abs((f/b|0)-i)===1&&(d[f]=1,g.push(f))}}e.push({pixels:h,area:h.length})}return e}function y(a,b){return[...new Set((a??[]).map(a=>Number(a)).filter(a=>Number.isFinite(a)&&a>=-4&&a<=b+4).map(a=>Math.round(a)))].sort((a,b)=>a-b)}function z(a){for(let b=1;b<a.length;b++)if(a[b]<a[b-1])return!1;return!0}function A(a,b,c,d,e){let f=a.length?Math.max(...a):null,g=d??(a.length>=2?t(u(a))??12:null)??Math.max(10,.035*e);return q(null!=f?f+Math.round(.8*g):Number.isFinite(Number(b?.yMax))?Number(b?.yMax):c,0,e-1)}function B(a){return Number(a.toFixed(6))}function C(a,b,c){let d=Math.max(1,c),e={};return b.forEach((b,c)=>{e[b.name]=B((a[c]??0)/d)}),e}function D(a){if(!a||0===a.length)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]>127&&(b+=1);return b}function E(a,b){if(!a||0===a.length)return{coverage:0,solid:0,total:0};if(!b){let b=D(a);return{coverage:b/a.length,solid:b,total:a.length}}let c=Math.min(a.length,b.length),d=0,e=0;for(let f=0;f<c;f++)b[f]&&(e+=1,a[f]>127&&(d+=1));return{coverage:e>0?d/e:0,solid:d,total:e}}function F(a){if(a.length<2)return 0;let b=[];for(let c=1;c<a.length;c++){let d=a[c]-a[c-1];Number.isFinite(d)&&d>0&&b.push(d)}return b.sort((a,b)=>a-b),b.length?b[Math.floor(b.length/2)]:0}function G(a,b,c,d){let e=b*c;if(a.length<e)return a;let f=new Uint8Array(e),g=new Uint8Array(a),h=[];for(let a=0;a<e;a++){if(!g[a]||f[a])continue;let e=0;h.length=0,h.push(a),f[a]=1;let i=[];for(;h.length;){let a=h.pop();i.push(a),e+=1;let d=Math.floor(a/b),j=a-d*b;if(j>0){let b=a-1;!f[b]&&g[b]&&(f[b]=1,h.push(b))}if(j+1<b){let b=a+1;!f[b]&&g[b]&&(f[b]=1,h.push(b))}if(d>0){let c=a-b;!f[c]&&g[c]&&(f[c]=1,h.push(c))}if(d+1<c){let c=a+b;!f[c]&&g[c]&&(f[c]=1,h.push(c))}}if(e<d)for(let a of i)g[a]=0}return g}async function H(a,b,c){if(!a?.data||a.width<=0||a.height<=0)return null;let d=await N(a.data,a.width,a.height,b,c),e=Math.max(1,Math.floor(.42*c)),f=(0,g.iT)(d,b,c,6),h=Math.floor(.12*b),i=Math.ceil(.88*b),j=Math.floor(.35*b),k=Math.floor(.65*b),l=-1;for(let a=0;a<e;a++){let c=a*b,d=0,e=0;for(let a=h;a<i;a++)a>=j&&a<=k||(f[c+a]>127&&(d+=1),e+=1);d/Math.max(1,e)>=.02&&(l=a)}if(l>=0){let a=Math.max(2,Math.round(.015*c));return I(Math.max(Math.round(.06*c),l+a),0,c)}let m=Math.max(1,Math.floor(b/220)),n=[];for(let a=0;a<b;a+=m){if(a>=j&&a<=k)continue;let c=-1;for(let f=0;f<e;f++)d[f*b+a]>127&&(c=f);c>=0&&n.push(c)}if(n.length<12)return null;n.sort((a,b)=>a-b);let o=n[Math.floor(.1*n.length)]??-1;if(o<0)return null;let p=Math.max(2,Math.round(.015*c));return I(Math.max(Math.round(.06*c),o+p),0,c)}function I(a,b,c){return Math.max(b,Math.min(c,Math.round(a)))}function J(a,b=5,c=.3,d){if(a.length<b)return null;let e=a.slice().sort((a,b)=>a-b),f=F(e);if(!(f>0))return null;let g=f*c,h=0,i=0,j=-1/0,k=0,l=(a,b)=>{let c=(e[a]+e[b])/2,g=d&&d>0?d:e[e.length-1]??1,h=g>0?Math.max(0,Math.min(1,c/g)):.5,i=g>0?f/g:0;return(b-a+1)*(.5+h)*(i<=.018||i>=.25?0:(i-.018)/.232)};for(let a=1;a<e.length;a++)if(!(Math.abs(e[a]-e[a-1]-f)<=g)){let c=a-1;if(c-k+1>=b){let a=l(k,c);a>j&&(j=a,h=k,i=c)}k=a}{let a=e.length-1;if(a-k+1>=b){let b=l(k,a);b>j&&(j=b,h=k,i=a)}}return i-h+1<b?null:{sorted:e,startIdx:h,endIdx:i,spacing:f}}function K(a,b){let c=a.length;if(b<=1||0===c)return a.slice(0);let d=new Float32Array(c),e=Math.max(1,Math.floor(b/2)),f=0;for(let b=0;b<c;b++){f+=a[b],b-e>=0&&(f-=a[b-e]);let c=Math.max(0,b-e+1),g=b-c+1;d[b]=g>0?f/g:0}return d}function L(a,b,c,d){if(!(b>0&&c>0)||a.length<b*c)return null;let e=d?.minRowGrout??.002,f=d?.minRowTilesGrout??.01,g=d?.smoothWindow??9,h=d?.excludeBottomFrac??.15,i=d?.groutId??1,j=d?.tilesId??2,k=new Float32Array(c),l=new Float32Array(c);for(let d=0;d<c;d++){let c=d*b;for(let e=0;e<b;e++){let b=a[c+e];null!=i&&b===i?k[d]+=1:b===j&&(l[d]+=1)}}let m=new Float32Array(c),n=new Float32Array(c);for(let a=0;a<c;a++)m[a]=k[a]/Math.max(1,b),n[a]=(k[a]+l[a])/Math.max(1,b);let o=K(m,g),p=K(n,g),q=[],r=0;for(;r<c;){if(o[r]<e||p[r]<f){r+=1;continue}let a=r;for(;r<c&&o[r]>=e&&p[r]>=f;)r+=1;let b=r,d=(a+b-1)/2;if(d/Math.max(1,c)>1-h)continue;let g=0,i=0;for(let c=a;c<b;c++)g+=p[c],i+=p[c];i/=Math.max(1,b-a),q.push({yMin:a,yMax:b,score:g,confidence:i,center:d})}if(!q.length)return null;q.sort((a,b)=>b.score-a.score||b.yMax-b.yMin-(a.yMax-a.yMin));let s=q[0];return{yMin:s.yMin,yMax:s.yMax,confidence:B(s.confidence)}}function M(a,b,c,d,e){if(!(c>0&&d>0)||a.length<c*d)return null;let f=e?.smoothWindow??11,g=e?.excludeBottomFrac??.15,h=e?.minStartFrac??.08,i=e?.minRowFracMin??.12,j=e?.maxRowFracToThreshFrac??.5,k=e?.peakThresholdFrac??.65,l=e?.minBandFrac??.12,m=new Float32Array(d);for(let e=0;e<d;e++){let d=e*c,f=0,g=0;for(let e=0;e<c;e++){let c=d+e;(!b||b[c])&&(g+=1,a[c]>127&&(f+=1))}m[e]=f/Math.max(1,g)}let n=K(m,f),o=Math.floor(d*h),p=Math.max(o+1,Math.floor(d*(1-g))),q=0,r=-1;for(let a=o;a<Math.min(d,p);a++){let b=n[a]??0;b>q&&(q=b,r=a)}if(!(q>=i)||r<0)return null;let s=a=>{let b=r;for(;b>0&&(n[b-1]??0)>=a;)b-=1;let c=r;for(;c+1<d&&(n[c+1]??0)>=a;)c+=1;return{start:b,end:c}},t=Math.max(i,q*k,q*j),{start:u,end:v}=s(t);if((v-u+1)/Math.max(1,d)<l&&(t=Math.max(i,.85*k*q),{start:u,end:v}=s(t)),(v-u+1)/Math.max(1,d)<l&&(t=Math.max(i,.45*q),{start:u,end:v}=s(t)),(u+v)/2/Math.max(1,d)>1-g||u/Math.max(1,d)<h)return null;let w=0;for(let a=u;a<=v;a++)w+=n[a]??0;return w/=Math.max(1,v-u+1),{yMin:u,yMax:v+1,confidence:B(w)}}async function N(a,b,c,d,f){return b===d&&c===f?(0,g.zH)(a,128):new Uint8Array(await e()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).resize(d,f,{kernel:"nearest"}).threshold(128).toColorspace("b-w").raw().toBuffer())}async function O(a,b,c,d,f,g=4){let h=Math.max(3,Math.min(4,Math.round(g||4)));if(b===d&&c===f&&4===h)return new Uint8Array(a);let i=e()(Buffer.from(a),{raw:{width:b,height:c,channels:h}}).resize(d,f,{kernel:"lanczos3"});return 4!==h&&(i=i.ensureAlpha()),new Uint8Array(await i.raw().toBuffer())}async function P(a,b,c){let d=await e()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).toColorspace("b-w").png({compressionLevel:4}).toBuffer();return`data:image/png;base64,${d.toString("base64")}`}async function Q(a,b,c={}){let d,e=a.ids.length||1,i=a.classes,j=a=>i.find(b=>String(b.name).toLowerCase()===a.toLowerCase())??null,k=j("background")?.id??0,l=j("tiles")?.id??+(i.length>1),m=j("grout")?.id??null,n=null==m&&2===i.length,o=null,K=null;i.length,c.backgroundClassId;let R=c.bandOverride,S=null;if(R&&a.height>0){let{yMinNorm:b,yMaxNorm:c}=R,d=Math.max(0,Math.min(a.height,Math.round(b*a.height))),e=Math.max(d,Math.min(a.height,Math.round(c*a.height)));e>d&&(S={yMin:d,yMax:e,confidence:1})}let T=null,U=e;c.wallMask?.data&&c.wallMask.width>0&&c.wallMask.height>0&&(T=await N(c.wallMask.data,c.wallMask.width,c.wallMask.height,a.width,a.height),n&&T&&(T=(0,g.sj)((0,g.iT)(T,a.width,a.height,2),a.width,a.height,2)),U=D(T)||e);let V=n?null:T,W=null,X=null,Y=null,Z=null,$=null,_=S?null:function(a,b,c){if(!a)return null;Array.isArray(a.vlines)&&a.vlines.filter(a=>Number.isFinite(a));let d=.06*c,e=.9*c,f=Array.isArray(a.hlines)?a.hlines.filter(a=>Number.isFinite(a)&&a>=d&&a<=e):[];if(f.length<4)return null;let g=J(f,4,.35,c);if(!g){let a=f.slice().sort((a,b)=>a-b),b=F(a);if(!(b>0))return null;let e=Math.max(2,Math.round(.35*b)),g=I(Math.max(a[0]-e,d),0,c),h=I(a[a.length-1]+e,0,c);return h-g<Math.round(.08*c)||h-g>Math.round(.95*c)?null:{yMin:g,yMax:h,confidence:.35}}let{sorted:h,startIdx:i,endIdx:j,spacing:k}=g,l=Math.max(2,Math.round(.35*k)),m=I(Math.max(h[i]-l,d),0,c),n=I(h[j]+l,0,c);return n-m<Math.round(.08*c)||n-m>Math.round(.95*c)?null:{yMin:m,yMax:n,confidence:1}}(c.grid??null,a.width,a.height),aa=n&&b?.data&&b.width>0&&b.height>0?await H(b,a.width,a.height):null,ab=null!=aa?function(a,b,c,d){if(!a)return null;let e=Math.max(d,Math.round(.06*c)),f=Math.round(.92*c),g=Array.isArray(a.hlines)?a.hlines.filter(a=>Number.isFinite(a)&&a>=e&&a<=f):[];if(g.length<4)return null;let h=J(g,4,.35,c);if(h){let a=Math.max(2,Math.round(.35*h.spacing)),b=I(Math.max(h.sorted[h.startIdx]-a,e),0,c),d=I(h.sorted[h.endIdx]+a,0,c);if(d-b>=Math.round(.08*c))return{yMin:b,yMax:d,confidence:1}}let i=g.slice().sort((a,b)=>a-b),j=F(i);if(!(j>0))return null;let k=Math.max(2,Math.round(.35*j)),l=I(Math.max(i[0]-k,e),0,c),m=I(i[i.length-1]+k,0,c);return m-l<Math.round(.08*c)?null:{yMin:l,yMax:m,confidence:.8}}(c.grid??null,a.width,a.height,aa):null;if(!S&&n){o=new Uint8Array(a.ids.length);for(let b=0;b<a.ids.length;b++)o[b]=255*(a.ids[b]===l);let c=V?Uint8Array.from(V,a=>+!!a):new Uint8Array(a.width*a.height).fill(1),d=0;if(b?.data&&b.width>0&&b.height>0){let e=await N(b.data,b.width,b.height,a.width,a.height);if(!K){let b=new Uint8Array(o),c=Math.min(b.length,e.length);for(let a=0;a<c;a++)e[a]>127&&(b[a]=0);let d=new Float32Array(a.height);for(let c=0;c<a.height;c++){let e=c*a.width,f=0,g=0;for(let c=0;c<a.width;c++){let a=e+c;(!V||V[a])&&(g+=1,b[a]>0&&(f+=1))}d[c]=f/Math.max(1,g)}let f=Array.from(d).sort((a,b)=>a-b),g=Math.max(.12,.5*(f[Math.floor(.8*f.length)]??0)),h=new Uint8Array(b);for(let b=0;b<a.height;b++)if(d[b]<g){let c=b*a.width;for(let b=0;b<a.width;b++)h[c+b]=0}let i=Math.max(800,Math.floor(a.width*a.height*.0015));K=G(h,a.width,a.height,i)}let f=Math.min(c.length,e.length),g=Math.max(1,Math.floor(.28*a.height)),h=0,i=0;for(let b=0;b<f;b++)e[b]>127&&(c[b]=0),Math.floor(b/a.width)<g&&(i+=1,e[b]>127&&(h+=1));d=i>0?h/i:0}let e=d>.08?.18:d>.04?.14:.08,f=K??o;(S=M(f,c,a.width,a.height,{smoothWindow:11,excludeBottomFrac:.15,minStartFrac:e,minRowFracMin:.08,maxRowFracToThreshFrac:.5,peakThresholdFrac:.65,minBandFrac:.12}))||(S=M(f,c,a.width,a.height,{smoothWindow:9,excludeBottomFrac:.15,minStartFrac:Math.max(.06,.85*e),minRowFracMin:.06,maxRowFracToThreshFrac:.35,peakThresholdFrac:.55,minBandFrac:.1}));let g=ab??_;if(g)if(S){let b=Math.max(S.yMin,g.yMin),c=Math.min(S.yMax,g.yMax);S=c-b>=Math.round(.06*a.height)?{yMin:b,yMax:c,confidence:Math.min(S.confidence,g.confidence)}:g}else S=g;if(!K&&o){let b=Math.max(800,Math.floor(a.width*a.height*.001));K=G(o,a.width,a.height,b)}}if(S&&ab){let b=Math.round(.08*a.height),c=Math.round(.02*a.height);if(S.yMin-ab.yMin>c){let a=ab.yMin,c=Math.max(S.yMax,ab.yMax);c-a>=b&&(S={yMin:a,yMax:c,confidence:Math.min(S.confidence,ab.confidence)})}}if(S||(S=_),n){let b=ab??_;if(b){let c=Math.round(.08*a.height);b.yMax-b.yMin>=c&&(S=b)}}if(n&&S&&_&&S.confidence<.5&&_.yMin<S.yMin&&(S=_),n&&S&&b?.data&&b.width>0&&b.height>0)try{let d=await N(b.data,b.width,b.height,a.width,a.height),e=Math.max(1,Math.floor(.5*a.height)),f=Math.floor(.35*a.width),g=Math.floor(.65*a.width),h=-1;for(let b=0;b<e;b++){let c=b*a.width,e=0;for(let b=0;b<a.width;b++)b>=f&&b<=g||d[c+b]>127&&(e+=1);let i=Math.max(1,a.width-(g-f+1));e/i>=.01&&(h=b)}if(h>=0){let b=Math.round(.06*a.height),d=Array.isArray(c.grid?.hlines)?c.grid.hlines.filter(a=>Number.isFinite(a)):[],e=d.length>=2?F(d):Math.max(6,Math.round(.04*a.height)),f=Math.max(2,Math.round(.4*e)),g=I(Math.max(b,h+f),0,a.height),i=Math.round(.08*a.height);g<S.yMin-Math.round(.04*a.height)&&S.yMax-g>=i&&(S={...S,yMin:g})}}catch{}S||n||(S=L(a.ids,a.width,a.height,{minRowGrout:.002*(null!=m),minRowTilesGrout:.01,smoothWindow:9,excludeBottomFrac:.15,groutId:m,tilesId:l}));let ac=c.tileMaskV3Enabled??"1"===process.env.TILEMASK_V3,ad=c.tileMaskV2Enabled??"1"===process.env.TILEMASK_V2;if((ac||ad)&&c.sourceImageRgba?.data&&c.sourceImageRgba.width>0&&c.sourceImageRgba.height>0)try{var ae,af,ag,ah,ai,aj;let d=c.sourceImageRgba,f=await O(d.data,d.width,d.height,a.width,a.height,d.channels??4),i=new Uint8Array(a.ids.length);for(let b=0;b<a.ids.length;b++)i[b]=255*(a.ids[b]===l);let j=null;if(b?.data&&b.width>0&&b.height>0&&(j=await N(b.data,b.width,b.height,a.width,a.height)),ac){let b=function(a){let b,c=Math.max(1,Math.round(a.width)),d=Math.max(1,Math.round(a.height)),e=c*d,f=new Uint8Array(e),i=p(a),j=a.grid??null,k=a.tileBand??null,l=a.tilesBinaryRawSupport?.length===e?a.tilesBinaryRawSupport:f,m=a.occluderBinary&&a.occluderBinary.length===e?a.occluderBinary:null,n=y(j?.vlines,c),o=y(j?.hlines,d),B=z(n)&&z(o),C=function(a){let{width:b,height:c,vlines:d,hlines:e,tileBand:f,gridSupportMask:g,tilesBinaryRawSupport:h}=a,i=t(u(d)),j=t(u(e)),k=w(g,b,c)??w(h,b,c),l=Number.isFinite(Number(f?.yMin))?Number(f?.yMin):null,m=Number.isFinite(Number(f?.yMax))?Number(f?.yMax):null,n=d.length?Math.min(...d):k?.xMin??0,o=d.length?Math.max(...d):k?.xMax??b-1,p=e.length?Math.min(...e):null,r=e.length?Math.max(...e):null,s=null==p?k?.yMin??Math.round(Number(f?.yMin??0)):null==l||null==j?p:p<l-1.5*j?Math.max(0,Math.round(l-.6*j)):p,x=null==r?k?.yMax??Math.round(Number(f?.yMax??c-1)):null==m||null==j?r:Math.max(r,Math.round(m-.2*j)),y=Math.max(1,x-s),z=Math.min(Math.max(6,Math.round(.08*Math.max(1,o-n))),Math.max(4,Math.round((i??Math.max(8,.03*b))*.25))),A=Math.min(Math.max(10,Math.round(.12*y)),Math.max(3,Math.round((j??Math.max(8,.03*c))*.22))),B=Math.min(Math.max(14,Math.round(.16*y)),Math.max(6,Math.round((j??Math.max(10,.04*c))*.4))),C=q(n-z,0,b-1),D=q(o+z,0,b-1),E=q(s-A,0,c-1),F=q(x+B,0,c-1);return{mask:D>C&&F>E?v(b,c,C,D,E,F):new Uint8Array(b*c),bounds:D>C&&F>E?{xMin:C,xMax:D,yMin:E,yMax:F}:k,gridDx:null!=i?Number(i.toFixed(2)):null,gridDy:null!=j?Number(j.toFixed(2)):null,hintBottomY:x}}({width:c,height:d,vlines:n,hlines:o,tileBand:k,gridSupportMask:i.gridSupportMask,tilesBinaryRawSupport:l}),D=C.mask;if(!r(D)&&r(i.gridSupportMask)){let a=w(i.gridSupportMask,c,d);a&&(D=v(c,d,a.xMin,a.xMax,a.yMin,a.yMax))}if(!r(D)&&r(l)){let a=w(l,c,d);a&&(D=v(c,d,a.xMin,a.xMax,a.yMin,a.yMax))}let E=function(a){let b,{rgba:c,width:d,height:e,gridSupportMask:f,gridRoiMask:i,tileBand:j,occluderBinary:k,hlines:l,hintBottomY:m,gridDy:n}=a,o=h(c,d,e),p=(0,g.oM)(o,d,e),r=new Float32Array(e),s=new Float32Array(e),t=new Float32Array(e),u=new Float32Array(e),v=new Float32Array(e),x=new Float32Array(e),y=new Float32Array(e),z=new Float32Array(e),A=function(a,b,c){let d=new Float32Array(c);for(let e=0;e<c;e++){let c=e*b,f=0;for(let d=0;d<b;d++)a[c+d]&&(f+=1);d[e]=f/Math.max(1,b)}return d}(f,d,e),B=w(i,d,e),C=B?.xMin??0,D=B?.xMax??d-1,E=Math.max(1,D-C+1),F=q(Number.isFinite(Number(m))?Number(m):Number.isFinite(Number(j?.yMax))?Number(j?.yMax):Math.round(.68*e),0,e-1),G=Math.max(24,Math.round((n??Math.max(20,.06*e))*2.2)),H=q(F-Math.max(18,G),2,Math.max(2,e-2)),I=q(F+Math.max(12,Math.round(.7*G)),2,e-2),J=0;if(k){let a=Math.max(1,H-Math.max(10,Math.round(.7*G))),b=Math.min(e-2,I+Math.max(4,Math.round(.15*G)));for(let c=C;c<=D;c++){let f=null;for(let g=b;g>=a;g--)if(k[g*d+c]&&!k[Math.min(e-1,g+1)*d+c]){f=g;break}if(null==f)continue;let g=Math.min(e-1,f+1);if(!(g<H)&&!(g>I)){J+=1;for(let a=Math.max(H,g-2);a<=Math.min(I,g+2);a++){let b=a===g?1:a===g-1||a===g+1?.65:.35;u[a]+=b}}}if(J>0)for(let a=H;a<=I;a++)u[a]/=Math.max(1,E)}let K=1;for(let a=H;a<=I;a++){let b=0,c=0,e=0,f=0,g=0,h=a*d,i=(a-1)*d;for(let a=C;a<=D;a++){let d=h+a;k&&k[d]||(b+=Math.abs((o[d]??0)-(o[i+a]??0)),c+=p[d]??0,e+=o[d]??0,a>C&&(f+=Math.abs((o[d]??0)-(o[d-1]??0))),g+=1)}let j=Math.max(1,g);r[a]=b/j*.6+c/j*.4,y[a]=e/j,z[a]=f/j,r[a]>K&&(K=r[a])}let L=Math.max(10,Math.round(.55*K)),M=Math.max(4,Math.round(.42*L)),N=Math.max(3,Math.round(.28*L));for(let a=H;a<=I;a++){let b=a*d,c=(a-1)*d,e=0,f=0,g=0,h=0,i=0;for(let a=C;a<=D;a++){let d=b+a;if(k&&k[d])continue;i+=1;let j=Math.abs((o[d]??0)-(o[c+a]??0)),l=Math.max(0,(o[c+a]??0)-(o[d]??0));if((p[d]??0)>=M||j>=N||l>=Math.max(2,Math.round(.8*N))){f+=1+Math.min(g,1),g=0,h+=1,f>e&&(e=f);continue}if(f>0&&g<2){g+=1;continue}f>e&&(e=f),f=0,g=0}f>e&&(e=f);let j=e/Math.max(1,E),l=h/Math.max(1,i||E);x[a]=Math.max(0,Math.min(1,.75*j+.25*l))}for(let a=H;a<=I;a++){let b=0,c=0;for(let d=Math.max(H,a-3);d<=Math.max(H,a-1);d++){if(d>=a)continue;let e=y[d];e>0&&(b+=e,c+=1)}let d=0,e=0;for(let b=Math.min(I,a+1);b<=Math.min(I,a+4);b++){if(b<=a)continue;let c=y[b];c>0&&(d+=c,e+=1)}if(!c||!e)continue;let f=b/c,g=d/e,h=Math.abs(f-g),i=Math.max(0,f-g);v[a]=Math.max(0,Math.min(1,h/18*.7+i/14*.3))}let O=new Float32Array(e);for(let a=H;a<=I;a++){let b=0,c=0;for(let d=Math.max(H,a-4);d<=Math.max(H,a-1);d++){if(d>=a)continue;let e=z[d];e>=0&&(b+=e,c+=1)}let d=0,e=0;for(let b=Math.min(I,a+1);b<=Math.min(I,a+5);b++){if(b<=a)continue;let c=z[b];c>=0&&(d+=c,e+=1)}if(!c||!e)continue;let f=b/c,g=d/e,h=Math.max(0,f-g),i=f>0?g/Math.max(.001,f):1;O[a]=Math.max(0,Math.min(1,h/10*.65+.35*Math.max(0,.95-i)))}let P=null,Q=-1e9,R=-1e9;for(let a=H;a<=I;a++){let b=0,c=0,f=a*d;for(let a=C;a<=D;a++){let d=f+a;k&&k[d]||(i[d]&&(c+=1),(p[d]??0)>=L&&(b+=1))}let g=b/Math.max(1,c||E);t[a]=g;let h=A[Math.max(0,a-2)]??0,j=A[Math.min(e-1,a+3)]??0,m=Math.max(0,h-j),o=Math.max(0,j-.01),q=Math.max(0,1-(l.length?Math.min(...l.map(b=>Math.abs(b-a))):Math.abs(a-F))/Math.max(6,n??12)),w=Math.max(u[a]??0,Math.max(u[Math.max(H,a-1)]??0,u[Math.min(I,a+1)]??0)),y=Math.max(v[a]??0,Math.max(v[Math.max(H,a-1)]??0,v[Math.min(I,a+1)]??0)),z=Math.max(O[a]??0,Math.max(O[Math.max(H,a-1)]??0,O[Math.min(I,a+1)]??0)),B=Math.max(x[a]??0,Math.max(x[Math.max(H,a-1)]??0,x[Math.min(I,a+1)]??0)),G=0;if(k){let b=0,c=0,e=Math.max(0,a-3)*d;for(let a=C;a<=D;a++)k[f+a]&&(b+=1),k[e+a]&&(c+=1);G=Math.min(1,Math.abs(b-c)/Math.max(1,E))}let J=Math.abs(a-F)/Math.max(1,I-H),K=.9*r[a]+55*g+70*m+12*q+26*w+16*y+14*z+20*B+6*G-95*o-8*J;s[a]=K,K>Q?(R=Q,Q=K,P=a):K>R&&(R=K)}let S=Q-R,T=!1;if(null==P)b="no_candidates";else{let a=t[P]??0,c=A[Math.max(0,P-2)]??0,d=Math.max(0,c-(A[Math.min(e-1,P+3)]??0)),f=u[P]??0,g=v[P]??0,h=O[P]??0,i=x[P]??0,j=J/Math.max(1,E),k=Math.max(0,1-(l.length?Math.min(...l.map(a=>Math.abs(a-P))):Math.abs(P-F))/Math.max(6,n??12)),m=j>=.45&&k>=.5&&(f>=.026||r[P]>=.72*L),o=g>=.22&&k>=.48&&(r[P]>=.7*L||f>=.02),p=h>=.2&&k>=.45&&(r[P]>=.68*L||g>=.18||f>=.02),q=i>=.38&&k>=.42&&(r[P]>=.62*L||g>=.16||f>=.018),s=m||o||p||q;(T=(a>=.16||r[P]>=.9*L||f>=.032||s)&&(d>=.02||a>=.24||f>=.038&&k>=.45||s)&&S>=(s?-4:-3))||(b=a<.16&&(u[P]??0)<.03&&g<.2&&i<.3&&!s?"low_edge_continuity":d<.02?"weak_grid_drop":"ambiguous_seam")}let U=new Uint8Array(d*e);if(null!=P){for(let a=Math.max(0,P-1);a<=Math.min(e-1,P+1);a++){let b=a*d;for(let a=C;a<=D;a++)U[b+a]=255}for(let a=H;a<=I;a++){if(t[a]<.12||Math.abs(a-P)>4)continue;let b=a*d;for(let a=C;a<=D;a++)(p[b+a]??0)>=L&&(U[b+a]=255)}}return{seam:{seamY:P,searchMinY:H,searchMaxY:I,rowScores:s,rowGrad:r,edgeThreshold:L,continuityScores:t,contactPriorScores:u,shadowStepScores:v,longLineScores:x,reliable:T,reason:b,contactSupport:Number((J/Math.max(1,E)).toFixed(4))},structuralEdgeMask:U,hintY:F}}({rgba:a.rgba,width:c,height:d,gridSupportMask:i.gridSupportMask,gridRoiMask:D,tileBand:k,occluderBinary:m,hlines:o,hintBottomY:C.hintBottomY??i.seam.seamY,gridDy:C.gridDy}),F=E.seam.seamY,G="none",H=null;E.seam.reliable||(G="grid_only",H=E.seam.reason??"no_reliable_seam",F=A(o,k,E.hintY,C.gridDy,d));let I=(n.length>=2||o.length>=2)&&B,J=n.length<2&&o.length<2,K=(()=>{let a=C.gridDy??10,b=o.length?Math.min(...o):null,c=Number.isFinite(Number(k?.yMin))?Number(k?.yMin):null,e=null!=b?b-Math.round(.25*a):Number(k?.yMin??0);if(null!=c){let b=c-Math.round(.65*a);e<c-1.5*a&&(e=b),e=Math.max(e,b)}return q(e,0,d-1)})(),L=null!=F?F-1:A(o,k,Math.round(.7*d),C.gridDy,d),M=v(c,d,0,c-1,K,L),N=r(D)?(0,g.M)(D,M):(0,g.M)(i.backsplashRoi,M);if(!I&&r(l)>0){G="raw_tiles",H=H??"grid_too_sparse";let a=(0,g.iT)(l,c,d,Math.max(4,Math.round(.005*Math.min(c,d))));a=(0,g.Gp)(a,c,d,Math.max(200,Math.round(.002*e))),a=(0,g.Az)(a,c,d,Math.max(100,Math.round(6e-4*e))),N=r(D)?(0,g.M)((0,g.m2)(N,a),(0,g.iT)(D,c,d,8)):(0,g.M)(a,M)}if(r(i.wallPlaneMask)){let a=(0,g.iT)(i.wallPlaneMask,c,d,10),b=(0,g.M)(N,a),e=r(N),f=r(b);e>0&&f>=Math.round(.55*e)&&(N=b)}if(r(i.colorConsistencyMask)){let a=(0,g.iT)(i.colorConsistencyMask,c,d,8),b=(0,g.M)(N,a),e=r(N),f=r(b);e>0&&f>=Math.round(.5*e)&&(N=b)}if(r(i.gridSupportMask)){let a=(0,g.M)((0,g.iT)(i.gridSupportMask,c,d,5),M);N=(0,g.m2)(N,(0,g.M)(a,(0,g.iT)(D,c,d,6)))}N=(0,g.Gp)(N,c,d,Math.max(500,Math.round(.003*e))),N=function(a,b,c,d){let e=x(a,b,c);if(!e.length)return new Uint8Array(a.length);let f=new Uint8Array(a.length),g=Math.max(80,Math.round(25e-5*a.length)),h=0;for(let a of e){let b=0;if(d)for(let c of a.pixels)d[c]&&(b+=1);if(a.area>=g&&(!d||b>=6||b/Math.max(1,a.area)>=.01)){for(let b of a.pixels)f[b]=255;h+=a.area}}if(h>0)return f;let i=e[0],j=-1;for(let a of e){let b=0;if(d)for(let c of a.pixels)d[c]&&(b+=1);let c=1e3*b+a.area;c>j&&(i=a,j=c)}for(let a of i.pixels)f[a]=255;return f}(N=(0,g.Az)(N,c,d,Math.max(180,Math.round(.001*e))),c,d,i.gridSupportMask);let O=new Uint8Array(N=(0,g.Gp)(N,c,d,Math.max(800,Math.round(.005*e))));O=(0,g.Az)(O,c,d,Math.max(80,Math.round(4e-4*e))),O=(0,g.Gp)(O,c,d,Math.max(250,Math.round(.002*e)));let P=w(N,c,d),Q=null!=F?v(c,d,0,c-1,F,d-1):f,R=function(a,b,c){let d=new Uint8Array(a*b),e=null==c?b-1:Math.max(0,Math.min(b-1,Math.round(c-1)));for(let b=0;b<=e;b++)d.fill(255,b*a,b*a+a);return d}(c,d,F),S=r((0,g.M)(O,Q)),T=r(O),U=r((0,g.M)(i.gridSupportMask,R)),V=U?r((0,g.V3)((0,g.M)(i.gridSupportMask,R),N)):0,W=x(O,c,d).length,X=s(O),Y=X>.72&&(J||null!=H),Z=X<.01,$=Math.max(0,Math.min(1,.45*Math.min(1,n.length/4)+.45*Math.min(1,o.length/4)+.1*!!B)),_=T>0?S/T:0,aa=U>0?V/U:0,ab=.08*Math.max(0,W-1),ac=function(a,b){if(!a.length||null==b||b<=1)return 0;let c=u(a);if(!c.length)return 0;let d=c.slice(Math.max(0,c.length-4)),e=function(a){if(!a.length)return null;let b=0;for(let c of a)b+=c;return b/a.length}(d);if(null==e)return 0;let f=0;for(let a of d)f+=Math.abs(a-b)/Math.max(1,b);let g=f/Math.max(1,d.length);return Math.max(0,Math.min(1,1-(.75*g+Math.abs(e-b)/Math.max(1,b)*.5)))}(o,C.gridDy),ad="grid_only"===G&&"low_edge_continuity"===H&&I&&!J&&B&&W<=1&&_<=.015&&X>=.08&&X<=.72&&ac>=.55,ae=Math.max(0,Math.min(1,Math.max(0,Math.min(1,.4*$+.25*Math.min(1,(E.seam.reliable?Math.max(0,Math.min(1,.35+Math.min(.35,E.seam.continuityScores[E.seam.seamY??0]??0)+.3)):.28)+.11*!!ad)+(1-Math.min(1,4*_))*.2+(1-Math.min(1,aa))*.1+(1-Math.min(1,ab))*.05-.5*!!Y))+.035*!!ad)),af=!Z&&!Y&&W<=6&&ae>=.28,ag=null;return af?"none"!==G&&(b=`${G}:${H??"fallback"}`):b=ag=Y?"giant_rectangle_guard":Z?"collapsed_roi":W>6?"fragmented_roi":H??"low_confidence_roi",{applied:af,reason:b,failureReason:ag,confidence:Number(ae.toFixed(4)),fallbackMode:G,gridSupportMask:i.gridSupportMask,wallPlaneMask:i.wallPlaneMask,colorConsistencyMask:i.colorConsistencyMask,structuralEdgeMask:E.structuralEdgeMask,gridRoiMask:D,backsplashRoi:N,tileMaskV3:O,seam:E.seam,bounds:P,metrics:{tileMaskCoverage:Number(X.toFixed(4)),backsplashCoverage:Number(s(N).toFixed(4)),countertopSpillProxy:Number(_.toFixed(4)),missingGridProxy:Number(aa.toFixed(4)),fragmentationCount:W,seamY:null!=F?Math.round(F):null,tileMaskConfidence:Number(ae.toFixed(4))},diagnostics:{gridReliable:I,gridSparse:J,gridMonotonic:B,gridVCount:n.length,gridHCount:o.length,gridSpacingX:C.gridDx,gridSpacingY:C.gridDy,seamReliable:E.seam.reliable,seamHintY:E.hintY??null,seamContactSupport:E.seam.contactSupport??null,seamFallbackStable:ad,gridTailStability:Number(ac.toFixed(4))}}}({rgba:f,width:a.width,height:a.height,grid:c.grid??null,tileBand:S,tilesBinaryRawSupport:i,wallPlaneMask:T,occluderBinary:j});if(W={applied:b.applied,reason:b.reason,failureReason:b.failureReason??null,confidence:b.confidence,fallbackMode:b.fallbackMode,metrics:b.metrics,diagnostics:b.diagnostics},b.applied){V=b.backsplashRoi,U=D(V)||e;let c=(ae=b.backsplashRoi,af=a.width,ag=a.height,w(ae,af,ag));c&&($=c,S={yMin:c.yMin,yMax:Math.min(a.height,c.yMax+1),confidence:1}),X="tilemask_v3_applied"}else X=`tilemask_v3_skip:${b.failureReason??b.reason??"low_confidence_roi"}`}if(!W?.applied&&ad){let b=p({rgba:f,width:a.width,height:a.height,grid:c.grid??null,tileBand:S,tilesBinaryRawSupport:i,wallPlaneMask:T,occluderBinary:j});if(Y={applied:b.applied,reason:b.reason,metrics:b.metrics},b.applied){V=b.backsplashRoi,U=D(V)||e;let c=(ah=b.backsplashRoi,ai=a.width,aj=a.height,function(a,b,c){let d=b,e=-1,f=c,g=-1;for(let h=0;h<c;h++){let c=h*b;for(let i=0;i<b;i++)a[c+i]&&(i<d&&(d=i),i>e&&(e=i),h<f&&(f=h),h>g&&(g=h))}return e>=d&&g>=f?{xMin:d,xMax:e,yMin:f,yMax:g}:null}(ah,ai,aj));c&&($=c,S={yMin:c.yMin,yMax:Math.min(a.height,c.yMax+1),confidence:1}),Z="tilemask_v2_applied"}else Z=`tilemask_v2_skip:${b.reason??"low_confidence_roi"}`}}catch{ac&&(X="tilemask_v3_error"),ad&&(Z="tilemask_v2_error")}let ak=Uint8Array.from(a.ids),al=function(a,b,c){if(!a)return null;let d=Array.isArray(a.vlines)?a.vlines.filter(a=>Number.isFinite(a)):[],e=.06*c,f=.9*c,g=Array.isArray(a.hlines)?a.hlines.filter(a=>Number.isFinite(a)&&a>=e&&a<=f):[];if(d.length<2||g.length<4)return null;let h=J(g,4,.35,c);if(!h)return null;let i=h.spacing,j=Math.max(2,Math.round(.35*i)),k=I(Math.max(h.sorted[h.startIdx]-j,e),0,c),l=I(h.sorted[h.endIdx]+j,0,c),m=d.slice().sort((a,b)=>a-b),n=J(d,4,.35,b),o=n?.spacing??F(m)??i,p=Math.max(2,Math.round(.35*o)),q=I((n?n.sorted[n.startIdx]:m[0])-p,0,b),r=I((n?n.sorted[n.endIdx]:m[m.length-1])+p,0,b),s=l-k,t=r-q;return s<Math.round(.08*c)||t<Math.round(.08*b)||s>Math.round(.95*c)||t>Math.round(.98*b)?null:{xMin:q,xMax:r,yMin:k,yMax:l,tileW:o,tileH:i,confidence:1}}(c.grid??null,a.width,a.height);if(al&&S){let b=n?Math.min(S.yMin,al.yMin):Math.max(S.yMin,al.yMin),c=n?Math.max(S.yMax,al.yMax):Math.min(S.yMax,al.yMax);n&&null!=aa&&(b=Math.max(b,aa)),c-b>=Math.round(.06*a.height)&&(S={yMin:b,yMax:c,confidence:S.confidence})}else al&&!S&&(S={yMin:al.yMin,yMax:al.yMax,confidence:1});if(S&&n&&null!=aa&&aa>S.yMin){let b=Math.round(.08*a.height),c=Math.max(0,S.yMax-b),d=Math.min(Math.max(S.yMin,aa),c);d>S.yMin&&(S={...S,yMin:d})}if(S&&b?.data&&b.width>0&&b.height>0)try{let c=await N(b.data,b.width,b.height,a.width,a.height),d=Math.max(1,Math.floor(.5*a.height)),e=Math.floor(.35*a.width),f=Math.floor(.65*a.width),g=Math.max(1,Math.floor(a.width/220)),h=[];for(let b=0;b<a.width;b+=g){if(b>=e&&b<=f)continue;let g=-1,i=0;for(let e=0;e<d;e++)c[e*a.width+b]>127&&(g=e,i+=1);g>=0&&i/d<.35&&h.push(g)}if(h.length>=12){h.sort((a,b)=>a-b);let b=h[Math.floor(.1*h.length)]??-1;if(b>=0){let c=Math.max(2,Math.round(.015*a.height)),d=I(b+c,0,a.height),e=Math.round(.08*a.height),f=Math.round(.06*a.height),g=I(Math.max(f,d),0,a.height);g<S.yMin&&S.yMax-g>=e&&(S={...S,yMin:g})}}}catch{}if(S&&c.grid?.hlines?.length){let b=Math.round(.06*a.height),d=null!=aa?aa:b,e=c.grid.hlines.filter(a=>Number.isFinite(a)&&a>=d&&a<=S.yMin).sort((a,b)=>a-b);if(e.length>=3){let b=F(e);if(b>0){let c=.35*b,f=e[0],g=(e[0],1),h=-1,i=0;for(let a=1;a<e.length;a++)if(Math.abs(e[a]-e[a-1]-b)<=c)e[a],g+=1;else{if(g>=3&&h<0){h=f,i=g;break}f=e[a],e[a],g=1}if(h<0&&g>=3&&(h=f,i=g),h>=0&&i>=3){let c=I(Math.max(d,h-Math.max(2,Math.round(.35*b))),0,a.height),e=Math.round(.08*a.height);c<S.yMin&&S.yMax-c>=e&&(S={...S,yMin:c})}}}}if(S&&_){let b=Math.round(.08*a.height),c=Math.round(.06*a.height),d=Math.round(.3*a.height),e=Math.round(.06*a.height),f=null!=aa?aa:e;if(S.yMin-_.yMin>c&&_.yMin<=d){let a=Math.max(_.yMin,f),c=Math.max(S.yMax,_.yMax);c-a>=b&&(S={yMin:a,yMax:c,confidence:Math.min(S.confidence,_.confidence)})}}if(n&&K){let b=function(a,b,c,d){let e=Math.max(800,Math.floor(b*c*.002)),f=function(a,b,c,d){let e=b*c;if(a.length<e)return null;let f=new Uint8Array(e),g=0,h=null,i=[];for(let j=0;j<e;j++){if(!a[j]||f[j])continue;let e=0,k=b,l=-1,m=c,n=-1;for(i.length=0,i.push(j),f[j]=1;i.length;){let d=i.pop();e+=1;let g=Math.floor(d/b),h=d-g*b;if(h<k&&(k=h),h>l&&(l=h),g<m&&(m=g),g>n&&(n=g),h>0){let b=d-1;!f[b]&&a[b]&&(f[b]=1,i.push(b))}if(h+1<b){let b=d+1;!f[b]&&a[b]&&(f[b]=1,i.push(b))}if(g>0){let c=d-b;!f[c]&&a[c]&&(f[c]=1,i.push(c))}if(g+1<c){let c=d+b;!f[c]&&a[c]&&(f[c]=1,i.push(c))}}e>=d&&e>g&&(g=e,h={area:e,xMin:k,xMax:l,yMin:m,yMax:n})}return h}(a,b,c,e);if(!f)return null;let g=Math.round(.06*c),h=Array.isArray(d?.hlines)?d.hlines.filter(a=>Number.isFinite(a)):[],i=Math.max(2,Math.round(.4*(h.length>=2?F(h):Math.max(6,Math.round(.04*c))))),j=I(Math.max(g,f.yMin-i),0,c),k=I(f.yMax+i,0,c);return k-j<Math.round(.08*c)||k-j>Math.round(.95*c)?null:{yMin:j,yMax:k,confidence:.7}}(K,a.width,a.height,c.grid??null);if(b){let c=!S||S.yMax-S.yMin>Math.round(.85*a.height),d=!S||b.yMin-S.yMin>Math.round(.06*a.height);(!S||c||d)&&(S=b)}}if(n&&S&&_){let b=Math.round(.08*a.height),c=Math.round(.03*a.height);if(S.yMin-_.yMin>c){let a=Math.max(Math.min(S.yMin,_.yMin),null!=aa?aa:0),c=Math.max(S.yMax,_.yMax);c-a>=b&&(S={yMin:a,yMax:c,confidence:Math.min(S.confidence,_.confidence)})}}if(S&&null!=aa&&aa>S.yMin){let b=Math.round(.08*a.height),c=Math.max(0,S.yMax-b),d=Math.min(Math.max(S.yMin,aa),c);d>S.yMin&&(S={...S,yMin:d})}let am=(()=>{if(al||!S)return null;let b=c.grid;if(!b)return null;let d=Array.isArray(b.vlines)?b.vlines.filter(a=>Number.isFinite(a)):[];if(d.length<2)return null;let e=d.slice().sort((a,b)=>a-b),f=Math.max(2,Math.round(.35*(F(e)||Math.max(8,.04*a.width)))),g=I(e[0]-f,0,a.width),h=I(e[e.length-1]+f,0,a.width);return h-g<Math.round(.08*a.width)?null:{xMin:g,xMax:h,yMin:S.yMin,yMax:S.yMax}})(),an=(()=>{if($)return{xMin:$.xMin,xMax:$.xMax+1,yMin:$.yMin,yMax:$.yMax+1};if(al){let a=S?S.yMin:al.yMin,b=S?S.yMax:al.yMax;return{xMin:al.xMin,xMax:al.xMax,yMin:a,yMax:b}}return am})();if(S){for(let b=0;b<a.height;b++)if(b<S.yMin||b>=S.yMax){let c=b*a.width;for(let b=0;b<a.width;b++)ak[c+b]=k}}if(an)for(let b=0;b<a.height;b++){let c=b*a.width;if(b<an.yMin||b>=an.yMax){for(let b=0;b<a.width;b++)ak[c+b]=k;continue}for(let b=0;b<a.width;b++)(b<an.xMin||b>=an.xMax)&&(ak[c+b]=k)}if(V){let a=Math.min(ak.length,V.length);for(let b=0;b<a;b++)V[b]||(ak[b]=k)}let ao=n?[{id:0,name:"background",color:[0,0,0]},{id:1,name:"grout",color:[52,152,219]},{id:2,name:"tiles",color:[46,204,113]}]:i,ap=new Uint8Array(ak.length),aq=!1;if(n){let c=new Uint8Array(ak.length);for(let a=0;a<ak.length;a++)c[a]=255*(ak[a]===l);if(an){let d=an.yMin,e=an.yMax,f=an.xMin,g=an.xMax,h=null;b?.data&&b.width>0&&b.height>0&&(h=await N(b.data,b.width,b.height,a.width,a.height));let i=0;for(let b=d;b<e;b++){let d=b*a.width;for(let a=f;a<g;a++){let b=d+a;(!V||V[b])&&(h&&h[b]>127||(i+=1,c[b]))}}if(i>0){for(let b=d;b<e;b++){let d=b*a.width;for(let a=f;a<g;a++){let b=d+a;(!V||V[b])&&(h&&h[b]>127||(c[b]=255))}}aq=!0}}let d=an?new Uint8Array(c.length):function(a,b=1){let c=Math.max(1,Math.round(b)),d=(0,g.iT)(a.data,a.width,a.height,c),e=(0,g.sj)(a.data,a.width,a.height,c),f=new Uint8Array(a.data.length),h=Math.min(f.length,d.length,e.length,a.data.length);for(let b=0;b<h;b++){let c=d[b]&&!e[b]?255:0;f[b]=c&&!a.data[b]?255:0}return{data:f,width:a.width,height:a.height}}({data:c,width:a.width,height:a.height},2).data;for(let a=0;a<ap.length;a++)c[a]?ap[a]=2:d[a]?ap[a]=1:ap[a]=0}else ap.set(ak);let ar=new Float32Array(ao.length),as=V?Math.min(ap.length,V.length):ap.length;for(let a=0;a<ap.length;a++){if(V&&(a>=as||!V[a]))continue;let b=ap[a];b<ar.length&&(ar[b]+=1)}let at=!1,au=[];if(X&&au.push(X),Z&&au.push(Z),aq&&au.push("tiles_filled_from_grid"),c.enableDepthWallFill&&V){let b=Math.max(1,U),c=(ar[2]??0)/b,d=(ar[1]??0)/b,e=S?(S.yMax-S.yMin)/Math.max(1,a.height):0,f=!!S&&e>=.08;if(c<.002&&f&&(d>=.001||n)){let b=Math.min(ap.length,V.length);for(let c=0;c<b;c++){let b=Math.floor(c/a.width);S&&(b<S.yMin||b>=S.yMax)||V[c]&&0===ap[c]&&(ap[c]=2)}at=!0,au.push("tiles_filled_from_wall")}}if(!at){let a=Math.max(1,V?U:e);(ar[2]??0)/a<=0&&au.push("tiles_missing")}let av=0,aw=0,ax=0,ay=0,az=b?.dataUrl??null;if(b?.data&&b.width>0&&b.height>0){let c=await N(b.data,b.width,b.height,a.width,a.height),d=(0,g.zH)(c,128),f=Math.max(0,Math.min(8,Math.round(Number(process.env.OCCLUDER_COMBINE_ERODE_PX??"2")))),h=f>0?(0,g.sj)(d,a.width,a.height,f):d,i=E(d,V??void 0),j=E(h,V??void 0),k=i.coverage>.02&&(j.coverage<.65*i.coverage||j.coverage<.01),l=k?d:h;k&&au.push("occluder_erode_rollback");let m=k?i:j;ay=m.solid,av=B(m.coverage),az=await P(l,a.width,a.height);let n=Math.min(l.length,ap.length);for(let b=0;b<n;b++){let c=Math.floor(b/a.width);S&&(c<S.yMin||c>=S.yMax)||(!V||V[b])&&l[b]>127&&(0!==ap[b]&&(aw+=1),ap[b]=255)}ax=B(aw/(V?Math.max(1,U):Math.max(1,e)))}let aA=new Float32Array(ao.length),aB=a.width,aC=a.height,aD=-1,aE=-1;for(let b=0;b<a.height;b++){let c=b*a.width;for(let d=0;d<a.width;d++){let a=c+d;if(V&&!V[a])continue;let e=ap[a];e<aA.length&&(aA[e]+=1,(2===e||1===e)&&(aB=Math.min(aB,d),aC=Math.min(aC,b),aD=Math.max(aD,d),aE=Math.max(aE,b)))}}let aF=C(ar,ao,V?Math.max(1,U):e);if(aD>=aB&&aE>=aC){let b=new Float32Array(ao.length),c=0;for(let d=aC;d<=aE;d++){let e=d*a.width;for(let a=aB;a<=aD;a++){let d=e+a;if(V&&!V[d])continue;let f=ap[d];255!==f&&(f<b.length&&(b[f]+=1),c+=1)}}d=C(b,ao,Math.max(1,c))}else{let a=Math.max(1,function(a){let b=0;for(let c=0;c<a.length;c++)b+=a[c]??0;return b}(aA));d=C(aA,ao,a)}let aG=await (0,f.renderTileMask)(ap,a.width,a.height,ao);if("1"===process.env.TILE_MASK_DEBUG){let a={};ap.forEach(b=>{a[b]=(a[b]??0)+1}),console.info("[tile-mask] histogram",a)}return{combined:{ids:ap,dataUrl:aG,coverage:d,coverageAbsolute:aF,occludedCoverage:ax,occluderCoverage:av,occludedPixels:aw,occluderPixels:ay,source:`${n?"unet_latest_2class":"unet_latest"}${b?"+occluder":""}${at?"+depth-wall-fill":""}${n?"+grout_heur":""}`,tileBand:S,...W?{tileMaskV3:W}:{},...Y?{tileMaskV2:Y}:{},...au.length?{warnings:au}:{}},rawDataUrl:a.dataUrl,occluderDataUrl:az}}},94437:(a,b,c)=>{c.d(b,{F:()=>z,q:()=>B});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(48161),i=c.n(h),j=c(31421),k=c(9288),l=c.n(k);let m=Math.max(5e3,Number(process.env.OCCLUDER_SEG_TIMEOUT??"90000")),n=Math.max(0,Math.min(.25,Number(process.env.OCCLUDER_SEG_MIN_COVERAGE??"0.02")));function o(a){return g().resolve(a,"..","..")}async function p(a){for(let b of[o(__dirname),process.cwd()]){let c=g().join(b,"scripts",a);try{return await e().access(c),{scriptPath:c,projectRoot:b}}catch{}}let b=__dirname;for(let c=0;c<6;c++){let c=g().resolve(b,"..");if(c===b)break;let d=g().join(c,"scripts",a);try{return await e().access(d),{scriptPath:d,projectRoot:c}}catch{}b=c}let c=o(__dirname);return{scriptPath:g().join(c,"scripts",a),projectRoot:c}}function q(){for(let a of function(){let a=process.env.OCCLUDER_SEG_PY??process.env.PYTHON_EXEC;return a?a.split(/[,\s]+/g).map(a=>a.trim()).filter(Boolean):["python3","python"]}())if(0===(0,j.spawnSync)(a,["--version"],{stdio:"ignore"}).status)return a;return null}async function r(a,b){await l()(a,{failOnError:!1}).withMetadata().png({compressionLevel:3,adaptiveFiltering:!1}).toFile(b)}async function s(a){let{data:b,info:c}=await l()(a,{failOnError:!1}).ensureAlpha().removeAlpha().greyscale().raw().toBuffer({resolveWithObject:!0}),d=c.width??0,e=c.height??0;if(!(d>0&&e>0))throw Error(`occluder mask returned invalid size (${d}x${e})`);return{data:new Uint8Array(b),width:d,height:e}}function t(a){if(!a||0===a.length)return 0;let b=0;for(let c=0;c<a.length;c++)a[c]>127&&(b+=1);return b/a.length}async function u(a,b,c){let d=await l()(Buffer.from(a),{raw:{width:b,height:c,channels:1}}).toColorspace("b-w").png({compressionLevel:4}).toBuffer();return`data:image/png;base64,${d.toString("base64")}`}function v(a){let b=new Uint32Array(256);for(let c=0;c<a.length;c++)b[a[c]]+=1;return b}async function w(a,b){let{scriptPath:c,projectRoot:d}=await p("occluder_guided.py"),f=q();if(!f)throw Error("no python interpreter available (set OCCLUDER_SEG_PY)");let h=await e().mkdtemp(g().join(i().tmpdir(),"occluder-guided-")),k=(process.env.OCCLUDER_GUIDED_KEEP_TEMP??"0")==="1",l=async()=>{if(!k)try{await e().rm(h,{recursive:!0,force:!0})}catch{}},n=g().join(h,"depth.png"),o=g().join(h,"image.png"),t=g().join(h,"mask.png"),u=g().join(h,"mask.json");try{await r(a,n),await r(b,o);let e=[c,"--depth",n,"--image",o,"--output",t,"--json",u],g=Number(process.env.OCCLUDER_GUIDED_RADIUS??"");Number.isFinite(g)&&g>0&&e.push("--radius",String(Math.round(g)));let h=Number(process.env.OCCLUDER_GUIDED_EPS??"");Number.isFinite(h)&&h>0&&e.push("--eps",String(h));let i=Number(process.env.OCCLUDER_GUIDED_ERODE??"");Number.isFinite(i)&&i>=0&&e.push("--erode",String(Math.round(i)));let k=(process.env.OCCLUDER_GUIDED_INVERT??"").toLowerCase();("1"===k||"true"===k||"on"===k)&&e.push("--invert");let l=Number(process.env.OCCLUDER_GUIDED_TIMEOUT??""),p=Number.isFinite(l)?Math.max(1e3,l):Math.max(2e4,m),q=[],v=[],w=(0,j.spawn)(f,e,{cwd:d,env:process.env,stdio:["ignore","pipe","pipe"]});w.stdout?.on("data",a=>q.push(Buffer.from(a))),w.stderr?.on("data",a=>v.push(Buffer.from(a)));let x=await new Promise((a,b)=>{let c=!1,d=p>0?setTimeout(()=>{c||(c=!0,w.kill("SIGKILL"),b(Error(`occluder guided filter timed out after ${p}ms`)))},p):null;w.on("error",a=>{c||(c=!0,d&&clearTimeout(d),b(a))}),w.on("close",b=>{c||(c=!0,d&&clearTimeout(d),a(b??-1))})});if(0!==x){let a=Buffer.concat(q).toString("utf8"),b=Buffer.concat(v).toString("utf8");throw Error(`occluder guided filter failed (code ${x}):
stdout: ${a}
stderr: ${b}`)}let{data:y,width:z,height:B}=await s(t),C=await A(u);return{mask:y,width:z,height:B,meta:C}}finally{await l()}}async function x(a){let{data:b,info:c}=await l()(a,{failOnError:!1}).greyscale().resize({width:256,height:256,fit:"inside",withoutEnlargement:!0,kernel:"nearest"}).raw().toBuffer({resolveWithObject:!0}),d=c.width??0,e=c.height??0,f=new Uint8Array(b),g=f.length,h=v(f),i=function(a){let b=0;for(let c=0;c<a.length;c++)a[c]&&(b+=1);return b}(h),j=function(a,b){if(!(b>0))return 0;let c=0,d=1/b;for(let b=0;b<a.length;b++){let e=a[b]??0;if(!e)continue;let f=e*d;c-=f*Math.log2(f)}return c}(h,g),k=function(a,b,c,d=127){if(!(b>1&&c>0))return 0;let e=0;for(let f=0;f<c;f++){let c=f*b,g=+(a[c]>d),h=0;for(let e=1;e<b;e++){let b=+(a[c+e]>d);b!==g&&(h+=1),g=b}e+=h}return e/c}(f,d,e),m=function(a,b,c,d=127){if(!(b>0&&c>1))return 0;let e=0;for(let f=0;f<b;f++){let g=+(a[f]>d),h=0;for(let e=1;e<c;e++){let c=+(a[e*b+f]>d);c!==g&&(h+=1),g=c}e+=h}return e/b}(f,d,e),n={sampleW:d,sampleH:e,bins:i,entropy:Number(j.toFixed(3)),rowTransitions:Number(k.toFixed(2)),colTransitions:Number(m.toFixed(2)),rowTransitionsFrac:d>0?Number((k/d).toFixed(3)):0,colTransitionsFrac:e>0?Number((m/e).toFixed(3)):0},o=d>0&&e>0&&k/Math.max(1,d)>.35&&m/Math.max(1,e)>.35,p=!(i<=12&&j<2.6&&o);return{ok:p,reason:p?void 0:"input_not_depth",metrics:n,preview:d>0&&e>0?{data:f,width:d,height:e}:null}}function y(a,b,c,d=1){let e=Math.max(0,Math.round(d));if(!e)return Uint8Array.from(a);let f=new Uint8Array(a.length);for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=1;for(let f=-e;f<=e&&h;f++){let i=d+f;if(i<0||i>=c){h=0;break}for(let c=-e;c<=e;c++){let d=g+c;if(d<0||d>=b||!a[i*b+d]){h=0;break}}}f[d*b+g]=255*!!h}return f}async function z(a,b,c,d=18,e){let f=await x(a).catch(()=>null);if(f&&!f.ok){let a=new Uint8Array(Math.max(1,b)*Math.max(1,c)),d=f.preview?await u(f.preview.data,f.preview.width,f.preview.height).catch(()=>null):null;return{mask:a,width:b,height:c,threshold:0,occluderThreshold:0,wallDepth:0,histogram:Array(256).fill(0),warnings:null,rejected:{reason:f.reason??"input_not_depth",metrics:f.metrics},debug:{resizedDepthUrl:d,rawUrl:null,processedUrl:null}}}let g=[],h=l()(a,{failOnError:!1}).resize({width:1500,height:1500,fit:"inside",withoutEnlargement:!1,kernel:"lanczos3"}).toColorspace("b-w").blur(.8),{data:i,info:j}=await h.raw().toBuffer({resolveWithObject:!0}),k=j.width??1500,m=j.height??1500,n=v(i),o=0,p=0;for(let a=0;a<80;a++)n[a]>o&&(o=n[a],p=a);let q=Math.max(0,Math.min(255,p+Math.max(8,Math.round(.55*d)))),r=q,s=await u(new Uint8Array(i),k,m).catch(()=>null),A=a=>{let b=new Uint8Array(i.length);for(let c=0;c<i.length;c++)b[c]=255*(i[c]>a);let c=new Uint8Array(i.length);for(let a=2;a<m-2;a++){let d=a*k;for(let e=2;e<k-2;e++){let f=!0;for(let c=-2;c<=2;c++){let d=(a+c)*k;for(let a=-2;a<=2;a++)if(!b[d+(e+a)]){f=!1;break}if(!f)break}c[d+e]=255*!!f}}return{temp:b,eroded:c}},B=Math.max(96,Math.min(160,118+Math.round(.2*d))),C=(process.env.OCCLUDER_GUIDED??"1").toLowerCase();if(e&&"0"!==C&&"false"!==C&&"off"!==C)try{let f=await w(a,e),h=f.mask,i=f.width,j=f.height;if(i!==b||j!==c){let a=await l()(Buffer.from(h),{raw:{width:i,height:j,channels:1}}).resize(b,c,{kernel:"lanczos3"}).threshold(128).raw().toBuffer();h=new Uint8Array(a),i=b,j=c}let o=Uint8Array.from(h),v=Math.max(0,Math.round(Number(process.env.OCCLUDER_TIGHTEN_PX??"0")));if(v>0){let a=y(h,i,j,v);t(a)>.01&&(h=a)}let x=t(h),z=Math.max(0,Math.min(1,Number(process.env.OCCLUDER_GUIDED_MIN_COVERAGE??"0.32"))),C=(process.env.OCCLUDER_GUIDED_MERGE_COARSE??"1").toLowerCase();if("0"!==C&&"false"!==C&&"off"!==C&&x<z){let a=Math.max(6,Math.round(.3*d)),e=Math.max(0,r-a),{temp:f}=A(e),g=await l()(Buffer.from(f),{raw:{width:k,height:m,channels:1}}).blur(.4).resize(b,c,{kernel:"lanczos3"}).threshold(B).raw().toBuffer(),n=new Uint8Array(h.length),o=new Uint8Array(g);for(let a=0;a<n.length;a++)n[a]=h[a]||o[a]?255:0;if(h=n,(x=t(h))<z){let a=function(a,b,c,d=1){let e=Math.max(0,Math.round(d));if(!e)return Uint8Array.from(a);let f=new Uint8Array(a.length);for(let d=0;d<c;d++)for(let g=0;g<b;g++){let h=!1;for(let f=-e;f<=e;f++){let i=d+f;if(i<0||i>=c)continue;let j=i*b;for(let c=-e;c<=e;c++){let d=g+c;if(!(d<0)&&!(d>=b)&&a[j+d]){h=!0;break}}if(h)break}f[d*b+g]=255*!!h}return f}(h,i,j,1);t(a)>x&&(h=a,x=t(h))}}x<.15&&g.push("occluder_undersegmented");let D=await u(o,i,j).catch(()=>null),E=await u(h,i,j).catch(()=>null);return{mask:h,width:i,height:j,threshold:q,occluderThreshold:r,wallDepth:p,histogram:Array.from(n),warnings:g.length?g:null,rejected:null,debug:{resizedDepthUrl:s,rawUrl:D,processedUrl:E}}}catch{g.push("guided_failed")}let{temp:D,eroded:E}=A(r),F=t(E);F<.12?(r=Math.max(0,r-6),{temp:D,eroded:E}=A(r),F=t(E)):F>.6&&(r=Math.min(255,r+6),{temp:D,eroded:E}=A(r),F=t(E));let G=await l()(Buffer.from(E),{raw:{width:k,height:m,channels:1}}).blur(1).resize(b,c,{kernel:"lanczos3"}).threshold(B).toFormat("png").toBuffer(),{data:H,info:I}=await l()(G,{failOnError:!1}).greyscale().raw().toBuffer({resolveWithObject:!0}),J=new Uint8Array(H),K=Math.max(0,Math.round(Number(process.env.OCCLUDER_TIGHTEN_PX??"0")));if(K>0){let a=y(J,I.width??b,I.height??c,K);t(a)>.01&&(J=a)}.15>t(J)&&g.push("occluder_undersegmented");let L=await u(D,k,m).catch(()=>null),M=await u(J,I.width??b,I.height??c).catch(()=>null);return{mask:J,width:I.width??b,height:I.height??c,threshold:q,occluderThreshold:r,wallDepth:p,histogram:Array.from(n),warnings:g.length?g:null,rejected:null,debug:{resizedDepthUrl:s,rawUrl:L,processedUrl:M}}}async function A(a){if(!a)return null;try{let b=await e().readFile(a,"utf8");if(!b.trim())return null;return JSON.parse(b)}catch{return null}}async function B(a,b={}){let{scriptPath:c,projectRoot:d}=await p("occluder_segment.py"),f=q();if(!f)throw Error("no python interpreter available (set OCCLUDER_SEG_PY)");let h=await e().mkdtemp(g().join(i().tmpdir(),"occluder-seg-")),k=(process.env.OCCLUDER_SEG_KEEP_TEMP??"0")==="1",o=async()=>{if(!k)try{await e().rm(h,{recursive:!0,force:!0})}catch{}},u=g().join(h,"input.png"),v=g().join(h,"mask.png"),w=g().join(h,"mask.json"),x=g().join(h,"tile_mask.png");try{await r(a,u);let h=[c,"--image",u,"--output",v,"--json",w];b.samPrompted&&b.tileMask&&b.tileMaskWidth&&b.tileMaskHeight&&b.tileMask&&b.tileMaskWidth&&b.tileMaskHeight&&(await l()(Buffer.from(b.tileMask),{raw:{width:b.tileMaskWidth,height:b.tileMaskHeight,channels:1}}).toColorspace("b-w").png({compressionLevel:4}).toFile(x),h.push("--tile-mask",x,"--sam-prompted")),b.debugDir&&h.push("--debug-dir",b.debugDir);let i=process.env.OCCLUDER_SEG_MODEL;i&&h.push("--model",i);let k=process.env.OCCLUDER_SEG_SAM_CHECKPOINT;k&&h.push("--sam-checkpoint",k);let o=process.env.OCCLUDER_SEG_SAM_MODEL;o&&h.push("--sam-model",o);let p=b.timeoutMs??m,q={...process.env,...b.env??{}},y=[],z=[],B=(0,j.spawn)(f,h,{cwd:d,env:q,stdio:["ignore","pipe","pipe"]});B.stdout?.on("data",a=>y.push(Buffer.from(a))),B.stderr?.on("data",a=>z.push(Buffer.from(a)));let C=await new Promise((a,b)=>{let c=!1,d=p>0?setTimeout(()=>{c||(c=!0,B.kill("SIGKILL"),b(Error(`occluder segmentation timed out after ${p}ms`)))},p):null;B.on("error",a=>{c||(c=!0,d&&clearTimeout(d),b(a))}),B.on("close",b=>{c||(c=!0,d&&clearTimeout(d),a(b??-1))})});if(0!==C){let a=Buffer.concat(y).toString("utf8"),b=Buffer.concat(z).toString("utf8");throw Error(`occluder segmentation failed (code ${C}):
stdout: ${a}
stderr: ${b}`)}let D=await A(w),E="string"==typeof D?.source&&D.source?D.source:k?"yolo+sam":"yolo",{data:F,width:G,height:H}=await s(v),I=t(F),J=b.minCoverage??n,K=E.includes("sam");if(I<=0)throw Error("occluder segmentation returned empty mask");if(I<J&&!K)throw Error(`occluder segmentation coverage ${I.toFixed(4)} below minimum ${J}`);if(I<J&&K&&D&&(D.coverageBelowMin=Number(I.toFixed(6)),D.minCoverage=Number(J.toFixed(6))),b.debugDir)try{await e().mkdir(b.debugDir,{recursive:!0}),await e().copyFile(v,g().join(b.debugDir,g().basename(v))),D&&await e().writeFile(g().join(b.debugDir,"mask.meta.json"),JSON.stringify(D,null,2),"utf8")}catch{}return{mask:F,width:G,height:H,source:E,meta:D}}finally{await o()}}}};

Youez - 2016 - github.com/yon3zu
LinuXploit