mayan-BJLC4cpV.js

12.2 KB · raw

1var e=256,t=285,n=new Uint8Array(e*2),r=new Uint8Array(e);(function(){let e=1;for(let i=0;i<255;i++)n[i]=e,r[e]=i,e<<=1,e&256&&(e^=t);for(let e=255;e<512;e++)n[e]=n[e-255]})();function i(e,t){return e===0||t===0?0:n[r[e]+r[t]]}function a(e,t){if(t===0)throw Error(`rs: divide by zero`);return e===0?0:n[(r[e]+255-r[t])%255]}function o(e,t){return e===0?0:n[r[e]*t%255]}function s(e){if(e===0)throw Error(`rs: inverse of zero`);return n[(255-r[e])%255]}function c(e,t){let n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=i(e[r],t);return n}function l(e,t){let n=Math.max(e.length,t.length),r=new Uint8Array(n);for(let t=0;t<e.length;t++)r[t+n-e.length]=e[t];for(let e=0;e<t.length;e++)r[e+n-t.length]^=t[e];return r}function u(e,t){let n=new Uint8Array(e.length+t.length-1);for(let r=0;r<t.length;r++)if(t[r]!==0)for(let a=0;a<e.length;a++)e[a]!==0&&(n[a+r]^=i(e[a],t[r]));return n}function d(e,t){let n=e[0];for(let r=1;r<e.length;r++)n=i(n,t)^e[r];return n}function f(e){let t=new Uint8Array([1]);for(let r=0;r<e;r++)t=u(t,new Uint8Array([1,n[r]]));return t}var p=new Map;function m(e){let t=p.get(e);return t||(t=f(e),p.set(e,t)),t}function h(e,t){let n=m(t),r=new Uint8Array(e.length+t);r.set(e);for(let t=0;t<e.length;t++){let e=r[t];if(e!==0)for(let a=1;a<n.length;a++)r[t+a]^=i(n[a],e)}return r.set(e),r}function g(e,t){let r=new Uint8Array(t+1);r[0]=0;for(let i=0;i<t;i++)r[i+1]=d(e,n[i]);return r}function _(e,t){let n=new Uint8Array([1]),r=new Uint8Array([1]);for(let a=0;a<t;a++){r=new Uint8Array([...r,0]);let t=e[a+1];for(let r=1;r<n.length;r++)t^=i(n[n.length-1-r],e[a+1-r]);if(t!==0){if(r.length>n.length){let e=c(r,t);r=c(n,s(t)),n=e}n=l(n,c(r,t))}}let a=0;for(;a<n.length&&n[a]===0;)a++;return n=n.slice(a),(n.length-1)*2>t?null:n}function v(e,t){let n=e.length-1,r=[];for(let n=0;n<255;n++)if(d(e,o(2,n))===0){let e=(n-1+255)%255;e<t&&r.push(e)}return r.length===n?r:null}function y(e,t,n){let r=n.map(t=>e.length-1-t),c=(()=>{let e=new Uint8Array([1]);for(let t of r)e=u(e,l(new Uint8Array([1]),new Uint8Array([o(2,t),0])));return e})(),f=new Uint8Array(t.length-1);for(let e=0;e<f.length;e++)f[e]=t[t.length-1-e];let p=u(f,c);p=p.slice(p.length-c.length+1);let m=new Uint8Array(c.length-1);for(let e=0;e<m.length;e++)(c.length-1-e)%2==1&&(m[e]=c[e]);let h=new Uint8Array(e);for(let t=0;t<r.length;t++){let n=r[t],c=o(2,n),l=s(c),u=d(p,l),f=d(m,l);if(f===0)throw Error(`rs: denominator zero in Forney`);let g=i(c,a(u,f));h[e.length-1-n]^=g}return h}function b(e,t){let n=g(e,t),r=!1;for(let e=1;e<n.length;e++)if(n[e]!==0){r=!0;break}if(!r)return e.slice(0,e.length-t);let i=_(n,t);if(!i)return null;let a=v(i,e.length);if(!a)return null;let o;try{o=y(e,n,a)}catch{return null}let s=g(o,t);for(let e=1;e<s.length;e++)if(s[e]!==0)return null;return o.slice(0,e.length-t)}function x(e,t){return h(e,t)}function S(e,t){return b(e,t)}function ee(e){let t=T(e),n=e.width,r=e.height,i=E(t,n,r);if(i.length<3)return null;let a=ne(i);if(!a)return null;let{TL:o,TR:s,BL:c}=a,l=a.modulePx;if(l<1)return null;let u=(Math.hypot(s.x-o.x,s.y-o.y)+Math.hypot(c.x-o.x,c.y-o.y))/2/l,d=Math.round(u)+4+9;d=R(d,64,B);let f=P(t,o,s,c,d);return f?C(f.matrix,f.size):null}function C(e,t){let n=I(e,t,1/0),r=new Uint8Array(L(n));if(r.length===0)return null;let i=Math.floor(r.length/z);for(let e=1;r[0]===77&&e<=i&&!(5*e>=r.length);e++){if(r[e]!==2)continue;let t=r[2*e]|r[3*e]<<8|r[4*e]<<16|r[5*e]<<24;if(t<0||t>1e8||Math.ceil((t+6)/204)!==e)continue;let n=w(r,e);if(!n||n[0]!==77||n[1]!==2)continue;let i=n[2]|n[3]<<8|n[4]<<16|n[5]<<24;if(!(i<0||i+6>n.length))return n.slice(6,6+i)}for(let e=1;e<=i;e++){let t=w(r,e);if(!t||t[0]!==77||t[1]!==2)continue;let n=t[2]|t[3]<<8|t[4]<<16|t[5]<<24;if(!(n<0||n+6>t.length)&&Math.ceil((n+6)/204)===e)return t.slice(6,6+n)}return null}function w(e,t){if(e.length<t*z)return null;let n=new Uint8Array(t*204),r=new Uint8Array(z);for(let i=0;i<t;i++){for(let n=0;n<z;n++)r[n]=e[i+n*t];let a=S(r,51);if(!a)return null;n.set(a,i*204)}return n}function T(e){let{data:t,width:n,height:r}=e,i=Array.from({length:r},()=>Array(n).fill(!1)),a=new Float64Array((n+1)*(r+1));for(let e=0;e<r;e++){let r=0;for(let i=0;i<n;i++){let o=(e*n+i)*4,s=.299*t[o]+.587*t[o+1]+.114*t[o+2];r+=s,a[(e+1)*(n+1)+(i+1)]=a[e*(n+1)+(i+1)]+r}}for(let e=0;e<r;e++)for(let o=0;o<n;o++){let s=(e*n+o)*4,c=.299*t[s]+.587*t[s+1]+.114*t[s+2],l=Math.max(0,o-9),u=Math.max(0,e-9),d=Math.min(n-1,o+9),f=Math.min(r-1,e+9),p=a[(f+1)*(n+1)+(d+1)]-a[u*(n+1)+(d+1)]-a[(f+1)*(n+1)+l]+a[u*(n+1)+l],m=(d-l+1)*(f-u+1);i[e][o]=c<p/m-8}return i}function E(e,t,n){let r=[];for(let i=0;i<n;i+=2)O(t=>e[i]?.[t]??!1,t,(e,t)=>r.push({cx:e,cy:i,modulePx:t}));let i=[];for(let a of r){if(a.cx<0||a.cx>=t)continue;let r=[];O(t=>e[t]?.[a.cx]??!1,n,(e,t)=>r.push({cy:e,modulePx:t}));let o=null;for(let e of r)Math.abs(e.cy-a.cy)>a.modulePx*5||(!o||Math.abs(e.cy-a.cy)<Math.abs(o.cy-a.cy))&&(o=e);if(!o)continue;let s=Math.round((a.cy+o.cy)/2),c=(a.modulePx+o.modulePx)/2;D(e,a.cx,s,c,t,n)&&i.push({cx:a.cx,cy:s,modulePx:c})}return te(i)}function D(e,t,n,r,i,a){let o=r,s=0,c=0;for(let r=-1;r<=1;r++)for(let l=-1;l<=1;l++){let u=Math.round(t+l*o),d=Math.round(n+r*o);if(u<0||u>=i||d<0||d>=a)return!1;c++,e[d][u]&&s++}if(s<c*.8)return!1;let l=0,u=0;for(let r=-2;r<=2;r++)for(let s=-2;s<=2;s++){if(Math.abs(r)<2&&Math.abs(s)<2)continue;let c=Math.round(t+s*o),d=Math.round(n+r*o);c<0||c>=i||d<0||d>=a||(u++,e[d][c]||l++)}return u>0&&l>=u*.5}function O(e,t,n){let r=[],i=0,a=e(0),o=0;for(;i<=t;){let s=i<t?e(i):!a;if((s!==a||i===t)&&(r.push({len:i-o,dark:a,start:o}),o=i,a=s,r.length>5&&r.shift(),r.length===5)){let[e,t,i,a,o]=r;if(!e.dark&&t.dark&&!i.dark&&a.dark&&!o.dark){let r=(e.len+t.len+i.len+a.len+o.len)/7;if(r>=1&&k(e.len,r,.5)&&k(t.len,r,.5)&&k(i.len,r*3,.8)&&k(a.len,r,.5)&&k(o.len,r,.5)){let e=i.start+i.len/2;n(Math.round(e),r)}}if(e.dark&&!t.dark&&i.dark&&!a.dark&&o.dark){let r=(e.len+t.len+i.len+a.len+o.len)/7;if(r>=1&&k(e.len,r,.5)&&k(t.len,r,.5)&&k(i.len,r*3,.8)&&k(a.len,r,.5)&&k(o.len,r,.5)){let e=i.start+i.len/2;n(Math.round(e),r)}}}i++}}function k(e,t,n){return Math.abs(e-t)<=t*n}function te(e){let t=[];for(let n of e){let e=!1;for(let r of t){let t=r[0];if((n.cx-t.cx)**2+(n.cy-t.cy)**2<=(t.modulePx*3)**2){r.push(n),e=!0;break}}e||t.push([n])}return t.map(e=>{let t=0,n=0,r=0;for(let i of e)t+=i.cx,n+=i.cy,r+=i.modulePx;return{cx:t/e.length,cy:n/e.length,modulePx:r/e.length}})}function ne(e){if(e.length<3)return null;let t=null,n=e.length;for(let r=0;r<n;r++)for(let i=0;i<n;i++)if(i!==r)for(let a=0;a<n;a++){if(a===r||a===i)continue;let n=e[r],o=e[i],s=e[a],c={x:o.cx-n.cx,y:o.cy-n.cy},l={x:s.cx-n.cx,y:s.cy-n.cy},u=Math.hypot(c.x,c.y),d=Math.hypot(l.x,l.y);if(u<1||d<1||c.x*l.y-c.y*l.x<=0)continue;let f=(c.x*l.x+c.y*l.y)/(u*d),p=-Math.abs(f),m=Math.min(u,d)/Math.max(u,d),h=-Math.abs(1-m),g=(n.modulePx+o.modulePx+s.modulePx)/3,_=((n.modulePx-g)**2+(o.modulePx-g)**2+(s.modulePx-g)**2)/3,v=-Math.sqrt(_)/Math.max(g,1),y=Math.log(u+d)*.1,b=p*5+h*5+v*8+y;(!t||b>t.score)&&(t={TL:n,TR:o,BL:s,score:b})}if(!t)return null;let r=(t.TL.modulePx+t.TR.modulePx+t.BL.modulePx)/3;return{TL:{x:t.TL.cx,y:t.TL.cy},TR:{x:t.TR.cx,y:t.TR.cy},BL:{x:t.BL.cx,y:t.BL.cy},modulePx:r}}function re(e,t){if(e.length!==4||t.length!==4)return null;let n=[],r=[];for(let i=0;i<4;i++){let a=e[i].x,o=e[i].y,s=t[i].x,c=t[i].y;n.push([a,o,1,0,0,0,-a*s,-o*s]),r.push(s),n.push([0,0,0,a,o,1,-a*c,-o*c]),r.push(c)}let i=A(n,r);return i?[i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],1]:null}function A(e,t){let n=e.map((e,n)=>[...e,t[n]]);for(let e=0;e<8;e++){let t=e;for(let r=e+1;r<8;r++)Math.abs(n[r][e])>Math.abs(n[t][e])&&(t=r);if(Math.abs(n[t][e])<1e-12)return null;[n[e],n[t]]=[n[t],n[e]];for(let t=0;t<8;t++){if(t===e)continue;let r=n[t][e]/n[e][e];if(r!==0)for(let i=e;i<=8;i++)n[t][i]-=r*n[e][i]}}let r=Array(8);for(let e=0;e<8;e++)r[e]=n[e][8]/n[e][e];return r}function j(e,t,n){let r=e[6]*t+e[7]*n+e[8];return{x:(e[0]*t+e[1]*n+e[2])/r,y:(e[3]*t+e[4]*n+e[5])/r}}function M(e,t){let n=6.5,r=6.5,i=e-2-5+.5,a=e-2-5+.5;switch(t){case`TL`:return{x:n,y:r};case`TR`:return{x:i,y:r};case`BL`:return{x:n,y:a};case`BR`:return{x:i,y:a}}}function N(e,t,n,r,i){let a=[t,n,r,{x:t.x+(n.x-t.x)+(r.x-t.x),y:t.y+(n.y-t.y)+(r.y-t.y)}],o=re([M(i,`TL`),M(i,`TR`),M(i,`BL`),M(i,`BR`)],a);if(!o)return null;let s=Array.from({length:i},()=>Array(i).fill(!1)),c=e.length,l=e[0]?.length??0;for(let t=0;t<i;t++)for(let n=0;n<i;n++){let r=j(o,n+.5,t+.5),i=Math.round(r.x),a=Math.round(r.y);a>=0&&a<c&&i>=0&&i<l&&(s[t][n]=e[a][i])}return s}function P(e,t,n,r,i){let a=N(e,t,n,r,i);if(!a)return null;let o=F(a);if(o>=64&&o<=1024&&o!==i){let i=N(e,t,n,r,o);return i?{matrix:i,size:o}:null}return o<64||o>1024?{matrix:a,size:i}:{matrix:a,size:o}}function F(e){let t=0;for(let n=0;n<16;n++)e[2]?.[12+n]&&(t|=1<<15-n);return t}function I(e,t,n){let r=[];for(let i=2;i<t-2&&r.length<n;i++){let a=e[i];if(a)for(let e=2;e<t-2&&r.length<n;e++)Q(i,e,t)||r.push(a[e]??!1)}return r}function L(e){let t=[];for(let n=0;n<e.length;n+=8){let r=0;for(let t=0;t<8&&n+t<e.length;t++)e[n+t]&&(r|=1<<7-t);t.push(r)}return t}function R(e,t,n){return Math.max(t,Math.min(n,e))}var z=255,B=1024,V=1e5;function H(e){let t=e+6,n=Math.max(1,Math.ceil(t/204))*z*8;for(let e=64;e<=B;e++)if(U(e)>=n)return e;return B}function U(e){let t=0;return t+=W(e),t+=243,t+=16,t+=G(e),t+=K(e)-q(e),e*e-t}function W(e){return 4*e*2-16}function G(e){let t=e-22;return Math.max(0,2*t)}function K(e){return 729}function q(e){let t=Math.floor(e/2),n=11>=t-13&&11<=t+13,r=11>=t-13&&11<=t+13;return(n?27:0)+(r?27:0)}function J(e,t,n){for(let r=0;r<9;r++)for(let i=0;i<9;i++)e[t+r][n+i]=!1;let r=[[1,1,1,1,1,1,1],[1,0,0,0,0,0,1],[1,0,1,1,1,0,1],[1,0,1,1,1,0,1],[1,0,1,1,1,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]];for(let i=0;i<7;i++)for(let a=0;a<7;a++)e[t+1+i][n+1+a]=r[i][a]===1}function Y(e,t){J(e,2,2),J(e,2,t-2-9),J(e,t-2-9,2)}function ie(e,t){for(let n=0;n<16;n++)e[2][12+n]=(t>>15-n&1)==1}function ae(){return{row:2,colStart:12,colEnd:28}}function oe(e,t){let n=t-2-9;for(let t=11;t<n;t++)e[11][t]=(t&1)==0;for(let t=11;t<n;t++)e[t][11]=(t&1)==0}function X(e,t,n,r,i){for(let a=0;a<r;a++)for(let r=0;r<i;r++){let i=t+a,o=n+r;i>=0&&i<e.length&&o>=0&&o<e[0].length&&(e[i][o]=!0)}}function Z(e,t,n,r,i,a,o,s){let c=Math.max(Math.abs(a-r),Math.abs(o-i)),l=Math.floor(s/2);for(let u=0;u<=c;u++){let d=Math.round(r+(a-r)*u/c),f=Math.round(i+(o-i)*u/c);X(e,t+d-l,n+f-l,s,s)}}function se(e,t,n){let r=t-11,i=n-11,a=[1,11],o=[10,21],s=[19,11],c=[10,1];Z(e,r,i,a[0],a[1],o[0],o[1],3),Z(e,r,i,o[0],o[1],s[0],s[1],3),Z(e,r,i,s[0],s[1],c[0],c[1],3),Z(e,r,i,c[0],c[1],a[0],a[1],3),Z(e,r,i,19,8,22,4,3),Z(e,r,i,19,14,22,18,3),X(e,r+0,i+20,3,3)}function Q(e,t,n){if(e<2||e>=n-2||t<2||t>=n-2||e<11&&t<11||e<11&&t>=n-11||e>=n-11&&t<11)return!0;let r=ae();if(e===r.row&&t>=r.colStart&&t<r.colEnd)return!0;let i=n-11;if(e===11&&t>=11&&t<i||t===11&&e>=11&&e<i)return!0;let a=Math.floor(n/2);return e>=a-13&&e<=a+13&&t>=a-13&&t<=a+13}function ce(e){let t=new Uint8Array(6);t[0]=77,t[1]=2;let n=e.length;t[2]=n&255,t[3]=n>>8&255,t[4]=n>>16&255,t[5]=n>>24&255;let r=new Uint8Array(6+e.length);return r.set(t),r.set(e,6),r}function le(e){let t=Math.ceil(e.length/204),n=[];for(let r=0;r<t;r++){let t=e.subarray(r*204,(r+1)*204),i=t.length===204?t:(()=>{let e=new Uint8Array(204);return e.set(t),e})();n.push(x(i,51))}let r=new Uint8Array(t*z);for(let e=0;e<t;e++)for(let i=0;i<z;i++)r[e+i*t]=n[e][i];return{interleaved:r,numBlocks:t}}function $(e){if(e.length>1e5)throw Error(`Mayan payload too large: ${e.length} bytes (max ${V})`);let t=H(e.length);if(t>1024)throw Error(`Mayan: symbol size ${t} exceeds max ${B}`);let n=Math.floor(t/2),{interleaved:r}=le(ce(e)),i=Array(r.length*8);for(let e=0;e<r.length;e++){let t=r[e];for(let n=0;n<8;n++)i[e*8+n]=(t>>7-n&1)==1}let a=Array.from({length:t},()=>Array(t).fill(!1));Y(a,t),ie(a,t),oe(a,t),se(a,n,n);let o=0;for(let e=2;e<t-2&&o<i.length;e++)for(let n=2;n<t-2&&o<i.length;n++)Q(e,n,t)||(a[e][n]=i[o++]);return{matrix:a,size:t}}function ue(e,t=3){let{matrix:n,size:r}=$(e),i=de(n,r,t),a=r<=350?`A4`:r<=500?`A3`:`A3-required`;return{canvas:i,symbolSize:r,payloadBytes:e.length,printable:a===`A4`,paperSize:a}}function de(e,t,n){let r=document.createElement(`canvas`);r.width=t*n,r.height=t*n;let i=r.getContext(`2d`);if(!i)throw Error(`Mayan: 2D canvas unavailable`);i.fillStyle=`#ffffff`,i.fillRect(0,0,r.width,r.height),i.fillStyle=`#000000`;for(let r=0;r<t;r++)for(let a=0;a<t;a++)e[r][a]&&i.fillRect(a*n,r*n,n,n);return r}export{V as MAX_PAYLOAD_BYTES,ee as decodeMayan,ue as encodeMayan};