From e7d9f080c6263ec9e4d97c60e340dab7f38c9982 Mon Sep 17 00:00:00 2001 From: iFwu Date: Thu, 10 Oct 2024 14:36:01 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20iFwu/xia?= =?UTF-8?q?ngqi-analysis@d92b2260e448c1c1c5a85d136e6b30e636d07baa=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/{index-RKGJE9jY.js => index-DHQIpzjH.js} | 10 +++++----- index.html | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) rename assets/{index-RKGJE9jY.js => index-DHQIpzjH.js} (64%) diff --git a/assets/index-RKGJE9jY.js b/assets/index-DHQIpzjH.js similarity index 64% rename from assets/index-RKGJE9jY.js rename to assets/index-DHQIpzjH.js index 67c68f7..dd2bb33 100644 --- a/assets/index-RKGJE9jY.js +++ b/assets/index-DHQIpzjH.js @@ -1,11 +1,11 @@ -var po=Object.defineProperty;var ue=i=>{throw TypeError(i)};var wo=(i,e,o)=>e in i?po(i,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[e]=o;var fe=(i,e,o)=>wo(i,typeof e!="symbol"?e+"":e,o),Gt=(i,e,o)=>e.has(i)||ue("Cannot "+o);var st=(i,e,o)=>(Gt(i,e,"read from private field"),o?o.call(i):e.get(i)),Ot=(i,e,o)=>e.has(i)?ue("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,o),Rt=(i,e,o,t)=>(Gt(i,e,"write to private field"),t?t.call(i,o):e.set(i,o),o),Bt=(i,e,o)=>(Gt(i,e,"access private method"),o);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))t(n);new MutationObserver(n=>{for(const s of n)if(s.type==="childList")for(const l of s.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&t(l)}).observe(document,{childList:!0,subtree:!0});function o(n){const s={};return n.integrity&&(s.integrity=n.integrity),n.referrerPolicy&&(s.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?s.credentials="include":n.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function t(n){if(n.ep)return;n.ep=!0;const s=o(n);fetch(n.href,s)}})();var Jt,O,Qe,ct,me,Je,Pt,ee,Xt,Zt,Et={},Ae=[],Eo=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,oe=Array.isArray;function ht(i,e){for(var o in e)i[o]=e[o];return i}function We(i){i&&i.parentNode&&i.parentNode.removeChild(i)}function _o(i,e,o){var t,n,s,l={};for(s in e)s=="key"?t=e[s]:s=="ref"?n=e[s]:l[s]=e[s];if(arguments.length>2&&(l.children=arguments.length>3?Jt.call(arguments,2):o),typeof i=="function"&&i.defaultProps!=null)for(s in i.defaultProps)l[s]===void 0&&(l[s]=i.defaultProps[s]);return It(i,l,t,n,null)}function It(i,e,o,t,n){var s={type:i,props:e,key:o,ref:t,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:n??++Qe,__i:-1,__u:0};return n==null&&O.vnode!=null&&O.vnode(s),s}function qt(i){return i.children}function Mt(i,e){this.props=i,this.context=e}function dt(i,e){if(e==null)return i.__?dt(i.__,i.__i+1):null;for(var o;ee&&ct.sort(Pt));Tt.__r=0}function Ye(i,e,o,t,n,s,l,r,h,c,f){var u,g,d,p,E,q=t&&t.__k||Ae,a=e.length;for(o.__d=h,yo(o,e,q),h=o.__d,u=0;u0?It(n.type,n.props,n.key,n.ref?n.ref:null,n.__v):n).__=i,n.__b=i.__b+1,s=null,(r=n.__i=So(n,o,l,f))!==-1&&(f--,(s=o[r])&&(s.__u|=131072)),s==null||s.__v===null?(r==-1&&u--,typeof n.type!="function"&&(n.__u|=65536)):r!==l&&(r==l-1?u--:r==l+1?u++:(r>l?u--:u++,n.__u|=65536))):n=i.__k[t]=null;if(f)for(t=0;t(h!=null&&!(131072&h.__u)?1:0))for(;l>=0||r=0){if((h=e[l])&&!(131072&h.__u)&&n==h.key&&s===h.type)return l;l--}if(r=o.__.length&&o.__.push({}),o.__[i]}function Z(i){return yt=1,Vo(Xe,i)}function Vo(i,e,o){var t=ie(_t++,2);if(t.t=i,!t.__c&&(t.__=[Xe(void 0,e),function(r){var h=t.__N?t.__N[0]:t.__[0],c=t.t(h,r);h!==c&&(t.__N=[c,t.__[1]],t.__c.setState({}))}],t.__c=P,!P.u)){var n=function(r,h,c){if(!t.__c.__H)return!0;var f=t.__c.__H.__.filter(function(g){return!!g.__c});if(f.every(function(g){return!g.__N}))return!s||s.call(this,r,h,c);var u=!1;return f.forEach(function(g){if(g.__N){var d=g.__[0];g.__=g.__N,g.__N=void 0,d!==g.__[0]&&(u=!0)}}),!(!u&&t.__c.props===r)&&(!s||s.call(this,r,h,c))};P.u=!0;var s=P.shouldComponentUpdate,l=P.componentWillUpdate;P.componentWillUpdate=function(r,h,c){if(this.__e){var f=s;s=void 0,n(r,h,c),s=f}l&&l.call(this,r,h,c)},P.shouldComponentUpdate=n}return t.__N||t.__}function it(i,e){var o=ie(_t++,3);!X.__s&&Pe(o.__H,e)&&(o.__=i,o.i=e,P.__H.__h.push(o))}function De(i){return yt=5,ze(function(){return{current:i}},[])}function ze(i,e){var o=ie(_t++,7);return Pe(o.__H,e)&&(o.__=i(),o.__H=e,o.__h=i),o.__}function bo(i,e){return yt=8,ze(function(){return i},e)}function Fo(){for(var i;i=Be.shift();)if(i.__P&&i.__H)try{i.__H.__h.forEach(Nt),i.__H.__h.forEach(Ht),i.__H.__h=[]}catch(e){i.__H.__h=[],X.__e(e,i.__v)}}X.__b=function(i){P=null,Ee&&Ee(i)},X.__=function(i,e){i&&e.__k&&e.__k.__m&&(i.__m=e.__k.__m),qe&&qe(i,e)},X.__r=function(i){_e&&_e(i),_t=0;var e=(P=i.__c).__H;e&&(Dt===P?(e.__h=[],P.__h=[],e.__.forEach(function(o){o.__N&&(o.__=o.__N),o.i=o.__N=void 0})):(e.__h.forEach(Nt),e.__h.forEach(Ht),e.__h=[],_t=0)),Dt=P},X.diffed=function(i){ye&&ye(i);var e=i.__c;e&&e.__H&&(e.__H.__h.length&&(Be.push(e)!==1&&we===X.requestAnimationFrame||((we=X.requestAnimationFrame)||ko)(Fo)),e.__H.__.forEach(function(o){o.i&&(o.__H=o.i),o.i=void 0})),Dt=P=null},X.__c=function(i,e){e.some(function(o){try{o.__h.forEach(Nt),o.__h=o.__h.filter(function(t){return!t.__||Ht(t)})}catch(t){e.some(function(n){n.__h&&(n.__h=[])}),e=[],X.__e(t,o.__v)}}),Se&&Se(i,e)},X.unmount=function(i){Ue&&Ue(i);var e,o=i.__c;o&&o.__H&&(o.__H.__.forEach(function(t){try{Nt(t)}catch(n){e=n}}),o.__H=void 0,e&&X.__e(e,o.__v))};var ve=typeof requestAnimationFrame=="function";function ko(i){var e,o=function(){clearTimeout(t),ve&&cancelAnimationFrame(e),setTimeout(i)},t=setTimeout(o,100);ve&&(e=requestAnimationFrame(o))}function Nt(i){var e=P,o=i.__c;typeof o=="function"&&(i.__c=void 0,o()),P=e}function Ht(i){var e=P;i.__c=i.__(),P=e}function Pe(i,e){return!i||i.length!==e.length||e.some(function(o,t){return o!==i[t]})}function Xe(i,e){return typeof e=="function"?e(i):e}function At(i,e){let o=0;for(let t=0;tl&&(l=h,s=r)}}else if(typeof t=="function"){let l=Number.MAX_VALUE;for(let r=0;rt)return!1;return!0}class Ko{constructor(e,o,t,n,s){this.clusters=e,this.centroids=o,this.converged=t,this.iterations=n,this.distance=s}nearest(e){const o=new Array(e.length);return Ze(e,this.centroids,o,this.distance)}computeInformation(e){let o=this.centroids.map(t=>({centroid:t,error:0,size:0}));for(let t=0;ti.length||!Number.isInteger(e))throw new Error("K should be a positive integer smaller than the number of points")}function He(i){if(i.__esModule)return i;var e=i.default;if(typeof e=="function"){var o=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};o.prototype=e.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(i).forEach(function(t){var n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(o,t,n.get?n:{enumerable:!0,get:function(){return i[t]}})}),o}var J={};const Qo=Object.prototype.toString;function St(i){const e=Qo.call(i);return e.endsWith("Array]")&&!e.includes("Big")}const Jo=Object.freeze(Object.defineProperty({__proto__:null,isAnyArray:St},Symbol.toStringTag,{value:"Module"})),Ao=He(Jo);function Wo(i){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!St(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var o=e.fromIndex,t=o===void 0?0:o,n=e.toIndex,s=n===void 0?i.length:n;if(t<0||t>=i.length||!Number.isInteger(t))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=t||s>i.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var l=i[t],r=t+1;rl&&(l=i[r]);return l}function jo(i){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!St(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var o=e.fromIndex,t=o===void 0?0:o,n=e.toIndex,s=n===void 0?i.length:n;if(t<0||t>=i.length||!Number.isInteger(t))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=t||s>i.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var l=i[t],r=t+1;r1&&arguments[1]!==void 0?arguments[1]:{};if(St(i)){if(i.length===0)throw new TypeError("input must not be empty")}else throw new TypeError("input must be an array");var o;if(e.output!==void 0){if(!St(e.output))throw new TypeError("output option must be an array if specified");o=e.output}else o=new Array(i.length);var t=jo(i),n=Wo(i);if(t===n)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=e.min,l=s===void 0?e.autoMinMax?t:0:s,r=e.max,h=r===void 0?e.autoMinMax?n:1:r;if(l>=h)throw new RangeError("min option must be smaller than max option");for(var c=(h-l)/(n-t),f=0;f{throw TypeError(i)};var Eo=(i,e,o)=>e in i?wo(i,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[e]=o;var me=(i,e,o)=>Eo(i,typeof e!="symbol"?e+"":e,o),Ot=(i,e,o)=>e.has(i)||fe("Cannot "+o);var st=(i,e,o)=>(Ot(i,e,"read from private field"),o?o.call(i):e.get(i)),Bt=(i,e,o)=>e.has(i)?fe("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,o),Rt=(i,e,o,t)=>(Ot(i,e,"write to private field"),t?t.call(i,o):e.set(i,o),o),Dt=(i,e,o)=>(Ot(i,e,"access private method"),o);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))t(n);new MutationObserver(n=>{for(const s of n)if(s.type==="childList")for(const l of s.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&t(l)}).observe(document,{childList:!0,subtree:!0});function o(n){const s={};return n.integrity&&(s.integrity=n.integrity),n.referrerPolicy&&(s.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?s.credentials="include":n.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function t(n){if(n.ep)return;n.ep=!0;const s=o(n);fetch(n.href,s)}})();var Jt,O,Ae,ct,ge,We,Xt,oe,Zt,Ht,_t={},je=[],_o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ne=Array.isArray;function ht(i,e){for(var o in e)i[o]=e[o];return i}function Ye(i){i&&i.parentNode&&i.parentNode.removeChild(i)}function yo(i,e,o){var t,n,s,l={};for(s in e)s=="key"?t=e[s]:s=="ref"?n=e[s]:l[s]=e[s];if(arguments.length>2&&(l.children=arguments.length>3?Jt.call(arguments,2):o),typeof i=="function"&&i.defaultProps!=null)for(s in i.defaultProps)l[s]===void 0&&(l[s]=i.defaultProps[s]);return It(i,l,t,n,null)}function It(i,e,o,t,n){var s={type:i,props:e,key:o,ref:t,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:n??++Ae,__i:-1,__u:0};return n==null&&O.vnode!=null&&O.vnode(s),s}function qt(i){return i.children}function Mt(i,e){this.props=i,this.context=e}function dt(i,e){if(e==null)return i.__?dt(i.__,i.__i+1):null;for(var o;ee&&ct.sort(Xt));Tt.__r=0}function Ge(i,e,o,t,n,s,l,r,h,c,f){var u,g,d,p,_,q=t&&t.__k||je,a=e.length;for(o.__d=h,So(o,e,q),h=o.__d,u=0;u0?It(n.type,n.props,n.key,n.ref?n.ref:null,n.__v):n).__=i,n.__b=i.__b+1,s=null,(r=n.__i=Uo(n,o,l,f))!==-1&&(f--,(s=o[r])&&(s.__u|=131072)),s==null||s.__v===null?(r==-1&&u--,typeof n.type!="function"&&(n.__u|=65536)):r!==l&&(r==l-1?u--:r==l+1?u++:(r>l?u--:u++,n.__u|=65536))):n=i.__k[t]=null;if(f)for(t=0;t(h!=null&&!(131072&h.__u)?1:0))for(;l>=0||r=0){if((h=e[l])&&!(131072&h.__u)&&n==h.key&&s===h.type)return l;l--}if(r=o.__.length&&o.__.push({}),o.__[i]}function Z(i){return yt=1,bo(Ze,i)}function bo(i,e,o){var t=At(wt++,2);if(t.t=i,!t.__c&&(t.__=[Ze(void 0,e),function(r){var h=t.__N?t.__N[0]:t.__[0],c=t.t(h,r);h!==c&&(t.__N=[c,t.__[1]],t.__c.setState({}))}],t.__c=P,!P.u)){var n=function(r,h,c){if(!t.__c.__H)return!0;var f=t.__c.__H.__.filter(function(g){return!!g.__c});if(f.every(function(g){return!g.__N}))return!s||s.call(this,r,h,c);var u=!1;return f.forEach(function(g){if(g.__N){var d=g.__[0];g.__=g.__N,g.__N=void 0,d!==g.__[0]&&(u=!0)}}),!(!u&&t.__c.props===r)&&(!s||s.call(this,r,h,c))};P.u=!0;var s=P.shouldComponentUpdate,l=P.componentWillUpdate;P.componentWillUpdate=function(r,h,c){if(this.__e){var f=s;s=void 0,n(r,h,c),s=f}l&&l.call(this,r,h,c)},P.shouldComponentUpdate=n}return t.__N||t.__}function rt(i,e){var o=At(wt++,3);!X.__s&&re(o.__H,e)&&(o.__=i,o.i=e,P.__H.__h.push(o))}function Fo(i,e){var o=At(wt++,4);!X.__s&&re(o.__H,e)&&(o.__=i,o.i=e,P.__h.push(o))}function Pe(i){return yt=5,Xe(function(){return{current:i}},[])}function Xe(i,e){var o=At(wt++,7);return re(o.__H,e)&&(o.__=i(),o.__H=e,o.__h=i),o.__}function ko(i,e){return yt=8,Xe(function(){return i},e)}function Io(){for(var i;i=ze.shift();)if(i.__P&&i.__H)try{i.__H.__h.forEach(Nt),i.__H.__h.forEach($t),i.__H.__h=[]}catch(e){i.__H.__h=[],X.__e(e,i.__v)}}X.__b=function(i){P=null,_e&&_e(i)},X.__=function(i,e){i&&e.__k&&e.__k.__m&&(i.__m=e.__k.__m),ve&&ve(i,e)},X.__r=function(i){ye&&ye(i),wt=0;var e=(P=i.__c).__H;e&&(zt===P?(e.__h=[],P.__h=[],e.__.forEach(function(o){o.__N&&(o.__=o.__N),o.i=o.__N=void 0})):(e.__h.forEach(Nt),e.__h.forEach($t),e.__h=[],wt=0)),zt=P},X.diffed=function(i){Se&&Se(i);var e=i.__c;e&&e.__H&&(e.__H.__h.length&&(ze.push(e)!==1&&Ee===X.requestAnimationFrame||((Ee=X.requestAnimationFrame)||Mo)(Io)),e.__H.__.forEach(function(o){o.i&&(o.__H=o.i),o.i=void 0})),zt=P=null},X.__c=function(i,e){e.some(function(o){try{o.__h.forEach(Nt),o.__h=o.__h.filter(function(t){return!t.__||$t(t)})}catch(t){e.some(function(n){n.__h&&(n.__h=[])}),e=[],X.__e(t,o.__v)}}),Ue&&Ue(i,e)},X.unmount=function(i){qe&&qe(i);var e,o=i.__c;o&&o.__H&&(o.__H.__.forEach(function(t){try{Nt(t)}catch(n){e=n}}),o.__H=void 0,e&&X.__e(e,o.__v))};var Re=typeof requestAnimationFrame=="function";function Mo(i){var e,o=function(){clearTimeout(t),Re&&cancelAnimationFrame(e),setTimeout(i)},t=setTimeout(o,100);Re&&(e=requestAnimationFrame(o))}function Nt(i){var e=P,o=i.__c;typeof o=="function"&&(i.__c=void 0,o()),P=e}function $t(i){var e=P;i.__c=i.__(),P=e}function re(i,e){return!i||i.length!==e.length||e.some(function(o,t){return o!==i[t]})}function Ze(i,e){return typeof e=="function"?e(i):e}function Wt(i,e){let o=0;for(let t=0;tl&&(l=h,s=r)}}else if(typeof t=="function"){let l=Number.MAX_VALUE;for(let r=0;rt)return!1;return!0}class xo{constructor(e,o,t,n,s){this.clusters=e,this.centroids=o,this.converged=t,this.iterations=n,this.distance=s}nearest(e){const o=new Array(e.length);return He(e,this.centroids,o,this.distance)}computeInformation(e){let o=this.centroids.map(t=>({centroid:t,error:0,size:0}));for(let t=0;ti.length||!Number.isInteger(e))throw new Error("K should be a positive integer smaller than the number of points")}function $e(i){if(i.__esModule)return i;var e=i.default;if(typeof e=="function"){var o=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};o.prototype=e.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(i).forEach(function(t){var n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(o,t,n.get?n:{enumerable:!0,get:function(){return i[t]}})}),o}var J={};const Ao=Object.prototype.toString;function St(i){const e=Ao.call(i);return e.endsWith("Array]")&&!e.includes("Big")}const Wo=Object.freeze(Object.defineProperty({__proto__:null,isAnyArray:St},Symbol.toStringTag,{value:"Module"})),jo=$e(Wo);function Yo(i){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!St(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var o=e.fromIndex,t=o===void 0?0:o,n=e.toIndex,s=n===void 0?i.length:n;if(t<0||t>=i.length||!Number.isInteger(t))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=t||s>i.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var l=i[t],r=t+1;rl&&(l=i[r]);return l}function Lo(i){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!St(i))throw new TypeError("input must be an array");if(i.length===0)throw new TypeError("input must not be empty");var o=e.fromIndex,t=o===void 0?0:o,n=e.toIndex,s=n===void 0?i.length:n;if(t<0||t>=i.length||!Number.isInteger(t))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=t||s>i.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var l=i[t],r=t+1;r1&&arguments[1]!==void 0?arguments[1]:{};if(St(i)){if(i.length===0)throw new TypeError("input must not be empty")}else throw new TypeError("input must be an array");var o;if(e.output!==void 0){if(!St(e.output))throw new TypeError("output option must be an array if specified");o=e.output}else o=new Array(i.length);var t=Lo(i),n=Yo(i);if(t===n)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=e.min,l=s===void 0?e.autoMinMax?t:0:s,r=e.max,h=r===void 0?e.autoMinMax?n:1:r;if(l>=h)throw new RangeError("min option must be smaller than max option");for(var c=(h-l)/(n-t),f=0;f=0&&o?` ${Ve(i,e-1)}`:Ve(i,e)).padEnd(e)}function Ve(i,e){let o=i.toString();if(o.length<=e)return o;let t=i.toFixed(e);if(t.length>e&&(t=i.toFixed(Math.max(0,e-(t.length-e)))),t.length<=e&&!t.startsWith("0.000")&&!t.startsWith("-0.000"))return t;let n=i.toExponential(e);return n.length>e&&(n=i.toExponential(Math.max(0,e-(n.length-e)))),n.slice(0)}function zo(i,e){i.prototype.add=function(t){return typeof t=="number"?this.addS(t):this.addM(t)},i.prototype.addS=function(t){for(let n=0;n>t);return this},i.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n>t.get(n,s));return this},i.signPropagatingRightShift=function(t,n){return new e(t).signPropagatingRightShift(n)},i.prototype.rightShift=function(t){return typeof t=="number"?this.rightShiftS(t):this.rightShiftM(t)},i.prototype.rightShiftS=function(t){for(let n=0;n>>t);return this},i.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n>>t.get(n,s));return this},i.rightShift=function(t,n){return new e(t).rightShift(n)},i.prototype.zeroFillRightShift=i.prototype.rightShift,i.prototype.zeroFillRightShiftS=i.prototype.rightShiftS,i.prototype.zeroFillRightShiftM=i.prototype.rightShiftM,i.zeroFillRightShift=i.rightShift,i.prototype.not=function(){for(let t=0;tt)throw new RangeError("Row index out of range")}function nt(i,e,o){let t=o?i.columns:i.columns-1;if(e<0||e>t)throw new RangeError("Column index out of range")}function mt(i,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==i.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function gt(i,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==i.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function re(i,e){if(!tt.isAnyArray(e))throw new TypeError("row indices must be an array");for(let o=0;o=i.rows)throw new RangeError("row indices are out of range")}function le(i,e){if(!tt.isAnyArray(e))throw new TypeError("column indices must be an array");for(let o=0;o=i.columns)throw new RangeError("column indices are out of range")}function $t(i,e,o,t,n){if(arguments.length!==5)throw new RangeError("expected 4 arguments");if(Ft("startRow",e),Ft("endRow",o),Ft("startColumn",t),Ft("endColumn",n),e>o||t>n||e<0||e>=i.rows||o<0||o>=i.rows||t<0||t>=i.columns||n<0||n>=i.columns)throw new RangeError("Submatrix indices are out of range")}function Wt(i,e=0){let o=[];for(let t=0;t=s)throw new RangeError("min must be smaller than max");let r=s-n,h=new I(e,o);for(let c=0;ct?(s=!0,t=o):(n=!1,s=!0);e++}return n}isReducedEchelonForm(){let e=0,o=0,t=-1,n=!0,s=!1;for(;et?(s=!0,t=o):(n=!1,s=!0);for(let l=o+1;le.get(n,t)&&(n=s);if(e.get(n,t)===0)t++;else{e.swapRows(o,n);let s=e.get(o,t);for(let l=t;l=0;)if(e.maxRow(n)===0)n--;else{let s=0,l=!1;for(;so[t]&&(o[t]=this.get(t,n));return o}case"column":{const o=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let t=0;to[n]&&(o[n]=this.get(t,n));return o}case void 0:{let o=this.get(0,0);for(let t=0;to&&(o=this.get(t,n));return o}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){ft(this);let e=this.get(0,0),o=[0,0];for(let t=0;te&&(e=this.get(t,n),o[0]=t,o[1]=n);return o}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const o=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let t=0;to&&(o=this.get(e,t));return o}maxRowIndex(e){ot(this,e),ft(this);let o=this.get(e,0),t=[e,0];for(let n=1;no&&(o=this.get(e,n),t[1]=n);return t}minRow(e){if(ot(this,e),this.isEmpty())return NaN;let o=this.get(e,0);for(let t=1;to&&(o=this.get(t,e));return o}maxColumnIndex(e){nt(this,e),ft(this);let o=this.get(0,e),t=[0,e];for(let n=1;no&&(o=this.get(n,e),t[0]=n);return t}minColumn(e){if(nt(this,e),this.isEmpty())return NaN;let o=this.get(0,e);for(let t=1;t=t)throw new RangeError("min must be smaller than max");let n=new I(this.rows,this.columns);for(let s=0;s0&&Re(l,{min:o,max:t,output:l}),n.setRow(s,l)}return n}scaleColumns(e={}){if(typeof e!="object")throw new TypeError("options must be an object");const{min:o=0,max:t=1}=e;if(!Number.isFinite(o))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(o>=t)throw new RangeError("min must be smaller than max");let n=new I(this.rows,this.columns);for(let s=0;st||o<0||o>=this.columns||t<0||t>=this.columns)throw new RangeError("Argument out of range");let n=new I(e.length,t-o+1);for(let s=0;s=this.rows)throw new RangeError(`Row index out of range: ${e[s]}`);n.set(s,l-o,this.get(e[s],l))}return n}subMatrixColumn(e,o,t){if(o===void 0&&(o=0),t===void 0&&(t=this.rows-1),o>t||o<0||o>=this.rows||t<0||t>=this.rows)throw new RangeError("Argument out of range");let n=new I(t-o+1,e.length);for(let s=0;s=this.columns)throw new RangeError(`Column index out of range: ${e[s]}`);n.set(l-o,s,this.get(l,e[s]))}return n}setSubMatrix(e,o,t){if(e=I.checkMatrix(e),e.isEmpty())return this;let n=o+e.rows-1,s=t+e.columns-1;$t(this,o,n,t,s);for(let l=0;ltypeof e=="number")}Q.random=Q.rand;Q.randomInt=Q.randInt;Q.diagonal=Q.diag;Q.prototype.diagonal=Q.prototype.diag;Q.identity=Q.eye;Q.prototype.negate=Q.prototype.neg;Q.prototype.tensorProduct=Q.prototype.kroneckerProduct;var Ut,te,ut;let I=(ut=class extends Q{constructor(o,t){super();Ot(this,Ut);fe(this,"data");if(ut.isMatrix(o))Bt(this,Ut,te).call(this,o.rows,o.columns),ut.copy(o,this);else if(Number.isInteger(o)&&o>=0)Bt(this,Ut,te).call(this,o,t);else if(tt.isAnyArray(o)){const n=o;if(o=n.length,t=o?n[0].length:0,typeof t!="number")throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let s=0;s"u"&&(t=o,o=this.columns),nt(this,o,!0),t=gt(this,t);for(let n=0;n=0)for(let n=0;n=0)Rt(this,$,new I(o,o));else if(Rt(this,$,new I(o)),!this.isSymmetric())throw new TypeError("not symmetric data")}get size(){return st(this,$).size}get rows(){return st(this,$).rows}get columns(){return st(this,$).columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(o){return I.isMatrix(o)&&o.klassType==="SymmetricMatrix"}static zeros(o){return new this(o)}static ones(o){return new this(o).fill(1)}clone(){const o=new Qt(this.diagonalSize);for(const[t,n,s]of this.upperRightEntries())o.set(t,n,s);return o}toMatrix(){return new I(this)}get(o,t){return st(this,$).get(o,t)}set(o,t,n){return st(this,$).set(o,t,n),st(this,$).set(t,o,n),this}removeCross(o){return st(this,$).removeRow(o),st(this,$).removeColumn(o),this}addCross(o,t){t===void 0&&(t=o,o=this.diagonalSize);const n=t.slice();return n.splice(o,1),st(this,$).addRow(o,n),st(this,$).addColumn(o,t),this}applyMask(o){if(o.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const t=[];for(const[n,s]of o.entries())s||t.push(n);t.reverse();for(const n of t)this.removeCross(n);return this}toCompact(){const{diagonalSize:o}=this,t=new Array(o*(o+1)/2);for(let n=0,s=0,l=0;l=o&&(n=++s);return t}static fromCompact(o){const t=o.length,n=(Math.sqrt(8*t+1)-1)/2;if(!Number.isInteger(n))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(o)}`);const s=new Qt(n);for(let l=0,r=0,h=0;h=n&&(l=++r);return s}*upperRightEntries(){for(let o=0,t=0;o=this.diagonalSize&&(t=++o)}}*upperRightValues(){for(let o=0,t=0;o=this.diagonalSize&&(t=++o)}};$=new WeakMap;let at=Qt;at.prototype.klassType="SymmetricMatrix";class jt extends at{static isDistanceMatrix(e){return at.isSymmetricMatrix(e)&&e.klassSubType==="DistanceMatrix"}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,o,t){return e===o&&(t=0),super.set(e,o,t)}addCross(e,o){return o===void 0&&(o=e,e=this.diagonalSize),o=o.slice(),o[e]=0,super.addCross(e,o)}toSymmetricMatrix(){return new at(this)}clone(){const e=new jt(this.diagonalSize);for(const[o,t,n]of this.upperRightEntries())o!==t&&e.set(o,t,n);return e}toCompact(){const{diagonalSize:e}=this,o=(e-1)*e/2,t=new Array(o);for(let n=1,s=0,l=0;l=e&&(n=++s+1);return t}static fromCompact(e){const o=e.length;if(o===0)return new this(0);const t=(Math.sqrt(8*o+1)+1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const n=new this(t);for(let s=1,l=0,r=0;r=t&&(s=++l+1);return n}}jt.prototype.klassSubType="DistanceMatrix";class lt extends Q{constructor(e,o,t){super(),this.matrix=e,this.rows=o,this.columns=t}}class pn extends lt{constructor(e,o){nt(e,o),super(e,e.rows,1),this.column=o}set(e,o,t){return this.matrix.set(e,this.column,t),this}get(e){return this.matrix.get(e,this.column)}}class dn extends lt{constructor(e,o){le(e,o),super(e,e.rows,o.length),this.columnIndices=o}set(e,o,t){return this.matrix.set(e,this.columnIndices[o],t),this}get(e,o){return this.matrix.get(e,this.columnIndices[o])}}class wn extends lt{constructor(e){super(e,e.rows,e.columns)}set(e,o,t){return this.matrix.set(e,this.columns-o-1,t),this}get(e,o){return this.matrix.get(e,this.columns-o-1)}}class En extends lt{constructor(e){super(e,e.rows,e.columns)}set(e,o,t){return this.matrix.set(this.rows-e-1,o,t),this}get(e,o){return this.matrix.get(this.rows-e-1,o)}}class _n extends lt{constructor(e,o){ot(e,o),super(e,1,e.columns),this.row=o}set(e,o,t){return this.matrix.set(this.row,o,t),this}get(e,o){return this.matrix.get(this.row,o)}}class yn extends lt{constructor(e,o){re(e,o),super(e,o.length,e.columns),this.rowIndices=o}set(e,o,t){return this.matrix.set(this.rowIndices[e],o,t),this}get(e,o){return this.matrix.get(this.rowIndices[e],o)}}class Ct extends lt{constructor(e,o,t){re(e,o),le(e,t),super(e,o.length,t.length),this.rowIndices=o,this.columnIndices=t}set(e,o,t){return this.matrix.set(this.rowIndices[e],this.columnIndices[o],t),this}get(e,o){return this.matrix.get(this.rowIndices[e],this.columnIndices[o])}}class Sn extends lt{constructor(e,o,t,n,s){$t(e,o,t,n,s),super(e,t-o+1,s-n+1),this.startRow=o,this.startColumn=n}set(e,o,t){return this.matrix.set(this.startRow+e,this.startColumn+o,t),this}get(e,o){return this.matrix.get(this.startRow+e,this.startColumn+o)}}class Un extends lt{constructor(e){super(e,e.columns,e.rows)}set(e,o,t){return this.matrix.set(o,e,t),this}get(e,o){return this.matrix.get(o,e)}}class eo extends Q{constructor(e,o={}){const{rows:t=1}=o;if(e.length%t!==0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=t,this.columns=e.length/t,this.data=e}set(e,o,t){let n=this._calculateIndex(e,o);return this.data[n]=t,this}get(e,o){let t=this._calculateIndex(e,o);return this.data[t]}_calculateIndex(e,o){return e*this.columns+o}}class et extends Q{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,o,t){return this.data[e][o]=t,this}get(e,o){return this.data[e][o]}}function qn(i,e){if(tt.isAnyArray(i))return i[0]&&tt.isAnyArray(i[0])?new et(i):new eo(i,e);throw new Error("the argument is not an array")}class Yt{constructor(e){e=et.checkMatrix(e);let o=e.clone(),t=o.rows,n=o.columns,s=new Float64Array(t),l=1,r,h,c,f,u,g,d,p,E;for(r=0;rMath.abs(p[f])&&(f=r);if(f!==h){for(c=0;c=0;c--){for(h=0;hl?n.set(s,l,e.get(s,l)):s===l?n.set(s,l,1):n.set(s,l,0);return n}get upperTriangularMatrix(){let e=this.LU,o=e.rows,t=e.columns,n=new I(o,t);for(let s=0;sMath.abs(e)?(o=e/i,Math.abs(i)*Math.sqrt(1+o*o)):e!==0?(o=i/e,Math.abs(e)*Math.sqrt(1+o*o)):0}class he{constructor(e){e=et.checkMatrix(e);let o=e.clone(),t=e.rows,n=e.columns,s=new Float64Array(n),l,r,h,c;for(h=0;h=0;c--){for(h=0;h=0;r--){for(s=0;s=0;m--)if(p[m]!==0){for(let S=m+1;S=0;m--){if(m0;){let m,S;for(m=b-2;m>=-1&&m!==-1;m--){const v=Number.MIN_VALUE+V*Math.abs(p[m]+Math.abs(p[m+1]));if(Math.abs(a[m])<=v||Number.isNaN(a[m])){a[m]=0;break}}if(m===b-2)S=4;else{let v;for(v=b-1;v>=m&&v!==m;v--){let y=(v!==b?Math.abs(a[v]):0)+(v!==m+1?Math.abs(a[v-1]):0);if(Math.abs(p[v])<=V*y){p[v]=0;break}}v===m?S=3:v===b-1?S=1:(S=2,m=v)}switch(m++,S){case 1:{let v=a[b-2];a[b-2]=0;for(let y=b-2;y>=m;y--){let M=rt(p[y],v),K=p[y]/M,A=v/M;if(p[y]=M,y!==m&&(v=-A*a[y-1],a[y-1]=K*a[y-1]),c)for(let W=0;W=p[m+1]);){let v=p[m];if(p[m]=p[m+1],p[m+1]=v,c&&mo&&s.set(f,u,e.get(f,u)/this.s[u]);let l=this.U,r=l.rows,h=l.columns,c=new I(t,r);for(let f=0;fe&&o++;return o}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return I.diag(this.s)}}function vn(i,e=!1){return i=et.checkMatrix(i),e?new wt(i).inverse():oo(i,I.eye(i.rows))}function oo(i,e,o=!1){return i=et.checkMatrix(i),e=et.checkMatrix(e),o?new wt(i).solve(e):i.isSquare()?new Yt(i).solve(e):new he(i).solve(e)}function Kt(i){if(i=I.checkMatrix(i),i.isSquare()){if(i.columns===0)return 1;let e,o,t,n;if(i.columns===2)return e=i.get(0,0),o=i.get(0,1),t=i.get(1,0),n=i.get(1,1),e*n-o*t;if(i.columns===3){let s,l,r;return s=new Ct(i,[1,2],[1,2]),l=new Ct(i,[1,2],[0,2]),r=new Ct(i,[1,2],[0,1]),e=i.get(0,0),o=i.get(0,1),t=i.get(0,2),e*Kt(s)-o*Kt(l)+t*Kt(r)}else return new Yt(i).determinant}else throw Error("determinant can only be calculated for a square matrix")}function Rn(i,e){let o=[];for(let t=0;tn)return new Array(e.rows+1).fill(0);{let s=e.addRow(o,[0]);for(let l=0;le?s[l]=1/s[l]:s[l]=0;return n.mmul(I.diag(s).mmul(t.transpose()))}function kn(i,e=i,o={}){i=new I(i);let t=!1;if(typeof e=="object"&&!I.isMatrix(e)&&!tt.isAnyArray(e)?(o=e,e=i,t=!0):e=new I(e),i.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:n=!0}=o;n&&(i=i.center("column"),t||(e=e.center("column")));const s=i.transpose().mmul(e);for(let l=0;l0?n.set(s,s+1,o[s]):o[s]<0&&n.set(s,s-1,o[s])}return n}}function Mn(i,e,o,t){let n,s,l,r,h,c,f,u;for(h=0;h0;r--){for(u=0,l=0,c=0;c0&&(s=-s),e[r]=u*s,l=l-n*s,o[r-1]=n-s,h=0;hc)do{for(n=o[c],u=(o[c+1]-n)/(2*e[c]),g=rt(u,1),u<0&&(g=-g),o[c]=e[c]/(u+g),o[c+1]=e[c]*(u+g),d=o[c+1],s=n-o[c],l=c+2;l=c;l--)for(q=E,E=p,U=_,n=p*e[l],s=p*u,g=rt(u,e[l]),e[l+1]=_*g,_=e[l]/g,p=u/g,u=p*o[l]-_*n,o[l+1]=s+_*(p*n+_*o[l]),h=0;hF*R);o[c]=o[c]+w,e[c]=0}for(l=0;l=u;c--)o[c]=e.get(c,u-1)/g,h+=o[c]*o[c];for(r=Math.sqrt(h),o[u]>0&&(r=-r),h=h-o[u]*r,o[u]=o[u]-r,f=u;f=u;c--)l+=o[c]*e.get(c,f);for(l=l/h,c=u;c<=s;c++)e.set(c,f,e.get(c,f)-l*o[c])}for(c=0;c<=s;c++){for(l=0,f=s;f>=u;f--)l+=o[f]*e.get(c,f);for(l=l/h,f=u;f<=s;f++)e.set(c,f,e.get(c,f)-l*o[f])}o[u]=g*o[u],e.set(u,u-1,g*r)}}for(c=0;c=n+1;u--)if(e.get(u,u-1)!==0){for(c=u+1;c<=s;c++)o[c]=e.get(c,u-1);for(f=u;f<=s;f++){for(r=0,c=u;c<=s;c++)r+=o[c]*t.get(c,f);for(r=r/o[u]/e.get(u,u-1),c=u;c<=s;c++)t.set(c,f,t.get(c,f)+r*o[c])}}}function Kn(i,e,o,t,n){let s=i-1,l=0,r=i-1,h=Number.EPSILON,c=0,f=0,u=0,g=0,d=0,p=0,E=0,q=0,a,_,U,w,R,F,b,k,V,m,S,v,y,M,K;for(a=0;ar)&&(o[a]=n.get(a,a),e[a]=0),_=Math.max(a-1,0);_=l;){for(w=s;w>l&&(p=Math.abs(n.get(w-1,w-1))+Math.abs(n.get(w,w)),p===0&&(p=f),!(Math.abs(n.get(w,w-1))=0){for(E=u>=0?u+E:u-E,o[s-1]=k+E,o[s]=o[s-1],E!==0&&(o[s]=k-b/E),e[s-1]=0,e[s]=0,k=n.get(s,s-1),p=Math.abs(k)+Math.abs(E),u=k/p,g=E/p,d=Math.sqrt(u*u+g*g),u=u/d,g=g/d,_=s-1;_0)){for(p=Math.sqrt(p),V=w&&(E=n.get(R,R),d=k-E,p=V-E,u=(d*p-b)/n.get(R+1,R)+n.get(R,R+1),g=n.get(R+1,R+1)-E-d-p,d=n.get(R+2,R+1),p=Math.abs(u)+Math.abs(g)+Math.abs(d),u=u/p,g=g/p,d=d/p,!(R===w||Math.abs(n.get(R,R-1))*(Math.abs(g)+Math.abs(d))R+2&&n.set(a,a-3,0);for(U=R;U<=s-1&&(M=U!==s-1,U!==R&&(u=n.get(U,U-1),g=n.get(U+1,U-1),d=M?n.get(U+2,U-1):0,k=Math.abs(u)+Math.abs(g)+Math.abs(d),k!==0&&(u=u/k,g=g/k,d=d/k)),k!==0);U++)if(p=Math.sqrt(u*u+g*g+d*d),u<0&&(p=-p),p!==0){for(U!==R?n.set(U,U-1,-p*k):w!==R&&n.set(U,U-1,-n.get(U,U-1)),u=u+p,k=u/p,V=g/p,E=d/p,g=g/u,d=d/u,_=U;_=0;s--)if(u=o[s],g=e[s],g===0)for(w=s,n.set(s,s,1),a=s-1;a>=0;a--){for(b=n.get(a,a)-u,d=0,_=w;_<=s;_++)d=d+n.get(a,_)*n.get(_,s);if(e[a]<0)E=b,p=d;else if(w=a,e[a]===0?n.set(a,s,b!==0?-d/b:-d/(h*f)):(k=n.get(a,a+1),V=n.get(a+1,a),g=(o[a]-u)*(o[a]-u)+e[a]*e[a],F=(k*p-E*d)/g,n.set(a,s,F),n.set(a+1,s,Math.abs(k)>Math.abs(E)?(-d-b*F)/k:(-p-V*F)/E)),F=Math.abs(n.get(a,s)),h*F*F>1)for(_=a;_<=s;_++)n.set(_,s,n.get(_,s)/F)}else if(g<0)for(w=s-1,Math.abs(n.get(s,s-1))>Math.abs(n.get(s-1,s))?(n.set(s-1,s-1,g/n.get(s,s-1)),n.set(s-1,s,-(n.get(s,s)-u)/n.get(s,s-1))):(K=kt(0,-n.get(s-1,s),n.get(s-1,s-1)-u,g),n.set(s-1,s-1,K[0]),n.set(s-1,s,K[1])),n.set(s,s-1,0),n.set(s,s,1),a=s-2;a>=0;a--){for(m=0,S=0,_=w;_<=s;_++)m=m+n.get(a,_)*n.get(_,s-1),S=S+n.get(a,_)*n.get(_,s);if(b=n.get(a,a)-u,e[a]<0)E=b,d=m,p=S;else if(w=a,e[a]===0?(K=kt(-m,-S,b,g),n.set(a,s-1,K[0]),n.set(a,s,K[1])):(k=n.get(a,a+1),V=n.get(a+1,a),v=(o[a]-u)*(o[a]-u)+e[a]*e[a]-g*g,y=(o[a]-u)*2*g,v===0&&y===0&&(v=h*f*(Math.abs(b)+Math.abs(g)+Math.abs(k)+Math.abs(V)+Math.abs(E))),K=kt(k*d-E*m+g*S,k*p-E*S-g*m,v,y),n.set(a,s-1,K[0]),n.set(a,s,K[1]),Math.abs(k)>Math.abs(E)+Math.abs(g)?(n.set(a+1,s-1,(-m-b*n.get(a,s-1)+g*n.get(a,s))/k),n.set(a+1,s,(-S-b*n.get(a,s)-g*n.get(a,s-1))/k)):(K=kt(-d-V*n.get(a,s-1),-p-V*n.get(a,s),E,g),n.set(a+1,s-1,K[0]),n.set(a+1,s,K[1]))),F=Math.max(Math.abs(n.get(a,s-1)),Math.abs(n.get(a,s))),h*F*F>1)for(_=a;_<=s;_++)n.set(_,s-1,n.get(_,s-1)/F),n.set(_,s,n.get(_,s)/F)}for(a=0;ar)for(_=a;_=l;_--)for(a=l;a<=r;a++){for(E=0,U=l;U<=Math.min(_,r);U++)E=E+t.get(a,U)*n.get(U,_);t.set(a,_,E)}}}function kt(i,e,o,t){let n,s;return Math.abs(o)>Math.abs(t)?(n=t/o,s=o+n*t,[(i+n*e)/s,(e-n*i)/s]):(n=o/t,s=t+n*o,[(n*i+e)/s,(n*e-i)/s])}class so{constructor(e){if(e=et.checkMatrix(e),!e.isSymmetric())throw new Error("Matrix is not symmetric");let o=e,t=o.rows,n=new I(t,t),s=!0,l,r,h;for(r=0;r0,n.set(r,r,Math.sqrt(Math.max(c,0))),h=r+1;h=0;h--)for(r=0;rl;d++)u=e.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),u=u.div(u.norm()),c=e.mmul(u).div(u.transpose().mmul(u).get(0,0)),d>0&&(h=c.clone().sub(g).pow(2).sum()),g=c.clone(),t?(f=t.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0)),f=f.div(f.norm()),r=t.mmul(f).div(f.transpose().mmul(f).get(0,0))):r=c;if(t){let d=e.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0));d=d.div(d.norm());let p=e.clone().sub(c.clone().mmul(d.transpose())),E=r.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0)),q=t.clone().sub(c.clone().mulS(E.get(0,0)).mmul(f.transpose()));this.t=c,this.p=d.transpose(),this.w=u.transpose(),this.q=f,this.u=r,this.s=c.transpose().mmul(c),this.xResidual=p,this.yResidual=q,this.betas=E}else this.w=u.transpose(),this.s=c.transpose().mmul(c).sqrt(),n?this.t=c.clone().div(this.s.get(0,0)):this.t=c,this.xResidual=e.sub(c.mmul(u.transpose()))}}J.AbstractMatrix=Q;J.CHO=so;J.CholeskyDecomposition=so;J.DistanceMatrix=jt;J.EVD=no;J.EigenvalueDecomposition=no;J.LU=Yt;J.LuDecomposition=Yt;var ro=J.Matrix=I;J.MatrixColumnSelectionView=dn;J.MatrixColumnView=pn;J.MatrixFlipColumnView=wn;J.MatrixFlipRowView=En;J.MatrixRowSelectionView=yn;J.MatrixRowView=_n;J.MatrixSelectionView=Ct;J.MatrixSubView=Sn;J.MatrixTransposeView=Un;J.NIPALS=io;J.Nipals=io;J.QR=he;J.QrDecomposition=he;J.SVD=wt;J.SingularValueDecomposition=wt;J.SymmetricMatrix=at;J.WrapperMatrix1D=eo;J.WrapperMatrix2D=et;J.correlation=In;J.covariance=kn;var Fe=J.default=I;J.determinant=Kt;J.inverse=vn;J.linearDependencies=bn;J.pseudoInverse=Fn;J.solve=oo;J.wrap=qn;const pt=ro;Fe.Matrix&&Fe.Matrix;const ke=8,Tn=1/16777216,xn=15,Qn=18,Jn=11;function An(i,e){i>>>=0,e>>>=0;const o=i&65535;return((i-o)*e>>>0)+o*e>>>0}class Wn{constructor(e=Date.now()){this.state=new Uint32Array(4),this.init(e),this.random=this.getFloat.bind(this)}getUint32(){return this.nextState(),this.state[3]+this.state[2]>>>0}getFloat(){return(this.getUint32()>>>8)*Tn}init(e){if(!Number.isInteger(e))throw new TypeError("seed must be an integer");this.state[0]=e,this.state[1]=0,this.state[2]=0,this.state[3]=0;for(let o=1;o>>30>>>0)>>>0;this.periodCertification();for(let o=0;o>>Qn,e^=this.state[3]<jn)throw new Error(`probabilities should sum to 1, but instead sums to ${r[r.length-1]}`)}if(n===!1&&t>l.length)throw new Error("size option is too large");const h=[];for(let c=0;co[n];)n++;return n}else return Math.floor(t*i)}class ce{constructor(e=Math.random){if(typeof e=="number"){const o=new Wn(e);this.randomGenerator=o.random}else this.randomGenerator=e}choice(e,o){return typeof e=="number"?Ie(e,o,this.randomGenerator):Ie(e,o,this.randomGenerator)}random(){return this.randomGenerator()}randInt(e,o){return o===void 0&&(o=e,e=0),e+Math.floor(this.randomGenerator()*(o-e))}randomSample(e){const o=[];for(let t=0;t1){let l={dist:-1,index:-1};for(let r=0;rl.dist&&(l.dist=o[s[0]][r],l.index=r);if(s[1]=l.index,e>2)for(let r=2;rh.dist&&(h={...f})}s[r]=h.index}}return s.map(l=>i[l])}function Bn(i,e,o={}){const t=new pt(i),n=t.rows,s=new ce(o.seed),l=[],r=o.localTrials||2+Math.floor(Math.log(e)),h=s.randInt(n);l.push(t.getRow(h));let c=new pt(1,t.rows);for(let d=0;dd&&(d=w,g=U)}const p=f.get(g),E=cv.boundingRect(p),q=t.roi(E),{gridCells:a,expandedRect:_}=ts(q,e,o);return t.delete(),n.delete(),s.delete(),l.delete(),r.delete(),h.delete(),c.delete(),f.delete(),u.delete(),q.delete(),{gridCells:a,chessboardRect:{x:E.x+_.x,y:E.y+_.y,width:_.width,height:_.height}}}function ts(i,e,o){const t=new cv.Mat;cv.cvtColor(i,t,cv.COLOR_RGBA2GRAY);const n=new cv.Mat;cv.GaussianBlur(t,n,new cv.Size(5,5),0);const s=new cv.Mat;cv.Canny(n,s,50,150);const l=new cv.Mat;if(cv.HoughLinesP(s,l,1,Math.PI/180,80,100,50),l.rows===0)return console.log("无法检测到棋盘线条。"),{gridCells:[],expandedRect:{x:0,y:0,width:0,height:0}};const r=[],h=[];for(let T=0;T80&&h.push([Y,j,L,B])}if(r.length<10||h.length<9)return console.log("线条不足,无法进行 KMeans 聚类。"),{gridCells:[],expandedRect:{x:0,y:0,width:0,height:0}};const c=r.flatMap(T=>[T[1],T[3]]),f=h.flatMap(T=>[T[0],T[2]]),u=Ne(c.map(T=>[T]),10,{maxIterations:100}),g=Ne(f.map(T=>[T]),9,{maxIterations:100}),d=u.centroids.map(T=>T[0]).sort((T,Y)=>T-Y),p=g.centroids.map(T=>T[0]).sort((T,Y)=>T-Y),E=Math.floor(d[0]),q=Math.ceil(d[d.length-1]),a=Math.floor(p[0]),_=Math.ceil(p[p.length-1]),U=i.roi(new cv.Rect(a,E,_-a,q-E)),w=_-a,R=q-E,F=Math.floor(w*e),b=Math.floor(R*o),k=Math.max(0,a-F),V=Math.max(0,E-b),m=Math.min(i.cols-k,w+2*F),S=Math.min(i.rows-V,R+2*b),v=i.roi(new cv.Rect(k,V,m,S)),y=10,M=9,K=Math.floor(S/y),A=Math.floor(m/M),W=[];for(let T=0;Te}function os(i){const e=ae(i),o=xt(e,[0,120,120],[10,255,255],[160,120,120],[179,255,255]),t=xt(e,[0,0,0],[180,255,80]),n=i.width*i.height,s=cv.countNonZero(o),l=cv.countNonZero(t),r=s/n,h=l/n;return e.delete(),o.delete(),t.delete(),r>.05?"red":h>.05?"black":"unknown"}function ns(i,e){let o;if(e==="red")o=ss(i);else if(e==="black")o=is(i);else return i;const t=rs(o);let n=new cv.Mat;t.channels()===1?cv.cvtColor(t,n,cv.COLOR_GRAY2RGBA):t.channels()===3?cv.cvtColor(t,n,cv.COLOR_RGB2RGBA):n=t.clone();const s=new ImageData(new Uint8ClampedArray(n.data),n.cols,n.rows);return o.delete(),t.delete(),n.delete(),s}function ss(i){const e=ae(i),o=xt(e,[0,100,100],[10,255,255],[160,100,100],[179,255,255]);return e.delete(),o}function is(i){const e=ae(i),o=new cv.MatVector;cv.split(e,o);const t=o.get(2);cv.equalizeHist(t,t),o.set(2,t),cv.merge(o,e);const n=new cv.Mat;cv.Canny(e,n,400,600);const s=cv.Mat.ones(3,3,cv.CV_8U),l=new cv.Mat;cv.morphologyEx(n,l,cv.MORPH_CLOSE,s);const r=new cv.MatVector,h=new cv.Mat;cv.findContours(l,r,h,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE);let c;if(r.size()===0)c=cv.Mat.zeros(e.rows,e.cols,cv.CV_8UC1);else{let f=0,u=r.get(0);for(let w=0;wf&&(f=F,u=R)}const g=cv.moments(u,!1),d=g.m10/g.m00,p=g.m01/g.m00,E=new cv.Point(d,p),q=.98,a=new cv.Mat(u.rows,1,cv.CV_32SC2);for(let w=0;w=.5&&l.push({contour:p,contourArea:a,rect:E})}p.delete()}if(l.length===0)return o.delete(),t.delete(),n.delete(),e;l.sort((d,p)=>p.contourArea-d.contourArea);const r=l[0],{x:h,y:c,width:f,height:u}=r.rect,g=e.roi(new cv.Rect(h,c,f,u));return o.delete(),t.delete(),n.delete(),e.delete(),g}function ae(i){const e=cv.matFromImageData(i),o=new cv.Mat;cv.cvtColor(e,o,cv.COLOR_RGBA2RGB);const t=new cv.Mat;return cv.cvtColor(o,t,cv.COLOR_RGB2HSV),e.delete(),o.delete(),t}function Ce(i,e,o){const t=new cv.Mat;return cv.inRange(i,cv.matFromArray(1,3,cv.CV_8UC1,e),cv.matFromArray(1,3,cv.CV_8UC1,o),t),t}function xt(i,e,o,t,n){const s=Ce(i,e,o);if(t&&n){const l=Ce(i,t,n),r=new cv.Mat;return cv.bitwise_or(s,l,r),s.delete(),l.delete(),r}return s}const ls={red_king:"帥",red_guard:"仕",red_bishop:"相",red_knight:"傌",red_rook:"俥",red_cannon:"炮",red_pawn:"兵",black_king:"将",black_guard:"士",black_bishop:"象",black_knight:"馬",black_rook:"車",black_cannon:"炮",black_pawn:"卒"};function hs(i,e,o){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;const n=t.getContext("2d");n.drawImage(i,0,0,t.width,t.height),n.strokeStyle="rgba(0, 255, 0, 0.5)",n.lineWidth=2,n.strokeRect(e.x,e.y,e.width,e.height);const s=e.width/9,l=e.height/10;return o.forEach(r=>{const[h,c]=r.position,f=e.x+c*s,u=e.y+h*l;if(n.strokeStyle=r.color==="red"?"rgba(255, 0, 0, 0.7)":"rgba(0, 0, 0, 0.7)",n.lineWidth=2,n.strokeRect(f,u,s,l),r.type&&r.type!=="none"){const g=`${r.color}_${cs(r.type)}`,d=ls[g]||"";n.fillStyle=r.color==="red"?"rgba(255, 50, 50, 0.9)":"rgba(50, 50, 50, 0.9)",n.font="bold 24px Arial",n.textAlign="right",n.textBaseline="bottom",n.fillText(d,f+s-5,u+l-5)}}),t}function cs(i){return{k:"king",a:"guard",b:"bishop",n:"knight",r:"rook",c:"cannon",p:"pawn",none:"none"}[i]}const as="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAETklEQVRoBZXBiYGCQAAEsEz/Rc+BIJ8Lekn8T+3iX+JXdSd+Ej9o6ll8F9/ULg7qKL6JL2oTA7WJR/GoVvGgFmnciwe1iO9qksatuFOLOKlFXJVU3IkbNUnjot7iql5iKIbqJUZqER9qEkMxUi8xUm/xqYiR+FQvMVIH8ale4io+1CyG6iQGahYXcVWzGKqzGKlZnMVFTWKormKoZnESZzWJofoQN2oSR3FSxFCNxI2axEEc1SQG6kNqEjdqErs4qElc1ZO4UanYxK6ID/UsbtQk3mJXxFV9EbeKWMWmiA+1Su2i3uJOEat4K+JTLVKbUJu4VcQiVjWJDzWLeotJ7eJeES+xKjFQR7GoXTwo4iUWRQzUJlZ1FE+KmMVLTWKgVrGqk3hWxCReihipWbzVSXxTxCRmRYxVbOosvisxiVmJ7+oiflAEMSnxVT2IeyWISYln9VXcKEFQxIP6TQyVICjiXv0sRioISgyUmNWToFYxUEJQMVLErO7ES73FQIlQYqQmUavUSbzVLj6VCCVG6iq1il0dxUBFKDFSt2JXJzFQEUqM1EFQm3irt6BioCJKDNVbLOotFrWKeomBkigxUqtY1SZm9SFGSqLESC1iVZugPsWNSpQYqEW81FdxrxIlBupf4lElRQzUP8QXlRQxUD+LryopMVK/iV9UUmKkDlIX8S8lJYZqlzqJs4pHJSWG6ipqFhc1i3slJcaK1CY1i4taxa2SEmMlFFGruKhN3Copca9mqUVc1EHcqqTEnTqLiyJqEbcqKTFUA3FQk9QsJW5VUsSnuhOLmkRt4lYlRVzUo5jUJGoT9ypR4qB+kJqE2sS9kiixqUepXahNPCiJEm/1IE1tQm3iUUWUWNWTUJuoTTyrCCVe6irqINQqtYkvKkKJlzqIWZ2lPsQ3FUKJWb3FqkZSB/FVhaDEpF5iU1/FDyoEJahJHNRA1C5+UEJQhBK7Okm9hNrFD0oIirioo6hFqJP4poKgiLM6ilqkRuJBCWJSxFEdhPpFDJUgJkUc1SRqEvWz+FAEMStiValNqP+JkxKTmBWxql2o/4tdEZN4KWJRb0Hton4Tb0XM4qUmsahZzGoXs1ql7sWqiFksiljUJGa1i5daxKI2qU28FPESqyIWNQlqF4taxK5WqbeYFLGIVU3ipV5Su1jUIs7qIiZFLOKtiEVdxKpW8aFOQhGr2BSxqJNY1SqGahdFvMWmJrGog1jVWzwpoohN7GoSizoJtUiJHxSxiYOaxKLGouIHReziqCaxqEnqIhXf1SQO4qQmsahZ6iBFfFWTOIqzmsSqLqLiu5rESVzUJFZ1EI2Kr2oSZ3FVk3irXfymJnERH4rY1Vv8pIgPMVJiV4v4RRGfYqRm8Vaz+EURAzFUk/i/msRIjNUs/qmIsbhTs/hdTeJO3KtFfFcvcS8e1Fs8qLd4EM9qFwO1iUfxVR3Fok7iq/hJpW7FL+I/6iD+5w8rOJhwB3wAwQAAAABJRU5ErkJggg==",us=Object.freeze(Object.defineProperty({__proto__:null,default:as},Symbol.toStringTag,{value:"Module"})),fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAABmCAAAAADpSjAOAAAErklEQVRoBa3BC6KqSgIEsNT+F13TfMRGUTz3TRJ/Vrv4m/hdXYlfxU+a+iruxQ/qXtyKO/UUb+oQ38V39RAf1S6+iW9qFzdqE5/FR7WLn9QQn8UntYrf1ZDGtbhWm/iTEp/EpVrFnxVpXIgrtYh/Uot4E+9qETcqLtUqXsS7GuJODXGlFnEWr2oRt2oVF2oRJ/GihvhB7eJdLWIWZzXET2oXF2qISZwU8aM6xIUinmJWQ/yqDnGhiENMaoif1ZBaxJumxCGeaogrFe/qKS4U8RBPRbyrTZzVJK4UsYtDEW/qECe1Sg1xpYbYxEMRL+osnmqTIq7VEKvYFTGrd3GoSXxSxCp2JR7qg3ioXUoMJd7UEIvYFPFQH8SuHlKhdvGqiCE2RTzUB7Gpz+KsiCFWJZ7qWqzqqzgpYohFEZO6ELv6Lk6KIBZFzOpN7OqQpobULGZFEIsiTuohijjUU6ios5iVIIYiXtUmKia1Sc2iDjEpQQwlrtQuJnUWh3qISQUxlLhSpMSsZjGpQzyVEJS4VKTipA5xVod4KiEocaVIxVlt4k0dYlIiKHGlSMVZDXGhnmJSIqi4UqTEWYldEQ91iJOKUOJCreKj2sWmHuKsIpS4UKTxQc1iqId4URJKvKtNXKhXQe3iVUko8a5IxYV6F2oXbypR4l2Rigt1IWoX7ypR4l0t4lV9EDWkxLtKlHhTxLu6EhU1pOJCJUq8KWJTQ6zqXaioISUuVKLEqxrSUA8x1CpNbWJo1C6uVKLEqyINNYmhFmlqFTTULq6UKPFUT1EnQa1CPYR6iCslRTzVIeosqE1qlaZRD3GppIhJPaRehTpLRT3EtRIlZvVZ1HdxrUSJWR1ST7Goz1LxQYkSs5qEWkQFdRI1iw8qUWJST7GoISqoSUpqFSU+qUSJST3FolYx1CE1iRIfVaLEU01iUaRiqEVQuxQp4rNKlDjULBZFbGoWi9rEF5Uo8VAnsShSMRSpRexqFV+URBG7OgtqFYsiFbNaxBclUcSmNqlNqE0silTMiviqJJRY1SZqk1qlsahVnJT4riKUWNQqqLNUDLWIP6sIJYbaBPUqFrWIeyUOJUIR1CqGOknTGGoR90ocKgQlqEUs6iQ0qFXcK3GoEBShhljVi1jUKu6VeCghKEIRmzqLVa3iXomHEmIooeKhZrGrVdwrsStBDCVOahIPtYpbRexKEEMRs3qISa3iTg2xK0EMNcSkdjGrVdypRayKIBZFzGoTs1rFjVrFqsQQixpiVquY1Sa+qk0sihhiVcRJLWJWu/isDkERi9gUcVLEST3FpZoERSxiU8RZibM6iZN6EYpYxa6IO/U3qSFWsash7tSvUqSITTxUKu7UT6KGlNjFoYa4VbdCDVHxEE9F3KtfpeIQTzXEL+oHUeIQkxriZ/VJDEU8xayG+Ks6xKGISZzUEP8HNcQszmqI/6yGOIkXNcR/VEOcxasa4j+pIV7Em1rEP6tFvIorRfyrGuJNXCnS+Bc1xIW4VEP8Wa3iSlyrRfxRDXEtPqhV/K6pIT6Ij2oXP6hNfBTf1C6+ql18EV/VU1yrh/gqbpTUISY1iTtxr1E34l78QR1Si/iD/wETNddw4LVh4wAAAABJRU5ErkJggg==",ms=Object.freeze(Object.defineProperty({__proto__:null,default:fs},Symbol.toStringTag,{value:"Module"})),gs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAADbUlEQVRoBa3BCYKkRgADMPn/j3aKvoA+oNiJFJfUVlwRk+q3mBET6kycizO1EY2b2oszcaxW8UWt4kgcqac4UA9xIH6rhzhVd/FT/FJ3Malu4of4ru5iXt3Ed/FV3cRFtYhv4ou6i+tqEZ/iUy3i39QiPsSHWsS/qpt4E+9qEX9Qi9iLN7WIP6lF7MReDfFnNcRW7BRxpIhzNcRGbNUQB+ouThWxio0ijtRLnKghXmJVQxyprThUQzzFSw1xrLbiUA3xEE81xInaiSM1xEM81RBnaieO1BB38VBDnKutOFbETdwVMaO24lgRN3FXYkptxbEaYhE3RcypjThRxCJuiphTG3GmiCEWRUyqjThTxBCLIibVRpwqghhKTKtVnCuCGEpMq1VMKEFQxLRaxYQSBCXm1SpmVBCKmFermFFCKGJerWJGCaHEBbWKKSVCiQtqFVNKRBEX1CqmlIgiLqhV7NRLbJVEiStqFXf1RbxURIkLalo8lUSJC2pePJREiWl1STxUUsS5+idxV0kRh+rfxV0lRfxSfxR3lZTYaDzUnwQVdyUlnup/lYq7khJPNSE1KRp3JSVe6p/EU22k8VBS4qWuia9qEatKSrzUNTGpkhKruiQmVVJiVUeC2ohJlZTYqB/irjZiUiVFrOqLWNVGTKqkiI16Ezu1EZMqUWKrtuJNbcSckiixUy/xoTZiTkWU2KtFfFWrmFQRJS6oVUyqiCLm1SomVYQS82oVcyqEEvNqFXMqBCVm1UbMqRCUmFUbUTdxpIKgiEm1EbWKHyoIiphUv8VXJQiKmFRH4osSBDXEqToXn0oQQxFHala8K4JYFPFNXRRvihhiUcSHui7elFjEooZ4VydSH2KniEXc1BB79S9ip4hF3BXxpv5BbBVxE3c1xF5dF1tF3MVDDbFXP8VTbcVWEXfxVMRefYqv6ia2iniIlyL2ai+uKOIpXmqIvVrFNTXEU6xqiDd1FxfVEC+xUUPs1SKuqiFWsVVD7JW4rIbYiJ0a4u9qiK3YqyH+qobYiTdNib+pIfbiXQ3xFzXEm/hQxB8U8SE+NSX+UQ3xKb6pRfyDGuKL+KqGuKyG+Cq+q0Vc0dQQ38UvtUhjTt3EL/Fb3cWpeoif4kC9xG/1FAfiUG3EF/USh+JM7cRQH+JMzKhDMSOuqK245D9LSCVxusul6AAAAABJRU5ErkJggg==",ps=Object.freeze(Object.defineProperty({__proto__:null,default:gs},Symbol.toStringTag,{value:"Module"})),ds="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGkAAABlCAAAAABrK5KdAAAE9UlEQVRoBZ3BiWHkNgAEMEz/RU9I/dqVfHaA+JO6ij+IX6pX8RvxC/UP8W/xD3URh7qLf4if1Ske1Cl+ED+pTfykVvGDeFeb+KdaxZt4U6v4nZISL+JZreIPaopH8agW8Te1iAfxoBbxsyLuaopv8a2m+FFt4q6G+BJfaoof1SluahF38amG+FndxE1NcRN3NcWm8aREneKmpriKuyIORXyqGOoUNzXFRdwUcaop7hpTneKupjjFVQ1xUVNcNRZ1EZ+KOMRFDXFVi3hQX+JUQ+ziVEPc1Cq+1JPY1RSbONQQd7WJT/UoDkVsYldDfKpN3NWL2NUQq9gV8aWGFHFVr+JQxCI2RXyrXVzVp9QmdkUsYlXEg5pS4qI2qV1qE7siplgV8aB2capN6kEcSkyxKOJJ7eJQd0EtosShiCGmIh7VLg61SE0x1BRKXBRBTEU8ql3sapEaYlFDUOKiCGIo4lntYlOL1BCLmkLjQxFiKOJZLVKxqFWKWNUiHhQhhhIvaoqKqS5iU0M8KyEo4kVNKTHVKTY1xbMSghI3FZvaxFQ3MdUUbyoEJRZ1ikUdgvoQ1BQaT0qEEqu6iKkOQX2KmlLiUYlQYlOnmGoXQ/0gXlSEEpu6iKE2MdW7eFMSJXZ1FdQmpjqkbuJVSZQ41EWoXUz1Jt6VRIlTnUJtYlEv4ieVKHFRu6A2sSiiPsWPSpS4qtQU1Co+1UXc1BCnkiIuahGLWsWHuohF3cWupIiLmmJRm7io34pVSYmLmmJRu7ioX4tVpcSppljUIa7q12JRKXGqIRZ1iJv6vZgqJU5FLOoUF/Ui6iYlpkqJQ4lVXcSh3kTdRcVUKXForOomNvUuKtQpNpUSu8aq7mJRh9SnqHhWKbFrTLVJrUJdpTYx1BCNF5USm8ZQu6gfxaaGVLyolNg0qF2od3FRpOJFpcSmUqtoUG/iphbxolJiVYdY1bP4UIt4USliqkOs6pDaxbdaxLMSJabaBI2hVqE28aQW8axEialWQWOqVQw1xKbEqVbxqESJqRZxqlVc1CF2tYpHlSgx1SJOtYldXcWmVvGoEiWmmmLXqFXs6i5WtYpHlShiKkJjqqghFZv6FItaxZOKUGIq4tCoIRWb+hSLWsSjilDEUMShFlGxqVVqF4taxJOKoMRQpGJVi6i4KlKbmGoVDyoERQxF7GoRFVc1paZY1CoeVAiKmIrY1CoVu0ZdxaJW8a2EoIgvdYhdSZ1iVav4VkJQQ3yqQxxKUIvY1Cq+FCGGIj7VIU4lvtQqvhQhpiI+1CEuivhQq/hUBDEV8aEOcVFT3NQqPhVBTDXEh9rFVS3iolbxoYghFjXEXe3iphZxqlV8KGKIVRF3tYu72sSqVvGhiClWNcRNbeJTHWKoVdwVsYhNDXFTq/hSj+KuiEXsiripVXyrJ3FTxCoORdzUFE/qQVwVsYlDDXFVUzyrm2hcFbGLUw1xVUO8qKtoXNQQu7ioIa5KvKpTNC5qiENc1RBXjR/ULjRONcQpbmqI36tNShxqiIu4qyH+oBbRONQQV/GhhviDmqKxqyFu4lNT4i9qSGNTQ9zFlyL+pohVDfEpnpT4k4pVDfElntQU/0MN8S0e1RB/VkM8iWc1xd/UEI/iRa3i94p4Ee9qFf9Wi3gVP6hd/KB28S5+Vqd4ULv4UfxTXcWq7uIf4lfqR/Fv8Rd1EX/yH4p07GIDXbCnAAAAAElFTkSuQmCC",ws=Object.freeze(Object.defineProperty({__proto__:null,default:ds},Symbol.toStringTag,{value:"Module"})),Es="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAET0lEQVRoBZXBiYGCQAAEsEz/Rc+t8isgl8R/1F78SzxU1+KJeKCpe/Fb/FSr2Kud+CV+qFWcqFXciju1iDs1iRtxoybxWw1pXIpLNYlnSiquxIWaxHM1RONMnKuXuNP4VC9xJs7UW1ypVRwUaXyLE/US5+pD7NUQ3+JLvcS5+hYH9RIf4ksNcaZOxYdKxVF8qJdYVCzqQnyoIQ7iQxGbEm91KT7VEHtxUEPs1BCUoE7ElxpiJ/aKOKiXKOKtjuJMDbGJnRriqBYxqYM4V6lYxaaIT7WISU1SxKUaYhGbSuNTvaViUpOUuFFDzGJVxJcaUmJSm7hVQ0xiUUN8qVm81F7cK2ISsxriW81iqKO4VUO8xayIEzUJ6kvcK+IlJkWcqUmoE3GriJeYFHGmJlFn4l4RQ7yVOFWzqDPxQ4kh3oo4U7OoU3GvCOKlxLkaUqFOxb0iiJcS52pIhToTvxQhhhIXahLqW/xWhBhKXKhJqFXqLR4oQlDEhZoEtUgN8UwJQYkLNYtFLeKhCkGJCzWJVc3iqRJBxZWaxKwO4okSoYgLNYlJfYoHKkKJKzWJtzoRP1WEEhdqFkOdip8qosSVmoW6Er+URIkrNYu6FD9VosSVmoS6Er9VosSVmoSapY7it0qUuFCzoM7EI5UocaFmQS1Ss3iopIgLNYuhZqm3eKykiAs1i5c6iH+oFHGhZrGoRfxHpYgLNYlFLeI/Soq4UJOY1So2tYhzJUVcqEm81U7qXJwoKXGlJjHUU/GlpMSVmoT6j/hQUuJKTVL/FEclJa7UJPVfcVBS4lK9pU7FQW3ioBIlrtRb1CQ1iRO1ib1KlLhUL6EO4kztxE4lSlyql6D24kztxKYkSlwr4q02caZ2YlMRSlwrsaq3lPhUe7GpCCUeqr04qr3YVIQSD9WXWNVObEqEEs/UmZjUTuxUCEr8VJfirTaxVyEo8UvdiaE2sVNCUMSJeouXuhNqE3slxFBiKGJWe1FHUZtQm9grIYYSQz0Vk5qFWsVeEWIognooFjWJWsVBCWIoYqidqKgvcVAx1Cr2iiBeiqCOYqiDOFeLOCgxxEsR1CI0JrUT52oVe0UM8VYE9ZLGXq2CxrdaxF4RL/FWxFAv0dirSVDEh1rFXom3mBQx1BCNoyLeaoiDWsVOEW8xK2Io0rhRQ+zVIvaKeItZDTEUcacmsahV7BQxiUURz9Qm1CQldoqYxaqIZ+pMVGyKWMSqhnimvqVpbIpYxaaGeKY+pYhNEavYKeKhOhGrGmITezXEM3WQEqsaYicOaoiHahMVqxpiL45qiIdqESUWNcRBfKghHqqdWNQQR/GphnioNjGrIT7ElyKNZ2oRsxriU5wp8VBNYlbEtzhVQzxSLzGpIU7EqSIeKmJSxKk4Vy/xSMVbDXEurtRLPNYUcSWu1SR+qllcihu1iBu1iBtxrzZxohZxL36qvXirD/FLPFJ34on4l9qJf/kDL2Gdat+6n0YAAAAASUVORK5CYII=",_s=Object.freeze(Object.defineProperty({__proto__:null,default:Es},Symbol.toStringTag,{value:"Module"})),ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAABqCAAAAACeiPB1AAAEQklEQVRoBb3BWaKjSAIEMMX9Dx2TLPYDzFbz0VL8d+K/E/+d+Ef1J/5JvFbn4qV4o57Es3hUG6FEHcSjeFJfcaK+4lbcq4+4VIu4FTdqFV/1EVs1icaVuFSL2KqN2KohLsWVmsVBbcVWpXElztUsftVWbBVxIU7VJM7UTuwVcSZO1CzO1U7sVSp+xa+axJXai72SEgfxoyZxrXbiqCaxF0c1xK3aih+VEjtxUEM8qFVK/KqU2Iq9Ip7UKkWcKmIjdmqIB7UV52qIP7FRk3hQW3GpiK/YKOJJ7QQ1xEFT4iv+FPGkdqJWcdCU+IivIh7UjTioIVbxVcStuhcHRazio4gb9SyOSixiVcSpei2OipjFooY4U+/FUQ0xiUWJo8ZHvREnSkxiUeKgxEc9iAtFDDErcVA3Uh9xr4ghJiWO6lJqlYoHRRCTEkd1JWon7hRBDEUc1a1QH3GnBDGU+FFnQhFUqFncKEEMJX7VmagYKqhZ3ChBUMSJ2guNiqExqVncKSEocaa2QknFUDGpRdwoIShxqlYxqUkMJSa1iDsVQhFv1BCTikmt4k6JUOKNmsRQYlKruFMilHihJjGUmNRH3KqIEi/UJCYlhvqKWyVR4lnNYihiqK24VhIlHtUihhJDHcSlSpR4VIugCOpHXKlEiSf1ETUE9SvOlUSJB3UUapX6E+cqKeJeHYU6FecqKeJW/Yg6ChUXKiniRp2IWoSahIorJSXu1InULIb6iEslJW7UjRjqI66VlLhRk9SJGOojbpSUuFGrUDtBTVLEnUpKXKtVTOpPqFmKuFVJiWu1iFltpD7iSSUlrtUsFnUqHlVS4lpN4qu2UsQLlZS4VkNs1E68U4kSl0rs1J94qyRKvFQ7sagzsVESJd6ofxVfFVHiUX1EvRUfFVHiXi1iUq/FR0UocaNmQf2jWFWEEldqEtQ7MdQiFhVCiVP1/0rNYlEhlDhRT2KvjmJRIShxUC/EqfqKWQVBiY9KXQtqFZdqEosKgiIWdS0WtYp3ShAUsagL8VWreKcEQQ0xqxOxU6t4pQhiKGJSR/GjVvFKiSGGIma1FWdqFW8UMcSkiEn9iXO1ijeKGGJSxKxmca0W8UYRk5gV8VIt4o0Ss1gU8U4t4oUiZrEo4p1axLMiFrGoIV6pRTyqIRaxqiHeqEU8KmIVH0W8UYt4UsRHfBXxQi3iQRFf8aeIZzWLBzXEV/ypIR7VLO7VEH9io4Z4UrO4VUNsxFYN8aBmcaeG2IqdGuJezeJGDbETezXErZrFtRpiLw6aIm7ULC7VEAdx1BRxrWZxqYijOFPiWk3iQhG/4kxJ40oNcaGIE3GmhrhSQ5xpSpyKUzXEhRriTBHn4kINaZyoIX7VEBfiSs3iVxEHjSIuxbVaxV4RW7WKa3GnvmKjxFet4lY8qD+xKjGpP/EgntVeVGonnsVb9SfULN6Lf1STaPyr/wEZZ5J2PlnxwgAAAABJRU5ErkJggg==",Ss=Object.freeze(Object.defineProperty({__proto__:null,default:ys},Symbol.toStringTag,{value:"Module"})),Us="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAEQUlEQVRoBa3BC5LqOAAEMPX9D93PSfgEsAOztVL8TZ3FH8SvaiV+Er+ob+Kr+KpO4qyG1C6uxRd1iIqJImqIK3GpNvFFU4dYigu1i1/UIRZiqYjGrxpKzMVCDWl8KGKqUcRMzBVpfKi7+NRQYiKmipiop5iqIT7ERA0xUycx1ZR4F59qiLk6ialKxZv4UNJYqU0UsdR4E+9KXKinWKhUvIg3NcSFuoulSsVZvCriUt3FWg1xEi9qiEv1IhaKeIqzIr6pNzFT0niIkyK+qiHqIWZqiLt4qiG+qImYqSFu4qmISzUXU5XGTTwUcaGWYq7SOMRdESv1KuokForYxU0RK/Um6iGWaohN3BSxUm+iDnGpiE0cilirV6ldfFPEELsirtSL+FURQ+xKXKsXafymCGJTxBd1korfFEFsirhUL1KxqZtYKUIMRVypQ1ALsVBCDEWs1S52tRRTJcRQYq02cVOb1ETMlBAUsVKbONQhmhLqLGYqBCVWiripuxjqU0yUCEosFHGop6ipmCgRlJgrcaiT1BA39RQTFaHEXIlDnaXEUz3Fp4pQMVdiV69S4qmG1CY+lYSKqSI2NREPtYka4lNJlJgqYihiaFCHeKhNUGKiEiVmagiKuKuT2NUmlJipRImZ2qXEU53FpnYpYqYSJWbqIW7qJmoTm3qIqRIlZuohDvUQlcamHmKuRImZOqRiU69Ssam7WChRYqrugnoRKo2h7mKhpIi5uouaiE3dxUpJEQt1E/UiRexqSImlkiJW6hB1liIORUqslRSxUocY6kUc6hAXSopYql3c1EMcipS4UFLEWu3iUE9B3cWVkiLWahebmkuJKyUqLtQuhlqLS5UocaE2QT1FncW1SpS4UJtQr4I6xBeVKHGhNlGvUg/xTSVKXKiJ1F38ohIlrtSH1C5+VBFKXKgPKeJ3FaHEhZqKP6gIJa7UTLyph3hTEYq4Un8XJyWCEtdK7OpH8VQhKPGT+ou4qxCU+KpOUj+IQwkxlLhS/03sSoihxEpNhPouNkWIoYhPtZD6SWxKEEMRr+r/EBRBbIrY1Y/iU51FgxJDbIrY1afUp5iru9gUMcSuiE1dCHUTa7WJTYlN7GqIoebiUDfxkyI2cShiU0SdxUMd4idF7OJQQ2zqTZzUIX5SxC5uitjVSbyqQ/yiiEPcFbGrm/hQh/hBETfxUMQ3dYjviriLhxriizrEVzXEXTzVENfqEF8V8RAnRVyrQ3xRQzzFWRGXipT4ooiTOKshrhQpca2Is3hRQ1yoXVyqIV7EmyIulFRcqSFexbsaYqmk4kIN8SY+1CYWSiqWahPv4lNtYq6ksVRDfIqZ2sRMDbFQm5iIqdrERA0xVZuYirmSEp8qjZkaYiFWmtrEmyI+1C5W4koN8arEu9rFWlyoQxonjXe1iwtxrW5irlGb+CK+qrM41Iv4Kn5Rl+IX8Sf1EH/0DyR8qGp+1pBYAAAAAElFTkSuQmCC",qs=Object.freeze(Object.defineProperty({__proto__:null,default:Us},Symbol.toStringTag,{value:"Module"})),vs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAFfklEQVRoBb3BUULbCgJFMZ39L/qOnRCIIWnp+xgpvzF/ll/KX82v5BfyF/NN7ua7/FX+aL7khXmWv8gfzIf80TR3+aO8Mw/5jfmQ9/LGfMhvzV3eykvzIf9gPuSNvDI3+Vdzl9fy09zlP5i7vJIf5ibPRn5lzSGv5Ls55WLu8gtzygv5Zk65mE/5hTnlh1zNKVfzJX83N/kuF3PKN/MkvzCnfJNnc8p38yy/MKdc5cmc8sNc5BfmlIt8mVN+WnPTHPIbc8qzfJpTXpon+ZU55Fk+DXljnuR35pQv+TCnvDF3DfmlOeRLPswh78xdQ35pTvmUuznlnblpyK/NKQ+5mVPemptG/sEc8pCbOeStuWvklTXywxzyIac55L35lJ/mU67mlLuc5pD35lN+mGe5mEPucphD/mA+5Zv5Ls/mkJsc5pD35lmezAt5MofchDnknfkhD/OheZYvQ27CkHfmhdzNG3ky5BRzyEvzWu7mnXwZcsoc8tK8kdE8yzzJpyGnzCE/zSvNIXOV03zKpznkkDnku3mlOcXcNS0f5ks+DTlkyDfzUnMK85Av8yWfhhwy5DByM80fhDnlar7kyxAachjChHknp7nLxXzKkyE05DB3zWvNIac5NHI1D3kyhIYwNzEvNYfczKEhQyOHeciTOUQjpzmEeSt3c5d5EvOQZ0M0cprXmlNDbuZJ86X5kIshGrmZFzJfcppfyMUc0sjN/NQ8y2F+I1dDGrmbv8hhfiUXc0iTD/NNcxHmSfNOLuaQJg9z1dA8xPxJ5kMu5pAmD3NqnmQeMn8S8yFXQ5p8mu9iXmuuYh5yNaTJl7kKc9dcNM9ymIdcDWnyZJ6FuWrNQ/OQwzzkakiTZ/Mlh7loWebUfMjNPORqSJNv5i6n+dCcYplTc2q5m4dcDWny3RxyM18acprvcpiHXA1p8ifzIYac5tAyGrEwD7ka0uQP5qE55GZOMaccFvOQqyFN3puHpslhmZvMKadpHnI1pJF3lrlrWk6L+aF5kqshjbyxrLlpcreYv8jVkEZeW8ynfFhM5qfmLhdzSCOvLIf5lA/LvJE55WqIRn6anOYhD8s0mpvmJqc55WKIRr6Z3MyXPCxzajIPWRjyzRCNXI2c5kkeltGcMocWFoZ8M0RGLoaYJy1PRsvcZTksDLmaQ2TkYl7JwzJac5OHhZFv5hANuZgX8mw0N5ncLYxczSE0h1zMT3k2mrtcDLmaQ2gOuZif8mkZzSnfDLkacsiQq/mm5dMymnxYPg25GnLIHPJkzTctn5aR08hp5DCHXMwhhzDyZM03LReTkS8j5tDybHITc8iToXnS8mkxTX6aQ8uXtZZTrJFnE0bm1PJpMS0fhtzMIcunNS2nHEaejbCsNVmuRsyXHOaQ5dNaPuQ08mXExGKyXM17Wb5My00Oc8iXkU+T5cti3svyMIfc5bBGXllMlvfWwtzF8jDykJshLywmy5PlwzJhzYc8mUM+5G7khcVkeWn5MJlTvqwhH3Iz5IXFZHm2nJZPa80py92ylofcrCE/LCbfTZZnoyFf1pCH3K2RHxaj5e/mlE9DnuTDmrw0h/zVMmS5WUO+5MMa8sIc8guj5dOQJ3lYQ14Y8ndrstzMTZ7k0xpytRjyC5PlZhm5yJc15IchvzAtd3PKRZ6sId8N+TdDy1WerZGrNflHc8o3uVhzyLMh/2IOLd/lam7ybORfDHkh36zR8p+tOeSF/DCHlv9mTZZX8tPc5D9YRstLeWFO+XdzaPJaXptT/ska8l5eW3OTX5rmJm/ljblr+YV5yB/krfmSP5uGlj/KH0zmLm/NTZa/yJ8tc5EP803+Kn8zr8R8iJFfyC/MH2Tkd/I7c9U0Dfm9/JP5kn+X/6v8X/0Phhh8i1Cy6vcAAAAASUVORK5CYII=",Rs=Object.freeze(Object.defineProperty({__proto__:null,default:vs},Symbol.toStringTag,{value:"Module"})),Vs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABrCAAAAACz/eiUAAAFdklEQVRoBb3BCRabSgIEMNX9D13TzWKDwUuSeV+KH9R38Yv4qn4T38VndRIndRLfxCe1icYb9RSfxXu1iy9qF5/EO7WKH9Uq3ot7tYmf1SbeiVu1iD9Tq3gjbtQi/lyt4lZc1SL+Si3iTlzUIqghbpW4U4u4Ea9qCmoVN2qKOzXFVZzVFFNt4qpWcaOmuIizmmKqXVzVJq5qildxVItYVGoVV7WJq5riRRzUFE+1iYt6iIua4iwOaoiD2sRVPcRFTXESTzXEUe3iop7ioqY4ioca4qR2cVEHcVFTHMSupjipXVzUQVzVFE+xqSFe1C5e1VHcqCGeYlNDvKhdvKijuFVDPMSqhnhVuzirVWqIN2qIXSxqiFf1EGe1SA3xTg2xi0UN8ap2cVYHoTZxVkNsYqohLmoXJ3WQeooXNcQqhprionZxUJ/ESQ2xiqGGuKpNHNRncVLEKqghbtRBbOqLOKohFkENcaOm1CIW9VUc1RBTqCHuNIrUIqb6Lg5qiCnUEKsSD416iqnuBPUQTzXEFIpY1RSbRhE1xVQvYlcP8VRDDFFDbGoRi6am1CKGeoqTeoqHGmKIGmJXU0y1iloFTa3iRT3FUxFDFPFQi6CuQm3iVT3EQQ1BaoiHWkXdCEUaN+ohDmoIUsRTTWnqIhqKWNUQm3qIkyJIEU/1QRzUQyxqF2c1hBTxVB/ErobUlIqpdnFWQ0gRT/VW7GqKmlKC2sWLGkJKPNVFaopdTamjUJu4KEJKPNRFvKg7Ubu4KEJKPNRVHJSoG6lNXBUhJXa1Se3ioIbUWdRBXBUhJTb1EE1NcVCr1FEqtYkbRUiJVT2lqUU81VVKmtrFjSKkxKKOohZx1NQiakoRahO3ikjFqg5CLeKkVlGpVdQubhWRilUdhFrESVNTGtQQU63iVhGpWNVTqEWc1EOoKaZaxL0iUrGqp1CLOKmHqKu4V0QqVvUQ1CJOakjFULuoRbxRRCo2tYmhFnFSJ6EO4p0iUrGpTVCrOKkXUQ/xTg2Rik2tYqhVHJVU6k4a79QQKbGpKaZ6il2jNlFp6iHeKkJKbEoai3pIxapRUoIKagiN94qQErsSi9rEVLEpqUVMNUTjgyKkxI3axVBCQ0URu5rikyKkxI16iKFCo6RxVEN8VISUuKijUESjiJOKL4ogKi7qRjRKvKj4rAiixIumFqmnaDQV31U8FUGUeFGbaAxFNIr4QeOphiBKnDW1CBoU0dQQP2g81RCEEie1iqlBiaaG+K7EQw1BFHHU1CIWDSpqEd81jYcihijirBaxatBoaojvmsauhhiiKXFUUzwVoab4QdPYFDEFJU5qiBdNTfFVU7FpSkyhKbFr1BQvmpriBxWbpmlMQRGbRg1x0dQUv2gaU9M0FkFTcVBDvGpqih9UGotKYxE0JaaGCo2LphbxXaUxNEUsYihiaChxrzbxVmPRWNUQqxhqCA0lGncaRSjxSYWGksYmVvUQjVsNJYaa4qnEpogGlcYmVrVLxRsNRXxWQ0wVT7FoahfvNagh3qlVDBUHsWpKfNWYakjjoDHUIhU1xVPsiviqsagpHuokKNJ4iocivqt4qBtpTDXEQeyaEj+peGiaEmc1xUkclPhZEbcqFGkcxVERf6JWUVNqCJoiTuKkxP9FU2mcxVkR/66pNF7EUS3iXxVpvIqTRhH/pIY0LuJVScXfa0oaV/GiKan4S40St+Kihvg7tYh7cauG+CuVxr24U6v4I5Wa4o24V1P8rkQN8Va80RSp+ElFDfFBvNXUIr5qFKn4JD6oXXxUUzQ+i0/qRZzUUyq+ic/qjdSUGqLiB/FdpW6kFtE0fhG/KKFeBCV+Fr+rmBpUSvyZ+GM1ROPPxX8q/lP/A9zVYIqTjIeUAAAAAElFTkSuQmCC",bs=Object.freeze(Object.defineProperty({__proto__:null,default:Vs},Symbol.toStringTag,{value:"Module"})),Fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAE+klEQVRoBb3BC3bqSgLAQGn/i9a0P4DbNoTkvjNV8o34TL4kP4mvyDfksziSp7iQH8kH8SK34kh+IO/FTj6KF/lI3okH+ULs5AN5I1YmX4qdvCW3YiO/Eit5R27ERn4tFvKGXMVK/iJWcksuYiV/Eyu5Iyexkj+LldyQWazkX8RCrmQSC/lObOQkFnIhR7GQl0DeiBeZxELO5CAWchAgt+JIJrGQE3mJhRzFQm7EkcxiITN5iUFmsZCrmMgsFjKRh1jIWSzkInbGICexkCN5iEEuYiNncSRnsZAD2cVCzuJBTmIiZ7GQF9nEIFfxJLOYyEUM8iKbGOQqnmQWE7mKQZ5kFYPciBeZxZFcxSBPsgqQG3EgsziSGzHIgyxikBtxILM4kjsxyE6GGORGHMksDuRWDLITiEFuxERmcSS3YpCNQAxyFTOZxYG8EYOshBjkRsxkFgfyRgyyEmKQO3EkJ3Eg7wTISgiQGxlHchIH8k4MspAY5CqJlTHIWRzIOzHIQmKQi4yNMchFHMhbMchgDHIVO2OQqziQt2KQwRjkInbGIDfiQHbJWYAMBshVHMmdOBAIkJBZDAIGyFnsjEFuxYkEEjKJQcBALuLA5E7MJGMjkwABAzmLidyKiUnsZBKDYCAnMZF7Ge/IJAbBQM7iQN7IeE8OYhAMZJKxMgZ5Iz6SowDBkEnM5E5CfCJHAYIhkziSi0AW8ZEcBAiGHMXOGOQkkFV8JgcBgiEvMZOjANnET+QgQDDkKWbyFMhD/EyOYhBDHuJENjHILr4hkwAxeYgTWcVGhrgyMAYhVjKJQQzZxZkM8RNjJ5tkFoMYsosLIe4ZDxKDZMidGMSQTcaFgRAI8WDM5LMYxJBNxh3ZBDLEDfksBjFkk7ES4kUekiR2Eg/yWQxiyC4GyYTYyFFm7CQe5LMYxJBdgEkyxEomITEYEg/yWQxiyC7ATBaxkpMMhIRYCMlnAYIhuwB5iI3cS4iFkHwWIBiyi0F2sZF7CbEQks8CBAN5SJ5iI/cSYiEknwUIBnIjdnIvIRbyswDBQG7ETu4lxEJ+FCBgIDdiJ2/FSkI+ChAwkBuxk7diJYQMIbcCBAzkRuzkndjIT2IQkECuYifvxEaOkosYBCSQq9jJVSAQOzlIzmIQEEIuYidnIZt4EAiQITkJkEEI5Cx2Mgl5iCuBZBaDDEIgZ7GTh0AO4o5AMgmQhWQgJ7GTTTKJe3IjkIVkIBexkqv4QM4yk4UMgUwSYiFPyRA/EJKjQFYyBDLJjIXsMiYGMgsEkqNMVgIxyFFmLOQlHkw+SA4CZCUQCznIWMkkBpPvxSAbWQTIJFZyFCCz2MitQJ5kESBHsZGjkKckOcmQozDZySJAZrEweQrZJV8J5EU2YXIQBpK8ZPIbgRzIKgPkJSFkkvxSgDzJJpOzkH+RAfIiDyFnyb8JkBfZZYBMkn8QYHIgDxkmT0nI3wUmR/IUYPIUIH8UEshEjgL5b8RCZnKQgfwXAgyZySyQfxdgciYnAfKPMkwuZBaDyT/IQO7ISQYmf5aEyQ05ywD5qwxM7shFLEz+IAlMbsmNGOT3MlZyT27FYMgvJAQm78itMFbypYRYyFvyRjzIF2IlyQfyXjzIZ4GxkI/kg8BYmLwTGCv5gXyWxEoyeQrjxZAfyU/iwbglBPIF+Vl8IIR8Sb4TM1mF/Ib8QsaL/J78X8n/1f8Am9IOixOlrIUAAAAASUVORK5CYII=",ks=Object.freeze(Object.defineProperty({__proto__:null,default:Fs},Symbol.toStringTag,{value:"Module"})),Is="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAF5klEQVRoBb3BSWLjRgAEMNT/H13p5k6JsuU5BIhv1M/iS/Gr+kZ8I35RpzQ29S5+FT+pUzypq/hFfFaH+Ent4mfxSe3iV7VJ4wfxQW3iS7WJj+JRbeI3tQi1iU/iSa3iV7ULtYoP4l2t4nd1CmqRxpN4U4sYivhBnWKqRTyJVzXFohbxSZ1iUYt4EC9qik2t4lldxKoW8SbuaopdreJZHdLY1CJexVVNcVGreFSHNHa1iBdxUVNc1S4e1EWcaoq7uKghbuoQ72pILeKqhriJUw1xUxfxrtLUFHc1xFXsaoqruol3jaYWcVNDXMWuhriqu3hSqUXc1RAXsakpTvUqHjW1iBc1xCk2RZzqTTyq1BRvijjFqoY41Jt4VqkpStzUELtY1BCHpq7is0aR2sSphtjFVFPs6iZ+UilSQ5oShxpiE1MNsatFahE/qtQUtYtNDbGJqYhDXcQvKvUmNjXEKoYiTo1axaqGeFKvUsSmhljEUMShoabYlBTxpp7FpoZYBEWcmloFRUxFvGrUk9gUsQg1xKmpIShiqkVMRRpDox7FpoaYQhEXNYUSQ72JChpqF3WIXRFT1BAXdYihHqREQ+1SF7ErYooibuobKaE+iEMRQxRxU6TeRUWlCHUT1C52NcSQGuKiqSEq6iIVi3oQQ+3iUMQQJa6aGkLFVKcY6kFMtYtTEaSIq6aGmIrUIiWm2qQOMdUuTkWQIq6aGmJRU4pULOpBTLWLUw0hRVw1NcShUYtY1IOYahenGkJKvKghDo2aYlW7qE1MtYuLIqTEi5LGpkJNsapd1Cam2sVFEVLipilpLCooUrGqTahNTLWLixoiJW5qkSIWtYlFbUJtYqpdXNQQKXFVm9jUKabahNrEVLu4qCFS4qqGlKB2qSk2NYXaxFS7uKghUuKqppjqVaxqEWoTU+3iooZIiat6kRpCxa6moDYx1S6uikjFTb0LJU6VEtQmptrFVRGpuKkptUot4tSoKdQuptrETRGpuKlDmlrFRaOmUIcYahM3RaTiphapXbxo1BRqkRJDbeKmiFRc1So1BbWKTaOmUItUGtQmbopIxVWdgopNiU1FhdpFo3ZxU0QqrmoVFHFRQUPFog5Rp7gpIhVXdYpNDUGFRokGjTqEWsVNEam4qik2dRUVjRINGnVI7eKmiJS4qEUs6l0aRUwNJfUibopIiYt6E+qURg0xNGqRuoi7IlLioq5iqqs0aoihUavUJhU3NURKnOoUi0pNqRgaRUyNIirqEDc1REpc1CINNQQ1pAgalcbUKKJC7eKmhkiJi7qIRa3SGBqVxtQookJN0bgrQkpc1CJOTS1i1RSxKaEx1BCNuyKkiFMt4tCoKTZNEVOjhKahpjTuipAiTrWIVQU1pLEpYtEoodFQQuOmhpAa4lCr1BBTDWnsKo1Fo8SuROOuCFJDHJoiLmqKxq5pLColFg0VjZsagtQQh6aIQ61C401Ncag07moIoobYNUpQd9F4U1OsmiJeFDFEDXFRh6hdNN7UIlZFvKghhlDEoVHEi8aDWqWxqHhVQwyhhtg1Kt4U8ap28UkNMQVF7BoVRZwqHtQuPqkhpqCIXVNDfKV28UENsQhqiF1N8ZXaxQc1xCKGGmJTU3yldvGshljFUENsaorv1Cae1RCrmGqITRFfqk08qiE2MdUUqyK+VJt4UlNsYlFDbCq+Vqt4UkPsYlVD/INaxYOaYhermuIf1CIe1BCH2NQUf1dTvKspTrGrKf6spnhXU5ziUFP8WQ3xpqa4iFNN8Vc1xKua4ipOtYg/qiFe1BQ3cVGL+Jsa4q6muIurmuJvirirKV7ETU3xJ0Vc1SJexV1N8SclLmoRb+JVDfGtRomLWsS7eFNTfKdR4lSLeBAPaoivNEocaopH8aSG+E6JXS3iWTyqKb5QxKoW8Uk8q0X8qoipVvFRfFCH+EkJdYjP4qM6xWeVOsRP4id1ikd1FT+LX9SraKh38Zv4TX0pfhdfaOoX8ZX4Sv0gvhZ/UK/S+Iv4X8X/6j/OzIuL68bXyAAAAABJRU5ErkJggg==",Ms=Object.freeze(Object.defineProperty({__proto__:null,default:Is},Symbol.toStringTag,{value:"Module"})),Ns="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABsCAAAAABBOrMSAAAFg0lEQVRoBb3BSYKkRgAEMMX/Hx1OloKEWnsOluIX9UX8KL6r79L4RXxWV7GpF+Kr+KhO8UrN4ov4oA7xQZ3io3irHuKr2qXxQbxTu/hN7eK9eK028Qe1i3fipdrE39Qm3ogXahN/V5t4KZ7VKv5NreKVuKtV/KY2cahVvBA3tYrf1CEOtYoncVOLODVeq6s41Cru4qIWMSnxQt3FqRZxF7NaxKyIu3ohJjXETUxqEbNaxKrEql6IiyKu4lSLuKhVLIqgblLEVQ1xEYdaxEXtYqhF6iY1xE0NMYtDDXFVuxjqENRF3NUQk3ioIW7qIYZ6CGoWz4qYxK6GuKlDDLWLoVYp4pUa4hSbWsRNHWKoXQx1ipdqiENsaoibOsVQu6BO8UYRh1jVEDc1iaF2oSbxRg3xEIsa4q4mMdQm1EW8UUPsYlFD3NQshtqk7uKNInYx1BB3NYlFvRXvlNjFUEPc1CQW9V68U8QmqCHuapMSq3ov3qkhVkERd7VJEat6JTXEW0WsgiJuahKb2qROKdJ4q4ZYhCJuapMSD7VJ3cUHRSxCETd1iofapA6pIT6pIYYo4qYm8VCb1FV8VEMMUcRVbVLiVJuoWXxRxBBFXNQmRRxqF6vaxRc1BKkhLuoUp9rEqibxSQ1Birio1EOcahNDXcUnRZAiLpoaUmJWm6B2qU18UAQpYtaoXcxqE/VCvFdDSBGTmsSsNqlX4r0aQkpM6hQXtUu9Eh8UISVONYmL2kRdpVLxXg0hJQ41i4vaRM1SpOKDIqTEoWZxUZuoSYo0PipCShxqFhe1ibqJb4qQEoe6CCo2tYk6pMR3NURKHOoiqFjVLtRFfFVDpMSpZqHEqnZBbVLxixoiJU51ERWb2sSqFmkap8ZrNURKnOoiKja1iaEOsapJ3NUQKTGpWSp2tYmh3osSVzVESkxqiHqIXW2ChvokrmqIlJiUoB7ioVYpUl/ERQ2REs9qF4d6LdSzmNUQKfGsdnEoQh1SH8SkCCnxrHZxqCHqJk1jV6c4FSElntUuDkXqSczqEKcipMST2sWkpFKzuKpTHIqQEk9qF5MijZrEVZ3iUIQUcVe7mNUQahKzhtrFoQgp4q52MStiVZM4NNQuHoogRdzVLi4qNk3NYtNQu3goghRxV5t4ry5i1ahdHIogRdzVJl6rqJugUbs41BCkhripTbxSQt2FRu3iUEOQGuKmdvFCiVqkJtEoKeJUxBBFXNVD7GoXKorUVTRqFacaYoga4qImQVOTKKlZlKBWcSpiETXERZ1SpE6hHmKoIUXUKk41xCIUcVGnoJ6kFrEqUkSt4lRDLEINMatZapW6i4ciGrWKQw2xCoqYNPUsqE1qEVcNtYhTDbEKipg0tUodYlGnaFw0ilScaohVUEOcapd6iF1tQombWsSphtjEUEMcaheVGuJQq1BDHBpqiEkNsYlFEYfahaaGmJQYahEPjSIVhxpiF4sa4lCbUKt4oYZ4aCipONQQD7GoRTzUJihpvFRDUEMoUvFQi3iIVQ3xUJtYVLzRlHioIRUPNcQhNrWITVOL+KJWsapNPNQiDrGpRWxqFV/VJtQiJXa1iFPsahGrpob4rq6iYleLOMVDLWLVVBo/qLvY1SImcahFrGqIX9RV7GoRszjVEJuKHzVNPcSuFnERp1rFX1XULja1iKuY1Cr+qlG7WNUibmJWq/ireohVLeIuLmoRf1abWNQqnsRVLeKvahOLWsSzuKsh/qqGWNQqXogntYg/KrGoVbwSL9QQ/6YW8Vq8UkP8g1rFG/FSLeKPahVvxWu1it/VLt6LN+oQ39VDfBJv1Sk+qkN8FJ/UKV6qSXwTn9VVDA31LL6Kb+pH8YP4QVOfxY/iJ/VB/C7+oG6i8Sfx/4r/13856SmLbWlT4gAAAABJRU5ErkJggg==",Cs=Object.freeze(Object.defineProperty({__proto__:null,default:Ns},Symbol.toStringTag,{value:"Module"})),Ks="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABqCAAAAAB4oTsxAAAEb0lEQVRoBb3BC5KDVgIEMPX9D937wGCD+XmS1Erxi3oSP4lH9Zt4FvdqJ3ZqJ57EndqIc/UR9+JareJBreJOXKlV/KAWcSPO1SJ+Vi9xKU7VS/xJzeJKnKiXOFUvcVSzOBdHNYkrtYqDeokzcVCzuFarOKhZnIhvNYk79RHfahZH8aUmcas24qAmcRB7NYlbtRVHNYlvsVWzuFV7caKG+BIbNYlb9S1O1CT2YqOGuFUHcaqG2ImPGuJOnYkzNYmteKshbtRBijhVk9iIVU3iUh2EpnGhJvERixriSp2IBzXERyxqiHN1Kp7UEG/xUkOcqi+hhjQe1BCrmNUQp2onSmoST2qIVcyKOFVboUQRP6ghFjGpIU7VVlQ0flVDLGKoSZyqL/EnNcRLDEVcqK34syJeghriQr3FlxriXg0xC2qIC/UWO7WKOzXEJCjiSn3ERm3EtRpiEhRxpTbirXbiUg0xCUVcqq1Y1Je4VEMMUUNcq42Y1FFcqiGGqCFu1Eeoc3GpiCGKuFe/iCs1BKkh7tUv4koNQWqIe/WLuFQEKeJB/SIuFUGKuFc/iUs1hBRxrw6ivsS1GkKKuFd7oQ7iRhFS4kFtpc7EnSKkxIP6CEWonbhThJS4V6uYNA21E7dqiJS4V4vQ0BhqJ27VEClxqxah4qV24l4NkRK36iVKvNROPKghUuJOLaLES71FxYMaIiXu1CI0ZvUWKp7UEClxpxbRmNVHaDyqIVLiTi2iMamPUPGohkiJO/URQ30EjWc1RCpu1UdQqZf4WQ2Rilv1FtRHKo1f1BCpuFVvUVtR0nhWQ6TEnXpLPYpTRUiJW7WRehYHRUiJW/VPxE4RUuJa/VOxVYSUOKp/L95qCCmxqiH1H4lVEaSIWf2XUmJRBCliUrNQp6KuhfoSiyJIEZP6z8VLDUEUMdSP4q0uhIpFDUEUMdSD2Ksb0VjUEEMUMdSlOFFbsVNiVUMMUUMMdRTXGr8pYhKKGGov/hs1xCTUENRHzIr4l4qYhRpiUkN8FHGqPuJOEbNQkzhRxEcRL7UTV4p4CWqIo6bErBaxqL04V8RLDEUc1CyGeom9WqVxpoZ4iaGG+FIHcVCrNI5qiEUMNYmtSr2kZnGm3uKohljErIi92otT9RHfaohVzGqIj6Z24qi+xJcijVW81BBvTW3FUR3EXg3xFi9NEataBBVn6lvs1BAfsaghVvUSRVyovdiqITZiVUMsmpqkxLXaiY2axEasahKrGlJp3Kit+CjS2Iq3GmLRKClxqz7ioyaxEx81iVmjpMS9eou3msRebNQkJk3N4kkt4q1msRdbNYlJvcSTSk1iVZP4Fjs1iUlN4lnNYlWTOIi9msVQxA9qEquaxFF8qVn8RRGrIo0T8a1m8Q/VLM7EQc3in6iXOBVnahJ/VYs4F6dqiL+pl7gUp2oVP6pVXIoL9RaP6i1uxKVaxb16i1txoz7iXG3Eg7hX31IX4lE8qB/FD+JZPYrfxE/qUvxB/EFtpdH4k/i/iv+r/wEEcJN6pgU6cwAAAABJRU5ErkJggg==",Ts=Object.freeze(Object.defineProperty({__proto__:null,default:Ks},Symbol.toStringTag,{value:"Module"})),xs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABsCAAAAABBOrMSAAAFa0lEQVRoBb3BR4IjRwADMPD/j6arc5Q0ezEQf1I/xN/Eb/UHafxB/FB3Mamn+Cm+qpN4UyfxQ3xTu/iidvFVfFS7+KlW8U18Uqv4o1rFR/GuVvEPahGfxKtaxD+qRbyLNzWLr2qIm1rEm3iqRXxVq7ioRbyIh5rFd7WLq5rEi7irWfxSu7iqWTzETU3ipPGmdnFTs7iLqxrirMSb2sVdTeImzmoWZ0W8qF081RBXcVaTOKsh3tQmnmoSF3FSk7ioSbyoQzzUJM7iUJO4qlk81Vnc1SRO4lBDXNUinuoqbmoSh9jVEFe1ibu6i5sa4hCbGuKmdnFWL+KmJrGLVQ1xU4c41Lu4qUlsYlGTuKlDLOohahJPRWxiVpO4qZOY1V1qES9qiFXMaoibOolFfRCvahKLmNUQN3USi3oTH9UQi5jUEDdNHWJVZ6khvqghZjEp4q5O4lAX8V0NMYuhhripVUqc1EX8UMQsqCFuapUiDnUVtYkXNcQkqCFuapESh1qEehN3NcQk1BB3NUuJXc1iUg8pcVfEJNQQN3WITU1iVu/iroYYQg1xVYdY1SQm9UXcFDFEDXHVqFWsaohJ7VIPcVPEEDXEVVNDilgVMdQh9SJuiiCKuGrUKlZFDPUQQ+3ipgiiiIs6xKKGGOomVrWLqyKIEle1i0URQz3Eog5xVUNIERd1iEUR1EOs6hBXNYQUcdbUJlZFqFWoTcxqFzc1hBRxUouU2NQuFnWIoXZxV0OkiEOdxKY2sajUJqhD3NUQKWJXJ7GpXUwa6hBqFw81RIrY1UnsapEGFeok1CaeaoiUONRZbJqapFGpQyoNtYmnGiIldnUWk8bQ1Cx1kYqhNvGihkiJQ10EjUl9FEOt4lURKXGoi1AxqY9iqFW8KiIlDnURKmY1C0pqE5NaxLsiUuKkzqJiVbMY6hBDLeKDIlLipM6iYlWzmNQmqE18UERKnNQQNUuJVc1iUS/ikyJS4qyEmqViV5OY1SbUKj4pIiWeahO7mkRFvYlPaoiUeKpN7GqShnoRn9UQKfFUqzjUImqX2sRnNURKPNUqDjWL2qRW8VUNkRJPtYqzukoNafxShBTxUKs4adRd/EURUsRDLeKsoc7S+JMipIiHWsRFU4uoIY1d7eKqhpAiHmoRV7VLkTqLTcVJDSE1xF0t4oNKzeKDxq6GkBrirmbx1CihhrioVdBY1RCkhripRdw0FbP6LjQWNQSpIW5qEZ/UT1ExK2KIGuKqFrErsai/icasiCEUcVWLmFWs6iw1iaGhpM5iqCGGUMRVreKirlKpQyxqE0MNMYQa4qJ2sahdTGoRJ0UMtYihiEmoIS7qENQuhhI1xEOJSRHUEJOghjipReomaBqNIt7VIoYaYhJDESeNGlJnocSmxG81xCyGGuJQi2ioIYaKkxI/NSUWMdQQh1qExq5x0Wj8UkMsYlJD7GoRVFDirvFbEZuYFbGrRXzU0Gj8UEOsYlZDbJqaxEeNisZ3NYlVLGqIVVOT+KrR+KomsYlFTWLRqCG+qWh8U5PYxaqGWDRqiG8qGt/UEIdY1SQWjSK+qfiuSOMQm5rErKHiq0rji5rESexqErOm4rtK44sa4iwONYlZEV9VGh/VJC7ipCYxa/xQaXxSs7iIs5rE31QaH9QsruKsZvEnJT6oIR7iqob4g6bEu5rEQ9zUEL81JV7VJJ7irob4gxIvahYv4qFm8UMRTzWLN/GihvihaTzUIl7Fm5rEv6tFvIt3NYl/U4v4JN7VLP6uNvFRfFKb+K128UV8VCfxTe3iq/imDvGmTtL4IX6ou5jUU/wUv9SrUIdU/EH8Qf0UfxN/U5/F38U/qJto/JP4f8X/6z8dVxuL55I6qgAAAABJRU5ErkJggg==",Qs=Object.freeze(Object.defineProperty({__proto__:null,default:xs},Symbol.toStringTag,{value:"Module"})),Js=Object.assign({"/assets/chess_templates/black_bishop.png":us,"/assets/chess_templates/black_cannon.png":ms,"/assets/chess_templates/black_guard.png":ps,"/assets/chess_templates/black_king.png":ws,"/assets/chess_templates/black_knight.png":_s,"/assets/chess_templates/black_pawn.png":Ss,"/assets/chess_templates/black_rook.png":qs,"/assets/chess_templates/red_bishop.png":Rs,"/assets/chess_templates/red_cannon.png":bs,"/assets/chess_templates/red_guard.png":ks,"/assets/chess_templates/red_king.png":Ms,"/assets/chess_templates/red_knight.png":Cs,"/assets/chess_templates/red_pawn.png":Ts,"/assets/chess_templates/red_rook.png":Qs});async function As(){var e;const i={};for(const[o,t]of Object.entries(Js)){const n=(e=o.split("/").pop())==null?void 0:e.split(".")[0];if(n){const s=new Image;s.src=t.default,await new Promise(h=>{s.onload=h});const l=cv.imread(s),r=new cv.Mat;cv.cvtColor(l,r,cv.COLOR_RGBA2GRAY),i[n]=r,l.delete()}}return i}function Ws(i,e,o){let t=-1,n="none";const s=[i.cols,i.rows],l=new cv.Mat;i.channels()===4?cv.cvtColor(i,l,cv.COLOR_RGBA2GRAY):i.channels()===3?cv.cvtColor(i,l,cv.COLOR_RGB2GRAY):i.copyTo(l);const r=Object.entries(e).filter(([c,f])=>o==="red"?c.startsWith("red_"):o==="black"?c.startsWith("black_"):!0);for(const[c,f]of r){const u=new cv.Mat;cv.resize(f,u,new cv.Size(s[0],s[1]));const g=new cv.Mat;cv.matchTemplate(l,u,g,cv.TM_CCOEFF_NORMED);const d=cv.minMaxLoc(g);if(d.maxVal>t){t=d.maxVal;const p={king:"k",guard:"a",bishop:"b",knight:"n",rook:"r",cannon:"c",pawn:"p"},E=c.split("_")[1];n=p[E]||"none"}u.delete(),g.delete()}return l.delete(),t>.3?n:"none"}function js({onImageUpload:i}){const e=De(null);return N("section",{className:"upload-section",children:[N("h2",{children:"上传图片"}),N("input",{ref:e,type:"file",onChange:n=>{var l;const s=(l=n.target.files)==null?void 0:l[0];if(s){const r=new FileReader;r.onload=h=>{var f;const c=new Image;c.onload=()=>i(c),c.src=(f=h.target)==null?void 0:f.result},r.readAsDataURL(s)}},accept:"image/*",style:{display:"none"}}),N("button",{onClick:()=>{var n;(n=e.current)==null||n.click()},children:"选择图片"})]})}const Ys=360;function Ls({overlayImageSrc:i,chessboardRect:e={x:0,y:0,width:0,height:0},originalImageSize:o={width:0,height:0}}){const n=Math.max(0,e.x-15),s=Math.max(0,e.y-15),l=Math.min(o.width-n,e.width+2*15),r=Math.min(o.height-s,e.height+2*15),h=Math.min(1,Ys/Math.max(l,r)),c=o.width/l,f=l*h,u=r*h,g=f*c,d=(f-g)/2;return N("section",{className:"board-result-section",children:[N("h2",{children:"分析结果"}),N("div",{className:"image-container",style:{width:`${f}px`,paddingBottom:`${u}px`},children:N("img",{src:i,alt:"分析结果",className:"overlay-image",style:{left:`${d}px`,width:`${g}px`,height:`${o.height*h}px`,marginTop:`${-s*h}px`}})})]})}function Gs({fenCode:i,onCopy:e}){return N("div",{className:"fen-section",children:[N("h2",{children:"FEN代码"}),N("div",{className:"fen-container",children:[N("input",{type:"text",value:i,readOnly:!0}),N("button",{onClick:e,children:"复制"})]})]})}function lo(i,e){const[o,t]=i.trim().split(/\s+/),n=o.split("/");if(n.length!==10)throw new Error("无效的 FEN:行数不正确");const s=[];for(const w of n){const R=[];for(const F of w)if(F>="1"&&F<="9"){const b=parseInt(F,10);for(let k=0;k{let R="",F=0;for(const b of w)b?(F>0&&(R+=F.toString(),F=0),R+=b):F+=1;return F>0&&(R+=F.toString()),R}).join("/")} ${q} - - 0 1`}function Ke(i,e){const o={K:"帅",A:"仕",B:"相",N:"马",R:"车",C:"炮",P:"兵",k:"将",a:"士",b:"象",n:"马",r:"车",c:"炮",p:"卒"},t="abcdefghi",n=["零","一","二","三","四","五","六","七","八","九"],[s]=i.trim().split(/\s+/),l=s.split("/"),r=[];for(const _ of l){const U=[];for(const w of _)if(w>="1"&&w<="9"){const R=parseInt(w,10);for(let F=0;F="A"&&g<="Z",p=o[g],E=d?n[9-h]:` ${h+1} `;let q="",a="";return h===f?(q=d?c>u?"进":"退":cu?"进":"退":c{const a=new FontFace("LiSu",`url(${Os})`);a.load().then(()=>(document.fonts.add(a),document.fonts.ready)).then(()=>{c(!0)}).catch(_=>console.error("Failed to load font:",_))},[]),it(()=>{const a=g(i);n(a)},[i]),it(()=>{function a(){if(s.current){const U=window.innerWidth*.8,w=8*C+C,R=window.devicePixelRatio,F=Math.min(1,U/w)*R;r(F)}}return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),it(()=>{if(!s.current||!h)return;const a=s.current,_=a.getContext("2d");_&&(_.clearRect(0,0,a.width,a.height),d(_,l),t.forEach((U,w)=>{U.forEach((R,F)=>{if(R){const b=(f&&f[0]===w&&f[1]===F)??!1;p(_,R,[w,F],l,b)}})}),e&&E(_,e))},[t,e,l,h,f]),it(()=>{const a=s.current;if(!a)return;function _(U){const w=s.current;if(!w)return;const R=w.getBoundingClientRect(),F=w.width/R.width,b=w.height/R.height,k=(U.clientX-R.left)*F,V=(U.clientY-R.top)*b,m=C/2*l,S=Math.round((k-m)/(C*l)),v=Math.round((V-m)/(C*l));if(console.log(`Clicked intersection: col: ${S}, row: ${v}`),S>=0&&S<=8&&v>=0&&v<=9)if(f){const[y,M]=f,K=`${String.fromCharCode(97+M)}${9-y}`,A=`${String.fromCharCode(97+S)}${9-v}`,W=`${K}${A}`,T=lo(i,W);o(T),u(null)}else u([v,S])}return a.addEventListener("click",_),()=>{a.removeEventListener("click",_)}},[s,l,f,i,o]);function g(a){const _=a.split(" ")[0].split("/"),U=[];for(let w of _){const R=[];for(let F of w)if(isNaN(parseInt(F))){const b=F===F.toUpperCase()?"red":"black",k=F.toLowerCase();R.push({color:b,type:k})}else{const b=parseInt(F);for(let k=0;kR/2)&&(a.beginPath(),a.moveTo(V+v+y,m-y),a.lineTo(V+v+y,m-v-y),a.lineTo(V+y,m-v-y),a.stroke(),a.beginPath(),a.moveTo(V+v+y,m+y),a.lineTo(V+v+y,m+v+y),a.lineTo(V+y,m+v+y),a.stroke())}b(1*C+w,2*C+w),b(7*C+w,2*C+w),b(1*C+w,7*C+w),b(7*C+w,7*C+w);for(let V=0;V<5;V++){const m=V===0||V===4;b(2*V*C+w,3*C+w,m),b(2*V*C+w,6*C+w,m)}a.font="11px Arial",a.textAlign="center",a.textBaseline="middle",a.fillStyle="rgba(0, 0, 0, 0.4)";const k=["一","二","三","四","五","六","七","八","九"];for(let V=0;V<9;V++)a.fillText(k[V],(8-V)*C+w,F-w/2);for(let V=0;V<9;V++)a.fillText((9-V).toString(),(8-V)*C+w,w/2)}function p(a,_,U,w,R){const F=C/2,[b,k]=U,V=k*C+F,m=b*C+F,S=C*.4;a.beginPath(),a.arc(V+2,m+2,S,0,Math.PI*2),a.fillStyle="rgba(0, 0, 0, 0.3)",a.fill(),a.beginPath(),a.arc(V,m,S,0,Math.PI*2),a.fillStyle=_.color==="red"?"#ffcccc":"#e0e0e0",a.fill(),a.strokeStyle=_.color==="red"?"#c00000":"#000000",a.lineWidth=2,a.stroke(),a.fillStyle=_.color==="red"?"#c00000":"#000000",a.font='22px "LiSu", sans-serif';const v=_.type.toUpperCase(),y=_.color==="red"?q[v]:q[v.toLowerCase()];if(a.save(),a.setTransform(w,0,0,1.25*w,V*w,m*w),a.textAlign="center",a.textBaseline="middle",a.fillText(y,S*.05,S*.23),a.restore(),R){const M=C*.9,K=M*.25;a.strokeStyle="rgba(0, 220, 75, 0.9)",a.lineWidth=2,a.beginPath(),a.moveTo(V-M/2,m-M/2+K),a.lineTo(V-M/2,m-M/2),a.lineTo(V-M/2+K,m-M/2),a.stroke(),a.beginPath(),a.moveTo(V+M/2-K,m-M/2),a.lineTo(V+M/2,m-M/2),a.lineTo(V+M/2,m-M/2+K),a.stroke(),a.beginPath(),a.moveTo(V-M/2,m+M/2-K),a.lineTo(V-M/2,m+M/2),a.lineTo(V-M/2+K,m+M/2),a.stroke(),a.beginPath(),a.moveTo(V+M/2-K,m+M/2),a.lineTo(V+M/2,m+M/2),a.lineTo(V+M/2,m+M/2-K),a.stroke()}}function E(a,_){const U=C/2,[w,R]=_.match(/.{2}/g)||[];if(!w||!R)return;const F=w.charCodeAt(0)-97,b=9-parseInt(w[1]),k=R.charCodeAt(0)-97,V=9-parseInt(R[1]),m=F*C+U,S=b*C+U,v=k*C+U,y=V*C+U,M=15,K=Math.atan2(y-S,v-m),A=v-M*Math.cos(K)*.86,W=y-M*Math.sin(K)*.86;a.beginPath(),a.moveTo(m,S),a.lineTo(A,W),a.strokeStyle="rgba(0, 0, 255, 0.6)",a.lineWidth=3,a.stroke(),a.beginPath(),a.moveTo(v,y),a.lineTo(v-M*Math.cos(K-Math.PI/6),y-M*Math.sin(K-Math.PI/6)),a.lineTo(v-M*Math.cos(K+Math.PI/6),y-M*Math.sin(K+Math.PI/6)),a.closePath(),a.fillStyle="rgba(0, 0, 255, 0.6)",a.fill()}const q={k:"将",a:"士",b:"象",n:"馬",r:"車",c:"砲",p:"卒",K:"帥",A:"仕",B:"相",N:"傌",R:"俥",C:"炮",P:"兵"};return N("div",{style:{width:"100%",display:"flex",justifyContent:"center"},children:N("canvas",{ref:s,className:"chessboard",style:{maxWidth:"80vw",height:"auto"}})})}function Ds({bestMove:i,isCalculating:e,error:o,onNextMove:t,onPreviousMove:n,moveHistory:s,fenCode:l,fenHistory:r,onFenUpdate:h}){const c=s.length%2===0?"红方":"黑方",f=s.length+1,u=s.map((p,E)=>{const q=r[E],a=Ke(q,p);return N("span",{className:"move-item",children:a},E)}),g=i==="red_wins"||i==="black_wins",d=i==="red_wins"?"红方胜":i==="black_wins"?"黑方胜":"";return N("div",{className:"solution-section",children:[N("h2",{children:"解法展示"}),N("div",{className:"chessboard-display",children:N(Bs,{fen:l,bestMove:g?"":i,onFenUpdate:h})}),N("div",{className:"solution-controls",children:[N("button",{onClick:n,disabled:s.length===0,children:"上一步"}),N("button",{onClick:t,disabled:e||!i||g,children:"下一步"})]}),N("div",{className:"solution-debug",children:[e&&N("p",{children:"正在计算最佳走法..."}),o&&N("p",{style:{color:"red"},children:o}),!g&&i&&N("p",{children:[c,"最佳走法:",Ke(l,i)," (第 ",f," ","步)"]}),g&&N("p",{style:{fontWeight:"bold",color:"green"},children:d})]}),N("div",{className:"move-list",children:u})]})}function zs(i,e){return{k:e==="red"?"K":"k",a:e==="red"?"A":"a",b:e==="red"?"B":"b",n:e==="red"?"N":"n",r:e==="red"?"R":"r",c:e==="red"?"C":"c",p:e==="red"?"P":"p",none:""}[i]}function Ps(i,e="red"){const o=[];for(const l of i){let r=0,h="";for(const c of l)if(c==="none")r++;else{r>0&&(h+=r.toString(),r=0);const[f,u]=c.split("_");h+=zs(u,f)}r>0&&(h+=r.toString()),o.push(h),console.log(`FEN row: ${h}`)}const s=`${o.join("/")} ${e==="red"?"w":"b"} - - 0 1`;return console.log(`Generated FEN: ${s}`),s}function Xs(){const[i,e]=Z(null),[o,t]=Z(!0),n=async()=>{console.log("OpenCV.js is ready");try{const s=await As();if(Object.keys(s).length===0){console.error("No templates were successfully loaded");return}e(s)}catch(s){console.error("Error loading templates:",s)}finally{t(!1)}};return it(()=>{let s;return(async()=>{typeof cv<"u"?(await new Promise(r=>{cv.onRuntimeInitialized=r}),await n()):(document.addEventListener("opencv-loaded",n),s=setInterval(()=>{!o&&typeof cv<"u"&&(clearInterval(s),n())},500))})(),()=>{document.removeEventListener("opencv-loaded",n),clearInterval(s)}},[]),{templates:i,isLoading:o}}const Zs="modulepreload",Hs=function(i){return"/xiangqi-analysis/"+i},Te={},$s=function(e,o,t){let n=Promise.resolve();if(o&&o.length>0){document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),r=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=Promise.allSettled(o.map(h=>{if(h=Hs(h),h in Te)return;Te[h]=!0;const c=h.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${f}`))return;const u=document.createElement("link");if(u.rel=c?"stylesheet":Zs,c||(u.as="script"),u.crossOrigin="",u.href=h,r&&u.setAttribute("nonce",r),document.head.appendChild(u),c)return new Promise((g,d)=>{u.addEventListener("load",g),u.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(l){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=l,window.dispatchEvent(r),!r.defaultPrevented)throw l}return n.then(l=>{for(const r of l||[])r.status==="rejected"&&s(r.reason);return e().catch(s)})};class ti{constructor(){this.engineReady=!1,this.currentResolve=null}async initEngine(){if(!this.engineReady)try{const e=await $s(()=>import("./pikafish-ZteQ764f.js"),[]),o=e.default||e;window.Pikafish=o,this.engineInstance=await o({locateFile:t=>t==="pikafish.data"?`https://xiangqiai.com/wasm/data/${t}`:`https://xiangqiai.com/wasm/single/${t}`}),await this.engineInstance.ready,this.engineInstance.read_stdout=t=>{console.log("> ",t);const n=t.match(/bestmove\s(\S+)/);n&&this.currentResolve&&(this.currentResolve(n[1]),this.currentResolve=null)},this.engineInstance.send_command("uci"),this.engineReady=!0}catch(e){console.error("Failed to initialize Pikafish:",e)}}async getBestMove(e,o=14){if(!this.engineReady)throw new Error("Engine is not ready");return new Promise((t,n)=>{try{this.currentResolve=s=>{if(s==="(none)"){const r=e.split(" ")[1];t(r==="b"?"red_wins":"black_wins")}else t(s)},this.engineInstance.send_command(`position fen ${e}`),this.engineInstance.send_command(`go depth ${o}`),setTimeout(()=>{this.currentResolve&&(n(new Error("Engine timeout")),this.currentResolve=null)},5e3)}catch(s){n(s)}})}}function ei(){const[i,e]=Z(null),[o,t]=Z(""),[n,s]=Z(!1),[l,r]=Z(null),[h,c]=Z(!1);it(()=>{(async()=>{const g=new ti;await g.initEngine(),e(g),c(!0)})()},[]);const f=bo(async(u,g)=>{if(i){s(!0),r(null);try{const d=await i.getBestMove(u,g);if(t(d),d==="red_wins"||d==="black_wins"){s(!1);return}}catch(d){r(`Error: ${d.message}`)}finally{s(!1)}}},[i]);return{engine:i,bestMove:o,isCalculating:n,error:l,fetchBestMove:f,setBestMove:t,isEngineReady:h}}function oi(){const i=Number(localStorage.getItem("depth"))||14,[e,o]=Z(i);return it(()=>{localStorage.setItem("depth",e.toString())},[e]),{depth:e,setDepth:o}}const ni=({depth:i,onDepthChange:e})=>N("div",{className:"depth-control-section",children:[N("h2",{children:"搜索深度控制"}),N("div",{className:"depth-slider-container",children:[N("label",{htmlFor:"depth-slider",children:["当前深度: ",i]}),N("input",{id:"depth-slider",type:"range",min:"10",max:"30",value:i,onChange:o=>{o.target instanceof HTMLInputElement&&e(Number(o.target.value))}})]})]}),si=`

2024-10-08

+}`}function zo(i,e,o,t,n){const{rows:s,columns:l}=i,r=Math.min(s,e),h=Math.min(l,o),c=[];if(n==="auto"){n=!1;t:for(let f=0;f=0&&o?` ${be(i,e-1)}`:be(i,e)).padEnd(e)}function be(i,e){let o=i.toString();if(o.length<=e)return o;let t=i.toFixed(e);if(t.length>e&&(t=i.toFixed(Math.max(0,e-(t.length-e)))),t.length<=e&&!t.startsWith("0.000")&&!t.startsWith("-0.000"))return t;let n=i.toExponential(e);return n.length>e&&(n=i.toExponential(Math.max(0,e-(n.length-e)))),n.slice(0)}function Xo(i,e){i.prototype.add=function(t){return typeof t=="number"?this.addS(t):this.addM(t)},i.prototype.addS=function(t){for(let n=0;n>t);return this},i.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n>t.get(n,s));return this},i.signPropagatingRightShift=function(t,n){return new e(t).signPropagatingRightShift(n)},i.prototype.rightShift=function(t){return typeof t=="number"?this.rightShiftS(t):this.rightShiftM(t)},i.prototype.rightShiftS=function(t){for(let n=0;n>>t);return this},i.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let n=0;n>>t.get(n,s));return this},i.rightShift=function(t,n){return new e(t).rightShift(n)},i.prototype.zeroFillRightShift=i.prototype.rightShift,i.prototype.zeroFillRightShiftS=i.prototype.rightShiftS,i.prototype.zeroFillRightShiftM=i.prototype.rightShiftM,i.zeroFillRightShift=i.rightShift,i.prototype.not=function(){for(let t=0;tt)throw new RangeError("Row index out of range")}function nt(i,e,o){let t=o?i.columns:i.columns-1;if(e<0||e>t)throw new RangeError("Column index out of range")}function mt(i,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==i.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function gt(i,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==i.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function le(i,e){if(!tt.isAnyArray(e))throw new TypeError("row indices must be an array");for(let o=0;o=i.rows)throw new RangeError("row indices are out of range")}function he(i,e){if(!tt.isAnyArray(e))throw new TypeError("column indices must be an array");for(let o=0;o=i.columns)throw new RangeError("column indices are out of range")}function te(i,e,o,t,n){if(arguments.length!==5)throw new RangeError("expected 4 arguments");if(Ft("startRow",e),Ft("endRow",o),Ft("startColumn",t),Ft("endColumn",n),e>o||t>n||e<0||e>=i.rows||o<0||o>=i.rows||t<0||t>=i.columns||n<0||n>=i.columns)throw new RangeError("Submatrix indices are out of range")}function jt(i,e=0){let o=[];for(let t=0;t=s)throw new RangeError("min must be smaller than max");let r=s-n,h=new I(e,o);for(let c=0;ct?(s=!0,t=o):(n=!1,s=!0);e++}return n}isReducedEchelonForm(){let e=0,o=0,t=-1,n=!0,s=!1;for(;et?(s=!0,t=o):(n=!1,s=!0);for(let l=o+1;le.get(n,t)&&(n=s);if(e.get(n,t)===0)t++;else{e.swapRows(o,n);let s=e.get(o,t);for(let l=t;l=0;)if(e.maxRow(n)===0)n--;else{let s=0,l=!1;for(;so[t]&&(o[t]=this.get(t,n));return o}case"column":{const o=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let t=0;to[n]&&(o[n]=this.get(t,n));return o}case void 0:{let o=this.get(0,0);for(let t=0;to&&(o=this.get(t,n));return o}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){ft(this);let e=this.get(0,0),o=[0,0];for(let t=0;te&&(e=this.get(t,n),o[0]=t,o[1]=n);return o}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const o=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let t=0;to&&(o=this.get(e,t));return o}maxRowIndex(e){ot(this,e),ft(this);let o=this.get(e,0),t=[e,0];for(let n=1;no&&(o=this.get(e,n),t[1]=n);return t}minRow(e){if(ot(this,e),this.isEmpty())return NaN;let o=this.get(e,0);for(let t=1;to&&(o=this.get(t,e));return o}maxColumnIndex(e){nt(this,e),ft(this);let o=this.get(0,e),t=[0,e];for(let n=1;no&&(o=this.get(n,e),t[0]=n);return t}minColumn(e){if(nt(this,e),this.isEmpty())return NaN;let o=this.get(0,e);for(let t=1;t=t)throw new RangeError("min must be smaller than max");let n=new I(this.rows,this.columns);for(let s=0;s0&&Ve(l,{min:o,max:t,output:l}),n.setRow(s,l)}return n}scaleColumns(e={}){if(typeof e!="object")throw new TypeError("options must be an object");const{min:o=0,max:t=1}=e;if(!Number.isFinite(o))throw new TypeError("min must be a number");if(!Number.isFinite(t))throw new TypeError("max must be a number");if(o>=t)throw new RangeError("min must be smaller than max");let n=new I(this.rows,this.columns);for(let s=0;st||o<0||o>=this.columns||t<0||t>=this.columns)throw new RangeError("Argument out of range");let n=new I(e.length,t-o+1);for(let s=0;s=this.rows)throw new RangeError(`Row index out of range: ${e[s]}`);n.set(s,l-o,this.get(e[s],l))}return n}subMatrixColumn(e,o,t){if(o===void 0&&(o=0),t===void 0&&(t=this.rows-1),o>t||o<0||o>=this.rows||t<0||t>=this.rows)throw new RangeError("Argument out of range");let n=new I(t-o+1,e.length);for(let s=0;s=this.columns)throw new RangeError(`Column index out of range: ${e[s]}`);n.set(l-o,s,this.get(l,e[s]))}return n}setSubMatrix(e,o,t){if(e=I.checkMatrix(e),e.isEmpty())return this;let n=o+e.rows-1,s=t+e.columns-1;te(this,o,n,t,s);for(let l=0;ltypeof e=="number")}Q.random=Q.rand;Q.randomInt=Q.randInt;Q.diagonal=Q.diag;Q.prototype.diagonal=Q.prototype.diag;Q.identity=Q.eye;Q.prototype.negate=Q.prototype.neg;Q.prototype.tensorProduct=Q.prototype.kroneckerProduct;var Ut,ee,ut;let I=(ut=class extends Q{constructor(o,t){super();Bt(this,Ut);me(this,"data");if(ut.isMatrix(o))Dt(this,Ut,ee).call(this,o.rows,o.columns),ut.copy(o,this);else if(Number.isInteger(o)&&o>=0)Dt(this,Ut,ee).call(this,o,t);else if(tt.isAnyArray(o)){const n=o;if(o=n.length,t=o?n[0].length:0,typeof t!="number")throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let s=0;s"u"&&(t=o,o=this.columns),nt(this,o,!0),t=gt(this,t);for(let n=0;n=0)for(let n=0;n=0)Rt(this,$,new I(o,o));else if(Rt(this,$,new I(o)),!this.isSymmetric())throw new TypeError("not symmetric data")}get size(){return st(this,$).size}get rows(){return st(this,$).rows}get columns(){return st(this,$).columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(o){return I.isMatrix(o)&&o.klassType==="SymmetricMatrix"}static zeros(o){return new this(o)}static ones(o){return new this(o).fill(1)}clone(){const o=new Qt(this.diagonalSize);for(const[t,n,s]of this.upperRightEntries())o.set(t,n,s);return o}toMatrix(){return new I(this)}get(o,t){return st(this,$).get(o,t)}set(o,t,n){return st(this,$).set(o,t,n),st(this,$).set(t,o,n),this}removeCross(o){return st(this,$).removeRow(o),st(this,$).removeColumn(o),this}addCross(o,t){t===void 0&&(t=o,o=this.diagonalSize);const n=t.slice();return n.splice(o,1),st(this,$).addRow(o,n),st(this,$).addColumn(o,t),this}applyMask(o){if(o.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const t=[];for(const[n,s]of o.entries())s||t.push(n);t.reverse();for(const n of t)this.removeCross(n);return this}toCompact(){const{diagonalSize:o}=this,t=new Array(o*(o+1)/2);for(let n=0,s=0,l=0;l=o&&(n=++s);return t}static fromCompact(o){const t=o.length,n=(Math.sqrt(8*t+1)-1)/2;if(!Number.isInteger(n))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(o)}`);const s=new Qt(n);for(let l=0,r=0,h=0;h=n&&(l=++r);return s}*upperRightEntries(){for(let o=0,t=0;o=this.diagonalSize&&(t=++o)}}*upperRightValues(){for(let o=0,t=0;o=this.diagonalSize&&(t=++o)}};$=new WeakMap;let at=Qt;at.prototype.klassType="SymmetricMatrix";class Yt extends at{static isDistanceMatrix(e){return at.isSymmetricMatrix(e)&&e.klassSubType==="DistanceMatrix"}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,o,t){return e===o&&(t=0),super.set(e,o,t)}addCross(e,o){return o===void 0&&(o=e,e=this.diagonalSize),o=o.slice(),o[e]=0,super.addCross(e,o)}toSymmetricMatrix(){return new at(this)}clone(){const e=new Yt(this.diagonalSize);for(const[o,t,n]of this.upperRightEntries())o!==t&&e.set(o,t,n);return e}toCompact(){const{diagonalSize:e}=this,o=(e-1)*e/2,t=new Array(o);for(let n=1,s=0,l=0;l=e&&(n=++s+1);return t}static fromCompact(e){const o=e.length;if(o===0)return new this(0);const t=(Math.sqrt(8*o+1)+1)/2;if(!Number.isInteger(t))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const n=new this(t);for(let s=1,l=0,r=0;r=t&&(s=++l+1);return n}}Yt.prototype.klassSubType="DistanceMatrix";class lt extends Q{constructor(e,o,t){super(),this.matrix=e,this.rows=o,this.columns=t}}class wn extends lt{constructor(e,o){nt(e,o),super(e,e.rows,1),this.column=o}set(e,o,t){return this.matrix.set(e,this.column,t),this}get(e){return this.matrix.get(e,this.column)}}class En extends lt{constructor(e,o){he(e,o),super(e,e.rows,o.length),this.columnIndices=o}set(e,o,t){return this.matrix.set(e,this.columnIndices[o],t),this}get(e,o){return this.matrix.get(e,this.columnIndices[o])}}class _n extends lt{constructor(e){super(e,e.rows,e.columns)}set(e,o,t){return this.matrix.set(e,this.columns-o-1,t),this}get(e,o){return this.matrix.get(e,this.columns-o-1)}}class yn extends lt{constructor(e){super(e,e.rows,e.columns)}set(e,o,t){return this.matrix.set(this.rows-e-1,o,t),this}get(e,o){return this.matrix.get(this.rows-e-1,o)}}class Sn extends lt{constructor(e,o){ot(e,o),super(e,1,e.columns),this.row=o}set(e,o,t){return this.matrix.set(this.row,o,t),this}get(e,o){return this.matrix.get(this.row,o)}}class Un extends lt{constructor(e,o){le(e,o),super(e,o.length,e.columns),this.rowIndices=o}set(e,o,t){return this.matrix.set(this.rowIndices[e],o,t),this}get(e,o){return this.matrix.get(this.rowIndices[e],o)}}class Ct extends lt{constructor(e,o,t){le(e,o),he(e,t),super(e,o.length,t.length),this.rowIndices=o,this.columnIndices=t}set(e,o,t){return this.matrix.set(this.rowIndices[e],this.columnIndices[o],t),this}get(e,o){return this.matrix.get(this.rowIndices[e],this.columnIndices[o])}}class qn extends lt{constructor(e,o,t,n,s){te(e,o,t,n,s),super(e,t-o+1,s-n+1),this.startRow=o,this.startColumn=n}set(e,o,t){return this.matrix.set(this.startRow+e,this.startColumn+o,t),this}get(e,o){return this.matrix.get(this.startRow+e,this.startColumn+o)}}class vn extends lt{constructor(e){super(e,e.columns,e.rows)}set(e,o,t){return this.matrix.set(o,e,t),this}get(e,o){return this.matrix.get(o,e)}}class oo extends Q{constructor(e,o={}){const{rows:t=1}=o;if(e.length%t!==0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=t,this.columns=e.length/t,this.data=e}set(e,o,t){let n=this._calculateIndex(e,o);return this.data[n]=t,this}get(e,o){let t=this._calculateIndex(e,o);return this.data[t]}_calculateIndex(e,o){return e*this.columns+o}}class et extends Q{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,o,t){return this.data[e][o]=t,this}get(e,o){return this.data[e][o]}}function Rn(i,e){if(tt.isAnyArray(i))return i[0]&&tt.isAnyArray(i[0])?new et(i):new oo(i,e);throw new Error("the argument is not an array")}class Lt{constructor(e){e=et.checkMatrix(e);let o=e.clone(),t=o.rows,n=o.columns,s=new Float64Array(t),l=1,r,h,c,f,u,g,d,p,_;for(r=0;rMath.abs(p[f])&&(f=r);if(f!==h){for(c=0;c=0;c--){for(h=0;hl?n.set(s,l,e.get(s,l)):s===l?n.set(s,l,1):n.set(s,l,0);return n}get upperTriangularMatrix(){let e=this.LU,o=e.rows,t=e.columns,n=new I(o,t);for(let s=0;sMath.abs(e)?(o=e/i,Math.abs(i)*Math.sqrt(1+o*o)):e!==0?(o=i/e,Math.abs(e)*Math.sqrt(1+o*o)):0}class ce{constructor(e){e=et.checkMatrix(e);let o=e.clone(),t=e.rows,n=e.columns,s=new Float64Array(n),l,r,h,c;for(h=0;h=0;c--){for(h=0;h=0;r--){for(s=0;s=0;m--)if(p[m]!==0){for(let S=m+1;S=0;m--){if(m0;){let m,S;for(m=b-2;m>=-1&&m!==-1;m--){const v=Number.MIN_VALUE+V*Math.abs(p[m]+Math.abs(p[m+1]));if(Math.abs(a[m])<=v||Number.isNaN(a[m])){a[m]=0;break}}if(m===b-2)S=4;else{let v;for(v=b-1;v>=m&&v!==m;v--){let y=(v!==b?Math.abs(a[v]):0)+(v!==m+1?Math.abs(a[v-1]):0);if(Math.abs(p[v])<=V*y){p[v]=0;break}}v===m?S=3:v===b-1?S=1:(S=2,m=v)}switch(m++,S){case 1:{let v=a[b-2];a[b-2]=0;for(let y=b-2;y>=m;y--){let M=it(p[y],v),K=p[y]/M,A=v/M;if(p[y]=M,y!==m&&(v=-A*a[y-1],a[y-1]=K*a[y-1]),c)for(let W=0;W=p[m+1]);){let v=p[m];if(p[m]=p[m+1],p[m+1]=v,c&&mo&&s.set(f,u,e.get(f,u)/this.s[u]);let l=this.U,r=l.rows,h=l.columns,c=new I(t,r);for(let f=0;fe&&o++;return o}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return I.diag(this.s)}}function Vn(i,e=!1){return i=et.checkMatrix(i),e?new Et(i).inverse():no(i,I.eye(i.rows))}function no(i,e,o=!1){return i=et.checkMatrix(i),e=et.checkMatrix(e),o?new Et(i).solve(e):i.isSquare()?new Lt(i).solve(e):new ce(i).solve(e)}function Kt(i){if(i=I.checkMatrix(i),i.isSquare()){if(i.columns===0)return 1;let e,o,t,n;if(i.columns===2)return e=i.get(0,0),o=i.get(0,1),t=i.get(1,0),n=i.get(1,1),e*n-o*t;if(i.columns===3){let s,l,r;return s=new Ct(i,[1,2],[1,2]),l=new Ct(i,[1,2],[0,2]),r=new Ct(i,[1,2],[0,1]),e=i.get(0,0),o=i.get(0,1),t=i.get(0,2),e*Kt(s)-o*Kt(l)+t*Kt(r)}else return new Lt(i).determinant}else throw Error("determinant can only be calculated for a square matrix")}function bn(i,e){let o=[];for(let t=0;tn)return new Array(e.rows+1).fill(0);{let s=e.addRow(o,[0]);for(let l=0;le?s[l]=1/s[l]:s[l]=0;return n.mmul(I.diag(s).mmul(t.transpose()))}function Mn(i,e=i,o={}){i=new I(i);let t=!1;if(typeof e=="object"&&!I.isMatrix(e)&&!tt.isAnyArray(e)?(o=e,e=i,t=!0):e=new I(e),i.rows!==e.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:n=!0}=o;n&&(i=i.center("column"),t||(e=e.center("column")));const s=i.transpose().mmul(e);for(let l=0;l0?n.set(s,s+1,o[s]):o[s]<0&&n.set(s,s-1,o[s])}return n}}function Cn(i,e,o,t){let n,s,l,r,h,c,f,u;for(h=0;h0;r--){for(u=0,l=0,c=0;c0&&(s=-s),e[r]=u*s,l=l-n*s,o[r-1]=n-s,h=0;hc)do{for(n=o[c],u=(o[c+1]-n)/(2*e[c]),g=it(u,1),u<0&&(g=-g),o[c]=e[c]/(u+g),o[c+1]=e[c]*(u+g),d=o[c+1],s=n-o[c],l=c+2;l=c;l--)for(q=_,_=p,U=w,n=p*e[l],s=p*u,g=it(u,e[l]),e[l+1]=w*g,w=e[l]/g,p=u/g,u=p*o[l]-w*n,o[l+1]=s+w*(p*n+w*o[l]),h=0;hk*R);o[c]=o[c]+E,e[c]=0}for(l=0;l=u;c--)o[c]=e.get(c,u-1)/g,h+=o[c]*o[c];for(r=Math.sqrt(h),o[u]>0&&(r=-r),h=h-o[u]*r,o[u]=o[u]-r,f=u;f=u;c--)l+=o[c]*e.get(c,f);for(l=l/h,c=u;c<=s;c++)e.set(c,f,e.get(c,f)-l*o[c])}for(c=0;c<=s;c++){for(l=0,f=s;f>=u;f--)l+=o[f]*e.get(c,f);for(l=l/h,f=u;f<=s;f++)e.set(c,f,e.get(c,f)-l*o[f])}o[u]=g*o[u],e.set(u,u-1,g*r)}}for(c=0;c=n+1;u--)if(e.get(u,u-1)!==0){for(c=u+1;c<=s;c++)o[c]=e.get(c,u-1);for(f=u;f<=s;f++){for(r=0,c=u;c<=s;c++)r+=o[c]*t.get(c,f);for(r=r/o[u]/e.get(u,u-1),c=u;c<=s;c++)t.set(c,f,t.get(c,f)+r*o[c])}}}function xn(i,e,o,t,n){let s=i-1,l=0,r=i-1,h=Number.EPSILON,c=0,f=0,u=0,g=0,d=0,p=0,_=0,q=0,a,w,U,E,R,k,b,F,V,m,S,v,y,M,K;for(a=0;ar)&&(o[a]=n.get(a,a),e[a]=0),w=Math.max(a-1,0);w=l;){for(E=s;E>l&&(p=Math.abs(n.get(E-1,E-1))+Math.abs(n.get(E,E)),p===0&&(p=f),!(Math.abs(n.get(E,E-1))=0){for(_=u>=0?u+_:u-_,o[s-1]=F+_,o[s]=o[s-1],_!==0&&(o[s]=F-b/_),e[s-1]=0,e[s]=0,F=n.get(s,s-1),p=Math.abs(F)+Math.abs(_),u=F/p,g=_/p,d=Math.sqrt(u*u+g*g),u=u/d,g=g/d,w=s-1;w0)){for(p=Math.sqrt(p),V=E&&(_=n.get(R,R),d=F-_,p=V-_,u=(d*p-b)/n.get(R+1,R)+n.get(R,R+1),g=n.get(R+1,R+1)-_-d-p,d=n.get(R+2,R+1),p=Math.abs(u)+Math.abs(g)+Math.abs(d),u=u/p,g=g/p,d=d/p,!(R===E||Math.abs(n.get(R,R-1))*(Math.abs(g)+Math.abs(d))R+2&&n.set(a,a-3,0);for(U=R;U<=s-1&&(M=U!==s-1,U!==R&&(u=n.get(U,U-1),g=n.get(U+1,U-1),d=M?n.get(U+2,U-1):0,F=Math.abs(u)+Math.abs(g)+Math.abs(d),F!==0&&(u=u/F,g=g/F,d=d/F)),F!==0);U++)if(p=Math.sqrt(u*u+g*g+d*d),u<0&&(p=-p),p!==0){for(U!==R?n.set(U,U-1,-p*F):E!==R&&n.set(U,U-1,-n.get(U,U-1)),u=u+p,F=u/p,V=g/p,_=d/p,g=g/u,d=d/u,w=U;w=0;s--)if(u=o[s],g=e[s],g===0)for(E=s,n.set(s,s,1),a=s-1;a>=0;a--){for(b=n.get(a,a)-u,d=0,w=E;w<=s;w++)d=d+n.get(a,w)*n.get(w,s);if(e[a]<0)_=b,p=d;else if(E=a,e[a]===0?n.set(a,s,b!==0?-d/b:-d/(h*f)):(F=n.get(a,a+1),V=n.get(a+1,a),g=(o[a]-u)*(o[a]-u)+e[a]*e[a],k=(F*p-_*d)/g,n.set(a,s,k),n.set(a+1,s,Math.abs(F)>Math.abs(_)?(-d-b*k)/F:(-p-V*k)/_)),k=Math.abs(n.get(a,s)),h*k*k>1)for(w=a;w<=s;w++)n.set(w,s,n.get(w,s)/k)}else if(g<0)for(E=s-1,Math.abs(n.get(s,s-1))>Math.abs(n.get(s-1,s))?(n.set(s-1,s-1,g/n.get(s,s-1)),n.set(s-1,s,-(n.get(s,s)-u)/n.get(s,s-1))):(K=kt(0,-n.get(s-1,s),n.get(s-1,s-1)-u,g),n.set(s-1,s-1,K[0]),n.set(s-1,s,K[1])),n.set(s,s-1,0),n.set(s,s,1),a=s-2;a>=0;a--){for(m=0,S=0,w=E;w<=s;w++)m=m+n.get(a,w)*n.get(w,s-1),S=S+n.get(a,w)*n.get(w,s);if(b=n.get(a,a)-u,e[a]<0)_=b,d=m,p=S;else if(E=a,e[a]===0?(K=kt(-m,-S,b,g),n.set(a,s-1,K[0]),n.set(a,s,K[1])):(F=n.get(a,a+1),V=n.get(a+1,a),v=(o[a]-u)*(o[a]-u)+e[a]*e[a]-g*g,y=(o[a]-u)*2*g,v===0&&y===0&&(v=h*f*(Math.abs(b)+Math.abs(g)+Math.abs(F)+Math.abs(V)+Math.abs(_))),K=kt(F*d-_*m+g*S,F*p-_*S-g*m,v,y),n.set(a,s-1,K[0]),n.set(a,s,K[1]),Math.abs(F)>Math.abs(_)+Math.abs(g)?(n.set(a+1,s-1,(-m-b*n.get(a,s-1)+g*n.get(a,s))/F),n.set(a+1,s,(-S-b*n.get(a,s)-g*n.get(a,s-1))/F)):(K=kt(-d-V*n.get(a,s-1),-p-V*n.get(a,s),_,g),n.set(a+1,s-1,K[0]),n.set(a+1,s,K[1]))),k=Math.max(Math.abs(n.get(a,s-1)),Math.abs(n.get(a,s))),h*k*k>1)for(w=a;w<=s;w++)n.set(w,s-1,n.get(w,s-1)/k),n.set(w,s,n.get(w,s)/k)}for(a=0;ar)for(w=a;w=l;w--)for(a=l;a<=r;a++){for(_=0,U=l;U<=Math.min(w,r);U++)_=_+t.get(a,U)*n.get(U,w);t.set(a,w,_)}}}function kt(i,e,o,t){let n,s;return Math.abs(o)>Math.abs(t)?(n=t/o,s=o+n*t,[(i+n*e)/s,(e-n*i)/s]):(n=o/t,s=t+n*o,[(n*i+e)/s,(n*e-i)/s])}class io{constructor(e){if(e=et.checkMatrix(e),!e.isSymmetric())throw new Error("Matrix is not symmetric");let o=e,t=o.rows,n=new I(t,t),s=!0,l,r,h;for(r=0;r0,n.set(r,r,Math.sqrt(Math.max(c,0))),h=r+1;h=0;h--)for(r=0;rl;d++)u=e.transpose().mmul(r).div(r.transpose().mmul(r).get(0,0)),u=u.div(u.norm()),c=e.mmul(u).div(u.transpose().mmul(u).get(0,0)),d>0&&(h=c.clone().sub(g).pow(2).sum()),g=c.clone(),t?(f=t.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0)),f=f.div(f.norm()),r=t.mmul(f).div(f.transpose().mmul(f).get(0,0))):r=c;if(t){let d=e.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0));d=d.div(d.norm());let p=e.clone().sub(c.clone().mmul(d.transpose())),_=r.transpose().mmul(c).div(c.transpose().mmul(c).get(0,0)),q=t.clone().sub(c.clone().mulS(_.get(0,0)).mmul(f.transpose()));this.t=c,this.p=d.transpose(),this.w=u.transpose(),this.q=f,this.u=r,this.s=c.transpose().mmul(c),this.xResidual=p,this.yResidual=q,this.betas=_}else this.w=u.transpose(),this.s=c.transpose().mmul(c).sqrt(),n?this.t=c.clone().div(this.s.get(0,0)):this.t=c,this.xResidual=e.sub(c.mmul(u.transpose()))}}J.AbstractMatrix=Q;J.CHO=io;J.CholeskyDecomposition=io;J.DistanceMatrix=Yt;J.EVD=so;J.EigenvalueDecomposition=so;J.LU=Lt;J.LuDecomposition=Lt;var lo=J.Matrix=I;J.MatrixColumnSelectionView=En;J.MatrixColumnView=wn;J.MatrixFlipColumnView=_n;J.MatrixFlipRowView=yn;J.MatrixRowSelectionView=Un;J.MatrixRowView=Sn;J.MatrixSelectionView=Ct;J.MatrixSubView=qn;J.MatrixTransposeView=vn;J.NIPALS=ro;J.Nipals=ro;J.QR=ce;J.QrDecomposition=ce;J.SVD=Et;J.SingularValueDecomposition=Et;J.SymmetricMatrix=at;J.WrapperMatrix1D=oo;J.WrapperMatrix2D=et;J.correlation=Nn;J.covariance=Mn;var ke=J.default=I;J.determinant=Kt;J.inverse=Vn;J.linearDependencies=kn;J.pseudoInverse=In;J.solve=no;J.wrap=Rn;const pt=lo;ke.Matrix&&ke.Matrix;const Ie=8,Qn=1/16777216,Jn=15,An=18,Wn=11;function jn(i,e){i>>>=0,e>>>=0;const o=i&65535;return((i-o)*e>>>0)+o*e>>>0}class Yn{constructor(e=Date.now()){this.state=new Uint32Array(4),this.init(e),this.random=this.getFloat.bind(this)}getUint32(){return this.nextState(),this.state[3]+this.state[2]>>>0}getFloat(){return(this.getUint32()>>>8)*Qn}init(e){if(!Number.isInteger(e))throw new TypeError("seed must be an integer");this.state[0]=e,this.state[1]=0,this.state[2]=0,this.state[3]=0;for(let o=1;o>>30>>>0)>>>0;this.periodCertification();for(let o=0;o>>An,e^=this.state[3]<Ln)throw new Error(`probabilities should sum to 1, but instead sums to ${r[r.length-1]}`)}if(n===!1&&t>l.length)throw new Error("size option is too large");const h=[];for(let c=0;co[n];)n++;return n}else return Math.floor(t*i)}class ae{constructor(e=Math.random){if(typeof e=="number"){const o=new Yn(e);this.randomGenerator=o.random}else this.randomGenerator=e}choice(e,o){return typeof e=="number"?Me(e,o,this.randomGenerator):Me(e,o,this.randomGenerator)}random(){return this.randomGenerator()}randInt(e,o){return o===void 0&&(o=e,e=0),e+Math.floor(this.randomGenerator()*(o-e))}randomSample(e){const o=[];for(let t=0;t1){let l={dist:-1,index:-1};for(let r=0;rl.dist&&(l.dist=o[s[0]][r],l.index=r);if(s[1]=l.index,e>2)for(let r=2;rh.dist&&(h={...f})}s[r]=h.index}}return s.map(l=>i[l])}function zn(i,e,o={}){const t=new pt(i),n=t.rows,s=new ae(o.seed),l=[],r=o.localTrials||2+Math.floor(Math.log(e)),h=s.randInt(n);l.push(t.getRow(h));let c=new pt(1,t.rows);for(let d=0;dd&&(d=E,g=U)}const p=f.get(g),_=cv.boundingRect(p),q=t.roi(_),{gridCells:a,expandedRect:w}=os(q,e,o);return t.delete(),n.delete(),s.delete(),l.delete(),r.delete(),h.delete(),c.delete(),f.delete(),u.delete(),q.delete(),{gridCells:a,chessboardRect:{x:_.x+w.x,y:_.y+w.y,width:w.width,height:w.height}}}function os(i,e,o){const t=new cv.Mat;cv.cvtColor(i,t,cv.COLOR_RGBA2GRAY);const n=new cv.Mat;cv.GaussianBlur(t,n,new cv.Size(5,5),0);const s=new cv.Mat;cv.Canny(n,s,50,150);const l=new cv.Mat;if(cv.HoughLinesP(s,l,1,Math.PI/180,80,100,50),l.rows===0)return console.log("无法检测到棋盘线条。"),{gridCells:[],expandedRect:{x:0,y:0,width:0,height:0}};const r=[],h=[];for(let T=0;T80&&h.push([Y,j,L,B])}if(r.length<10||h.length<9)return console.log("线条不足,无法进行 KMeans 聚类。"),{gridCells:[],expandedRect:{x:0,y:0,width:0,height:0}};const c=r.flatMap(T=>[T[1],T[3]]),f=h.flatMap(T=>[T[0],T[2]]),u=Ce(c.map(T=>[T]),10,{maxIterations:100}),g=Ce(f.map(T=>[T]),9,{maxIterations:100}),d=u.centroids.map(T=>T[0]).sort((T,Y)=>T-Y),p=g.centroids.map(T=>T[0]).sort((T,Y)=>T-Y),_=Math.floor(d[0]),q=Math.ceil(d[d.length-1]),a=Math.floor(p[0]),w=Math.ceil(p[p.length-1]),U=i.roi(new cv.Rect(a,_,w-a,q-_)),E=w-a,R=q-_,k=Math.floor(E*e),b=Math.floor(R*o),F=Math.max(0,a-k),V=Math.max(0,_-b),m=Math.min(i.cols-F,E+2*k),S=Math.min(i.rows-V,R+2*b),v=i.roi(new cv.Rect(F,V,m,S)),y=10,M=9,K=Math.floor(S/y),A=Math.floor(m/M),W=[];for(let T=0;Te}function ss(i){const e=ue(i),o=xt(e,[0,120,120],[10,255,255],[160,120,120],[179,255,255]),t=xt(e,[0,0,0],[180,255,80]),n=i.width*i.height,s=cv.countNonZero(o),l=cv.countNonZero(t),r=s/n,h=l/n;return e.delete(),o.delete(),t.delete(),r>.05?"red":h>.05?"black":"unknown"}function is(i,e){let o;if(e==="red")o=rs(i);else if(e==="black")o=ls(i);else return i;const t=hs(o);let n=new cv.Mat;t.channels()===1?cv.cvtColor(t,n,cv.COLOR_GRAY2RGBA):t.channels()===3?cv.cvtColor(t,n,cv.COLOR_RGB2RGBA):n=t.clone();const s=new ImageData(new Uint8ClampedArray(n.data),n.cols,n.rows);return o.delete(),t.delete(),n.delete(),s}function rs(i){const e=ue(i),o=xt(e,[0,100,100],[10,255,255],[160,100,100],[179,255,255]);return e.delete(),o}function ls(i){const e=ue(i),o=new cv.MatVector;cv.split(e,o);const t=o.get(2);cv.equalizeHist(t,t),o.set(2,t),cv.merge(o,e);const n=new cv.Mat;cv.Canny(e,n,400,600);const s=cv.Mat.ones(3,3,cv.CV_8U),l=new cv.Mat;cv.morphologyEx(n,l,cv.MORPH_CLOSE,s);const r=new cv.MatVector,h=new cv.Mat;cv.findContours(l,r,h,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE);let c;if(r.size()===0)c=cv.Mat.zeros(e.rows,e.cols,cv.CV_8UC1);else{let f=0,u=r.get(0);for(let E=0;Ef&&(f=k,u=R)}const g=cv.moments(u,!1),d=g.m10/g.m00,p=g.m01/g.m00,_=new cv.Point(d,p),q=.98,a=new cv.Mat(u.rows,1,cv.CV_32SC2);for(let E=0;E=.5&&l.push({contour:p,contourArea:a,rect:_})}p.delete()}if(l.length===0)return o.delete(),t.delete(),n.delete(),e;l.sort((d,p)=>p.contourArea-d.contourArea);const r=l[0],{x:h,y:c,width:f,height:u}=r.rect,g=e.roi(new cv.Rect(h,c,f,u));return o.delete(),t.delete(),n.delete(),e.delete(),g}function ue(i){const e=cv.matFromImageData(i),o=new cv.Mat;cv.cvtColor(e,o,cv.COLOR_RGBA2RGB);const t=new cv.Mat;return cv.cvtColor(o,t,cv.COLOR_RGB2HSV),e.delete(),o.delete(),t}function Ke(i,e,o){const t=new cv.Mat;return cv.inRange(i,cv.matFromArray(1,3,cv.CV_8UC1,e),cv.matFromArray(1,3,cv.CV_8UC1,o),t),t}function xt(i,e,o,t,n){const s=Ke(i,e,o);if(t&&n){const l=Ke(i,t,n),r=new cv.Mat;return cv.bitwise_or(s,l,r),s.delete(),l.delete(),r}return s}const cs={red_king:"帥",red_guard:"仕",red_bishop:"相",red_knight:"傌",red_rook:"俥",red_cannon:"炮",red_pawn:"兵",black_king:"将",black_guard:"士",black_bishop:"象",black_knight:"馬",black_rook:"車",black_cannon:"炮",black_pawn:"卒"};function as(i,e,o){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;const n=t.getContext("2d");n.drawImage(i,0,0,t.width,t.height),n.strokeStyle="rgba(0, 255, 0, 0.5)",n.lineWidth=2,n.strokeRect(e.x,e.y,e.width,e.height);const s=e.width/9,l=e.height/10;return o.forEach(r=>{const[h,c]=r.position,f=e.x+c*s,u=e.y+h*l;if(n.strokeStyle=r.color==="red"?"rgba(255, 0, 0, 0.7)":"rgba(0, 0, 0, 0.7)",n.lineWidth=2,n.strokeRect(f,u,s,l),r.type&&r.type!=="none"){const g=`${r.color}_${us(r.type)}`,d=cs[g]||"";n.fillStyle=r.color==="red"?"rgba(255, 50, 50, 0.9)":"rgba(50, 50, 50, 0.9)",n.font="bold 24px Arial",n.textAlign="right",n.textBaseline="bottom",n.fillText(d,f+s-5,u+l-5)}}),t}function us(i){return{k:"king",a:"guard",b:"bishop",n:"knight",r:"rook",c:"cannon",p:"pawn",none:"none"}[i]}const fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAETklEQVRoBZXBiYGCQAAEsEz/Rc+BIJ8Lekn8T+3iX+JXdSd+Ej9o6ll8F9/ULg7qKL6JL2oTA7WJR/GoVvGgFmnciwe1iO9qksatuFOLOKlFXJVU3IkbNUnjot7iql5iKIbqJUZqER9qEkMxUi8xUm/xqYiR+FQvMVIH8ale4io+1CyG6iQGahYXcVWzGKqzGKlZnMVFTWKormKoZnESZzWJofoQN2oSR3FSxFCNxI2axEEc1SQG6kNqEjdqErs4qElc1ZO4UanYxK6ID/UsbtQk3mJXxFV9EbeKWMWmiA+1Su2i3uJOEat4K+JTLVKbUJu4VcQiVjWJDzWLeotJ7eJeES+xKjFQR7GoXTwo4iUWRQzUJlZ1FE+KmMVLTWKgVrGqk3hWxCReihipWbzVSXxTxCRmRYxVbOosvisxiVmJ7+oiflAEMSnxVT2IeyWISYln9VXcKEFQxIP6TQyVICjiXv0sRioISgyUmNWToFYxUEJQMVLErO7ES73FQIlQYqQmUavUSbzVLj6VCCVG6iq1il0dxUBFKDFSt2JXJzFQEUqM1EFQm3irt6BioCJKDNVbLOotFrWKeomBkigxUqtY1SZm9SFGSqLESC1iVZugPsWNSpQYqEW81FdxrxIlBupf4lElRQzUP8QXlRQxUD+LryopMVK/iV9UUmKkDlIX8S8lJYZqlzqJs4pHJSWG6ipqFhc1i3slJcaK1CY1i4taxa2SEmMlFFGruKhN3Copca9mqUVc1EHcqqTEnTqLiyJqEbcqKTFUA3FQk9QsJW5VUsSnuhOLmkRt4lYlRVzUo5jUJGoT9ypR4qB+kJqE2sS9kiixqUepXahNPCiJEm/1IE1tQm3iUUWUWNWTUJuoTTyrCCVe6irqINQqtYkvKkKJlzqIWZ2lPsQ3FUKJWb3FqkZSB/FVhaDEpF5iU1/FDyoEJahJHNRA1C5+UEJQhBK7Okm9hNrFD0oIirioo6hFqJP4poKgiLM6ilqkRuJBCWJSxFEdhPpFDJUgJkUc1SRqEvWz+FAEMStiValNqP+JkxKTmBWxql2o/4tdEZN4KWJRb0Hton4Tb0XM4qUmsahZzGoXs1ql7sWqiFksiljUJGa1i5daxKI2qU28FPESqyIWNQlqF4taxK5WqbeYFLGIVU3ipV5Su1jUIs7qIiZFLOKtiEVdxKpW8aFOQhGr2BSxqJNY1SqGahdFvMWmJrGog1jVWzwpoohN7GoSizoJtUiJHxSxiYOaxKLGouIHReziqCaxqEnqIhXf1SQO4qQmsahZ6iBFfFWTOIqzmsSqLqLiu5rESVzUJFZ1EI2Kr2oSZ3FVk3irXfymJnERH4rY1Vv8pIgPMVJiV4v4RRGfYqRm8Vaz+EURAzFUk/i/msRIjNUs/qmIsbhTs/hdTeJO3KtFfFcvcS8e1Fs8qLd4EM9qFwO1iUfxVR3Fok7iq/hJpW7FL+I/6iD+5w8rOJhwB3wAwQAAAABJRU5ErkJggg==",ms=Object.freeze(Object.defineProperty({__proto__:null,default:fs},Symbol.toStringTag,{value:"Module"})),gs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAABmCAAAAADpSjAOAAAErklEQVRoBa3BC6KqSgIEsNT+F13TfMRGUTz3TRJ/Vrv4m/hdXYlfxU+a+iruxQ/qXtyKO/UUb+oQ38V39RAf1S6+iW9qFzdqE5/FR7WLn9QQn8UntYrf1ZDGtbhWm/iTEp/EpVrFnxVpXIgrtYh/Uot4E+9qETcqLtUqXsS7GuJODXGlFnEWr2oRt2oVF2oRJ/GihvhB7eJdLWIWZzXET2oXF2qISZwU8aM6xIUinmJWQ/yqDnGhiENMaoif1ZBaxJumxCGeaogrFe/qKS4U8RBPRbyrTZzVJK4UsYtDEW/qECe1Sg1xpYbYxEMRL+osnmqTIq7VEKvYFTGrd3GoSXxSxCp2JR7qg3ioXUoMJd7UEIvYFPFQH8SuHlKhdvGqiCE2RTzUB7Gpz+KsiCFWJZ7qWqzqqzgpYohFEZO6ELv6Lk6KIBZFzOpN7OqQpobULGZFEIsiTuohijjUU6ios5iVIIYiXtUmKia1Sc2iDjEpQQwlrtQuJnUWh3qISQUxlLhSpMSsZjGpQzyVEJS4VKTipA5xVod4KiEocaVIxVlt4k0dYlIiKHGlSMVZDXGhnmJSIqi4UqTEWYldEQ91iJOKUOJCreKj2sWmHuKsIpS4UKTxQc1iqId4URJKvKtNXKhXQe3iVUko8a5IxYV6F2oXbypR4l2Rigt1IWoX7ypR4l0t4lV9EDWkxLtKlHhTxLu6EhU1pOJCJUq8KWJTQ6zqXaioISUuVKLEqxrSUA8x1CpNbWJo1C6uVKLEqyINNYmhFmlqFTTULq6UKPFUT1EnQa1CPYR6iCslRTzVIeosqE1qlaZRD3GppIhJPaRehTpLRT3EtRIlZvVZ1HdxrUSJWR1ST7Goz1LxQYkSs5qEWkQFdRI1iw8qUWJST7GoISqoSUpqFSU+qUSJST3FolYx1CE1iRIfVaLEU01iUaRiqEVQuxQp4rNKlDjULBZFbGoWi9rEF5Uo8VAnsShSMRSpRexqFV+URBG7OgtqFYsiFbNaxBclUcSmNqlNqE0silTMiviqJJRY1SZqk1qlsahVnJT4riKUWNQqqLNUDLWIP6sIJYbaBPUqFrWIeyUOJUIR1CqGOknTGGoR90ocKgQlqEUs6iQ0qFXcK3GoEBShhljVi1jUKu6VeCghKEIRmzqLVa3iXomHEmIooeKhZrGrVdwrsStBDCVOahIPtYpbRexKEEMRs3qISa3iTg2xK0EMNcSkdjGrVdypRayKIBZFzGoTs1rFjVrFqsQQixpiVquY1Sa+qk0sihhiVcRJLWJWu/isDkERi9gUcVLEST3FpZoERSxiU8RZibM6iZN6EYpYxa6IO/U3qSFWsash7tSvUqSITTxUKu7UT6KGlNjFoYa4VbdCDVHxEE9F3KtfpeIQTzXEL+oHUeIQkxriZ/VJDEU8xayG+Ks6xKGISZzUEP8HNcQszmqI/6yGOIkXNcR/VEOcxasa4j+pIV7Em1rEP6tFvIorRfyrGuJNXCnS+Bc1xIW4VEP8Wa3iSlyrRfxRDXEtPqhV/K6pIT6Ij2oXP6hNfBTf1C6+ql18EV/VU1yrh/gqbpTUISY1iTtxr1E34l78QR1Si/iD/wETNddw4LVh4wAAAABJRU5ErkJggg==",ps=Object.freeze(Object.defineProperty({__proto__:null,default:gs},Symbol.toStringTag,{value:"Module"})),ds="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAADbUlEQVRoBa3BCYKkRgADMPn/j3aKvoA+oNiJFJfUVlwRk+q3mBET6kycizO1EY2b2oszcaxW8UWt4kgcqac4UA9xIH6rhzhVd/FT/FJ3Malu4of4ru5iXt3Ed/FV3cRFtYhv4ou6i+tqEZ/iUy3i39QiPsSHWsS/qpt4E+9qEX9Qi9iLN7WIP6lF7MReDfFnNcRW7BRxpIhzNcRGbNUQB+ouThWxio0ijtRLnKghXmJVQxyprThUQzzFSw1xrLbiUA3xEE81xInaiSM1xEM81RBnaieO1BB38VBDnKutOFbETdwVMaO24lgRN3FXYkptxbEaYhE3RcypjThRxCJuiphTG3GmiCEWRUyqjThTxBCLIibVRpwqghhKTKtVnCuCGEpMq1VMKEFQxLRaxYQSBCXm1SpmVBCKmFermFFCKGJerWJGCaHEBbWKKSVCiQtqFVNKRBEX1CqmlIgiLqhV7NRLbJVEiStqFXf1RbxURIkLalo8lUSJC2pePJREiWl1STxUUsS5+idxV0kRh+rfxV0lRfxSfxR3lZTYaDzUnwQVdyUlnup/lYq7khJPNSE1KRp3JSVe6p/EU22k8VBS4qWuia9qEatKSrzUNTGpkhKruiQmVVJiVUeC2ohJlZTYqB/irjZiUiVFrOqLWNVGTKqkiI16Ezu1EZMqUWKrtuJNbcSckiixUy/xoTZiTkWU2KtFfFWrmFQRJS6oVUyqiCLm1SomVYQS82oVcyqEEvNqFXMqBCVm1UbMqRCUmFUbUTdxpIKgiEm1EbWKHyoIiphUv8VXJQiKmFRH4osSBDXEqToXn0oQQxFHala8K4JYFPFNXRRvihhiUcSHui7elFjEooZ4VydSH2KniEXc1BB79S9ip4hF3BXxpv5BbBVxE3c1xF5dF1tF3MVDDbFXP8VTbcVWEXfxVMRefYqv6ia2iniIlyL2ai+uKOIpXmqIvVrFNTXEU6xqiDd1FxfVEC+xUUPs1SKuqiFWsVVD7JW4rIbYiJ0a4u9qiK3YqyH+qobYiTdNib+pIfbiXQ3xFzXEm/hQxB8U8SE+NSX+UQ3xKb6pRfyDGuKL+KqGuKyG+Cq+q0Vc0dQQ38UvtUhjTt3EL/Fb3cWpeoif4kC9xG/1FAfiUG3EF/USh+JM7cRQH+JMzKhDMSOuqK245D9LSCVxusul6AAAAABJRU5ErkJggg==",ws=Object.freeze(Object.defineProperty({__proto__:null,default:ds},Symbol.toStringTag,{value:"Module"})),Es="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGkAAABlCAAAAABrK5KdAAAE9UlEQVRoBZ3BiWHkNgAEMEz/RU9I/dqVfHaA+JO6ij+IX6pX8RvxC/UP8W/xD3URh7qLf4if1Ske1Cl+ED+pTfykVvGDeFeb+KdaxZt4U6v4nZISL+JZreIPaopH8agW8Te1iAfxoBbxsyLuaopv8a2m+FFt4q6G+BJfaoof1SluahF38amG+FndxE1NcRN3NcWm8aREneKmpriKuyIORXyqGOoUNzXFRdwUcaop7hpTneKupjjFVQ1xUVNcNRZ1EZ+KOMRFDXFVi3hQX+JUQ+ziVEPc1Cq+1JPY1RSbONQQd7WJT/UoDkVsYldDfKpN3NWL2NUQq9gV8aWGFHFVr+JQxCI2RXyrXVzVp9QmdkUsYlXEg5pS4qI2qV1qE7siplgV8aB2capN6kEcSkyxKOJJ7eJQd0EtosShiCGmIh7VLg61SE0x1BRKXBRBTEU8ql3sapEaYlFDUOKiCGIo4lntYlOL1BCLmkLjQxFiKOJZLVKxqFWKWNUiHhQhhhIvaoqKqS5iU0M8KyEo4kVNKTHVKTY1xbMSghI3FZvaxFQ3MdUUbyoEJRZ1ikUdgvoQ1BQaT0qEEqu6iKkOQX2KmlLiUYlQYlOnmGoXQ/0gXlSEEpu6iKE2MdW7eFMSJXZ1FdQmpjqkbuJVSZQ41EWoXUz1Jt6VRIlTnUJtYlEv4ieVKHFRu6A2sSiiPsWPSpS4qtQU1Co+1UXc1BCnkiIuahGLWsWHuohF3cWupIiLmmJRm7io34pVSYmLmmJRu7ioX4tVpcSppljUIa7q12JRKXGqIRZ1iJv6vZgqJU5FLOoUF/Ui6iYlpkqJQ4lVXcSh3kTdRcVUKXForOomNvUuKtQpNpUSu8aq7mJRh9SnqHhWKbFrTLVJrUJdpTYx1BCNF5USm8ZQu6gfxaaGVLyolNg0qF2od3FRpOJFpcSmUqtoUG/iphbxolJiVYdY1bP4UIt4USliqkOs6pDaxbdaxLMSJabaBI2hVqE28aQW8axEialWQWOqVQw1xKbEqVbxqESJqRZxqlVc1CF2tYpHlSgx1SJOtYldXcWmVvGoEiWmmmLXqFXs6i5WtYpHlShiKkJjqqghFZv6FItaxZOKUGIq4tCoIRWb+hSLWsSjilDEUMShFlGxqVVqF4taxJOKoMRQpGJVi6i4KlKbmGoVDyoERQxF7GoRFVc1paZY1CoeVAiKmIrY1CoVu0ZdxaJW8a2EoIgvdYhdSZ1iVav4VkJQQ3yqQxxKUIvY1Cq+FCGGIj7VIU4lvtQqvhQhpiI+1CEuivhQq/hUBDEV8aEOcVFT3NQqPhVBTDXEh9rFVS3iolbxoYghFjXEXe3iphZxqlV8KGKIVRF3tYu72sSqVvGhiClWNcRNbeJTHWKoVdwVsYhNDXFTq/hSj+KuiEXsiripVXyrJ3FTxCoORdzUFE/qQVwVsYlDDXFVUzyrm2hcFbGLUw1xVUO8qKtoXNQQu7ioIa5KvKpTNC5qiENc1RBXjR/ULjRONcQpbmqI36tNShxqiIu4qyH+oBbRONQQV/GhhviDmqKxqyFu4lNT4i9qSGNTQ9zFlyL+pohVDfEpnpT4k4pVDfElntQU/0MN8S0e1RB/VkM8iWc1xd/UEI/iRa3i94p4Ee9qFf9Wi3gVP6hd/KB28S5+Vqd4ULv4UfxTXcWq7uIf4lfqR/Fv8Rd1EX/yH4p07GIDXbCnAAAAAElFTkSuQmCC",_s=Object.freeze(Object.defineProperty({__proto__:null,default:Es},Symbol.toStringTag,{value:"Module"})),ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAET0lEQVRoBZXBiYGCQAAEsEz/Rc+t8isgl8R/1F78SzxU1+KJeKCpe/Fb/FSr2Kud+CV+qFWcqFXciju1iDs1iRtxoybxWw1pXIpLNYlnSiquxIWaxHM1RONMnKuXuNP4VC9xJs7UW1ypVRwUaXyLE/US5+pD7NUQ3+JLvcS5+hYH9RIf4ksNcaZOxYdKxVF8qJdYVCzqQnyoIQ7iQxGbEm91KT7VEHtxUEPs1BCUoE7ElxpiJ/aKOKiXKOKtjuJMDbGJnRriqBYxqYM4V6lYxaaIT7WISU1SxKUaYhGbSuNTvaViUpOUuFFDzGJVxJcaUmJSm7hVQ0xiUUN8qVm81F7cK2ISsxriW81iqKO4VUO8xayIEzUJ6kvcK+IlJkWcqUmoE3GriJeYFHGmJlFn4l4RQ7yVOFWzqDPxQ4kh3oo4U7OoU3GvCOKlxLkaUqFOxb0iiJcS52pIhToTvxQhhhIXahLqW/xWhBhKXKhJqFXqLR4oQlDEhZoEtUgN8UwJQYkLNYtFLeKhCkGJCzWJVc3iqRJBxZWaxKwO4okSoYgLNYlJfYoHKkKJKzWJtzoRP1WEEhdqFkOdip8qosSVmoW6Er+URIkrNYu6FD9VosSVmoS6Er9VosSVmoSapY7it0qUuFCzoM7EI5UocaFmQS1Ss3iopIgLNYuhZqm3eKykiAs1i5c6iH+oFHGhZrGoRfxHpYgLNYlFLeI/Soq4UJOY1So2tYhzJUVcqEm81U7qXJwoKXGlJjHUU/GlpMSVmoT6j/hQUuJKTVL/FEclJa7UJPVfcVBS4lK9pU7FQW3ioBIlrtRb1CQ1iRO1ib1KlLhUL6EO4kztxE4lSlyql6D24kztxKYkSlwr4q02caZ2YlMRSlwrsaq3lPhUe7GpCCUeqr04qr3YVIQSD9WXWNVObEqEEs/UmZjUTuxUCEr8VJfirTaxVyEo8UvdiaE2sVNCUMSJeouXuhNqE3slxFBiKGJWe1FHUZtQm9grIYYSQz0Vk5qFWsVeEWIognooFjWJWsVBCWIoYqidqKgvcVAx1Cr2iiBeiqCOYqiDOFeLOCgxxEsR1CI0JrUT52oVe0UM8VYE9ZLGXq2CxrdaxF4RL/FWxFAv0dirSVDEh1rFXom3mBQx1BCNoyLeaoiDWsVOEW8xK2Io0rhRQ+zVIvaKeItZDTEUcacmsahV7BQxiUURz9Qm1CQldoqYxaqIZ+pMVGyKWMSqhnimvqVpbIpYxaaGeKY+pYhNEavYKeKhOhGrGmITezXEM3WQEqsaYicOaoiHahMVqxpiL45qiIdqESUWNcRBfKghHqqdWNQQR/GphnioNjGrIT7ElyKNZ2oRsxriU5wp8VBNYlbEtzhVQzxSLzGpIU7EqSIeKmJSxKk4Vy/xSMVbDXEurtRLPNYUcSWu1SR+qllcihu1iBu1iBtxrzZxohZxL36qvXirD/FLPFJ34on4l9qJf/kDL2Gdat+6n0YAAAAASUVORK5CYII=",Ss=Object.freeze(Object.defineProperty({__proto__:null,default:ys},Symbol.toStringTag,{value:"Module"})),Us="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAABqCAAAAACeiPB1AAAEQklEQVRoBb3BWaKjSAIEMMX9Dx2TLPYDzFbz0VL8d+K/E/+d+Ef1J/5JvFbn4qV4o57Es3hUG6FEHcSjeFJfcaK+4lbcq4+4VIu4FTdqFV/1EVs1icaVuFSL2KqN2KohLsWVmsVBbcVWpXElztUsftVWbBVxIU7VJM7UTuwVcSZO1CzO1U7sVSp+xa+axJXai72SEgfxoyZxrXbiqCaxF0c1xK3aih+VEjtxUEM8qFVK/KqU2Iq9Ip7UKkWcKmIjdmqIB7UV52qIP7FRk3hQW3GpiK/YKOJJ7QQ1xEFT4iv+FPGkdqJWcdCU+IivIh7UjTioIVbxVcStuhcHRazio4gb9SyOSixiVcSpei2OipjFooY4U+/FUQ0xiUWJo8ZHvREnSkxiUeKgxEc9iAtFDDErcVA3Uh9xr4ghJiWO6lJqlYoHRRCTEkd1JWon7hRBDEUc1a1QH3GnBDGU+FFnQhFUqFncKEEMJX7VmagYKqhZ3ChBUMSJ2guNiqExqVncKSEocaa2QknFUDGpRdwoIShxqlYxqUkMJSa1iDsVQhFv1BCTikmt4k6JUOKNmsRQYlKruFMilHihJjGUmNRH3KqIEi/UJCYlhvqKWyVR4lnNYihiqK24VhIlHtUihhJDHcSlSpR4VIugCOpHXKlEiSf1ETUE9SvOlUSJB3UUapX6E+cqKeJeHYU6FecqKeJW/Yg6ChUXKiniRp2IWoSahIorJSXu1InULIb6iEslJW7UjRjqI66VlLhRk9SJGOojbpSUuFGrUDtBTVLEnUpKXKtVTOpPqFmKuFVJiWu1iFltpD7iSSUlrtUsFnUqHlVS4lpN4qu2UsQLlZS4VkNs1E68U4kSl0rs1J94qyRKvFQ7sagzsVESJd6ofxVfFVHiUX1EvRUfFVHiXi1iUq/FR0UocaNmQf2jWFWEEldqEtQ7MdQiFhVCiVP1/0rNYlEhlDhRT2KvjmJRIShxUC/EqfqKWQVBiY9KXQtqFZdqEosKgiIWdS0WtYp3ShAUsagL8VWreKcEQQ0xqxOxU6t4pQhiKGJSR/GjVvFKiSGGIma1FWdqFW8UMcSkiEn9iXO1ijeKGGJSxKxmca0W8UYRk5gV8VIt4o0Ss1gU8U4t4oUiZrEo4p1axLMiFrGoIV6pRTyqIRaxqiHeqEU8KmIVH0W8UYt4UsRHfBXxQi3iQRFf8aeIZzWLBzXEV/ypIR7VLO7VEH9io4Z4UrO4VUNsxFYN8aBmcaeG2IqdGuJezeJGDbETezXErZrFtRpiLw6aIm7ULC7VEAdx1BRxrWZxqYijOFPiWk3iQhG/4kxJ40oNcaGIE3GmhrhSQ5xpSpyKUzXEhRriTBHn4kINaZyoIX7VEBfiSs3iVxEHjSIuxbVaxV4RW7WKa3GnvmKjxFet4lY8qD+xKjGpP/EgntVeVGonnsVb9SfULN6Lf1STaPyr/wEZZ5J2PlnxwgAAAABJRU5ErkJggg==",qs=Object.freeze(Object.defineProperty({__proto__:null,default:Us},Symbol.toStringTag,{value:"Module"})),vs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABlCAAAAACAHCmeAAAEQUlEQVRoBa3BC5LqOAAEMPX9D93PSfgEsAOztVL8TZ3FH8SvaiV+Er+ob+Kr+KpO4qyG1C6uxRd1iIqJImqIK3GpNvFFU4dYigu1i1/UIRZiqYjGrxpKzMVCDWl8KGKqUcRMzBVpfKi7+NRQYiKmipiop5iqIT7ERA0xUycx1ZR4F59qiLk6ialKxZv4UNJYqU0UsdR4E+9KXKinWKhUvIg3NcSFuoulSsVZvCriUt3FWg1xEi9qiEv1IhaKeIqzIr6pNzFT0niIkyK+qiHqIWZqiLt4qiG+qImYqSFu4qmISzUXU5XGTTwUcaGWYq7SOMRdESv1KuokForYxU0RK/Um6iGWaohN3BSxUm+iDnGpiE0cilirV6ldfFPEELsirtSL+FURQ+xKXKsXafymCGJTxBd1korfFEFsirhUL1KxqZtYKUIMRVypQ1ALsVBCDEWs1S52tRRTJcRQYq02cVOb1ETMlBAUsVKbONQhmhLqLGYqBCVWiripuxjqU0yUCEosFHGop6ipmCgRlJgrcaiT1BA39RQTFaHEXIlDnaXEUz3Fp4pQMVdiV69S4qmG1CY+lYSKqSI2NREPtYka4lNJlJgqYihiaFCHeKhNUGKiEiVmagiKuKuT2NUmlJipRImZ2qXEU53FpnYpYqYSJWbqIW7qJmoTm3qIqRIlZuohDvUQlcamHmKuRImZOqRiU69Ssam7WChRYqrugnoRKo2h7mKhpIi5uouaiE3dxUpJEQt1E/UiRexqSImlkiJW6hB1liIORUqslRSxUocY6kUc6hAXSopYql3c1EMcipS4UFLEWu3iUE9B3cWVkiLWahebmkuJKyUqLtQuhlqLS5UocaE2QT1FncW1SpS4UJtQr4I6xBeVKHGhNlGvUg/xTSVKXKiJ1F38ohIlrtSH1C5+VBFKXKgPKeJ3FaHEhZqKP6gIJa7UTLyph3hTEYq4Un8XJyWCEtdK7OpH8VQhKPGT+ou4qxCU+KpOUj+IQwkxlLhS/03sSoihxEpNhPouNkWIoYhPtZD6SWxKEEMRr+r/EBRBbIrY1Y/iU51FgxJDbIrY1afUp5iru9gUMcSuiE1dCHUTa7WJTYlN7GqIoebiUDfxkyI2cShiU0SdxUMd4idF7OJQQ2zqTZzUIX5SxC5uitjVSbyqQ/yiiEPcFbGrm/hQh/hBETfxUMQ3dYjviriLhxriizrEVzXEXTzVENfqEF8V8RAnRVyrQ3xRQzzFWRGXipT4ooiTOKshrhQpca2Is3hRQ1yoXVyqIV7EmyIulFRcqSFexbsaYqmk4kIN8SY+1CYWSiqWahPv4lNtYq6ksVRDfIqZ2sRMDbFQm5iIqdrERA0xVZuYirmSEp8qjZkaYiFWmtrEmyI+1C5W4koN8arEu9rFWlyoQxonjXe1iwtxrW5irlGb+CK+qrM41Iv4Kn5Rl+IX8Sf1EH/0DyR8qGp+1pBYAAAAAElFTkSuQmCC",Rs=Object.freeze(Object.defineProperty({__proto__:null,default:vs},Symbol.toStringTag,{value:"Module"})),Vs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAFfklEQVRoBb3BUULbCgJFMZ39L/qOnRCIIWnp+xgpvzF/ll/KX82v5BfyF/NN7ua7/FX+aL7khXmWv8gfzIf80TR3+aO8Mw/5jfmQ9/LGfMhvzV3eykvzIf9gPuSNvDI3+Vdzl9fy09zlP5i7vJIf5ibPRn5lzSGv5Ls55WLu8gtzygv5Zk65mE/5hTnlh1zNKVfzJX83N/kuF3PKN/MkvzCnfJNnc8p38yy/MKdc5cmc8sNc5BfmlIt8mVN+WnPTHPIbc8qzfJpTXpon+ZU55Fk+DXljnuR35pQv+TCnvDF3DfmlOeRLPswh78xdQ35pTvmUuznlnblpyK/NKQ+5mVPemptG/sEc8pCbOeStuWvklTXywxzyIac55L35lJ/mU67mlLuc5pD35lN+mGe5mEPucphD/mA+5Zv5Ls/mkJsc5pD35lmezAt5MofchDnknfkhD/OheZYvQ27CkHfmhdzNG3ky5BRzyEvzWu7mnXwZcsoc8tK8kdE8yzzJpyGnzCE/zSvNIXOV03zKpznkkDnku3mlOcXcNS0f5ks+DTlkyDfzUnMK85Av8yWfhhwy5DByM80fhDnlar7kyxAachjChHknp7nLxXzKkyE05DB3zWvNIac5NHI1D3kyhIYwNzEvNYfczKEhQyOHeciTOUQjpzmEeSt3c5d5EvOQZ0M0cprXmlNDbuZJ86X5kIshGrmZFzJfcppfyMUc0sjN/NQ8y2F+I1dDGrmbv8hhfiUXc0iTD/NNcxHmSfNOLuaQJg9z1dA8xPxJ5kMu5pAmD3NqnmQeMn8S8yFXQ5p8mu9iXmuuYh5yNaTJl7kKc9dcNM9ymIdcDWnyZJ6FuWrNQ/OQwzzkakiTZ/Mlh7loWebUfMjNPORqSJNv5i6n+dCcYplTc2q5m4dcDWny3RxyM18acprvcpiHXA1p8ifzIYac5tAyGrEwD7ka0uQP5qE55GZOMaccFvOQqyFN3puHpslhmZvMKadpHnI1pJF3lrlrWk6L+aF5kqshjbyxrLlpcreYv8jVkEZeW8ynfFhM5qfmLhdzSCOvLIf5lA/LvJE55WqIRn6anOYhD8s0mpvmJqc55WKIRr6Z3MyXPCxzajIPWRjyzRCNXI2c5kkeltGcMocWFoZ8M0RGLoaYJy1PRsvcZTksDLmaQ2TkYl7JwzJac5OHhZFv5hANuZgX8mw0N5ncLYxczSE0h1zMT3k2mrtcDLmaQ2gOuZif8mkZzSnfDLkacsiQq/mm5dMymnxYPg25GnLIHPJkzTctn5aR08hp5DCHXMwhhzDyZM03LReTkS8j5tDybHITc8iToXnS8mkxTX6aQ8uXtZZTrJFnE0bm1PJpMS0fhtzMIcunNS2nHEaejbCsNVmuRsyXHOaQ5dNaPuQ08mXExGKyXM17Wb5My00Oc8iXkU+T5cti3svyMIfc5bBGXllMlvfWwtzF8jDykJshLywmy5PlwzJhzYc8mUM+5G7khcVkeWn5MJlTvqwhH3Iz5IXFZHm2nJZPa80py92ylofcrCE/LCbfTZZnoyFf1pCH3K2RHxaj5e/mlE9DnuTDmrw0h/zVMmS5WUO+5MMa8sIc8guj5dOQJ3lYQ14Y8ndrstzMTZ7k0xpytRjyC5PlZhm5yJc15IchvzAtd3PKRZ6sId8N+TdDy1WerZGrNflHc8o3uVhzyLMh/2IOLd/lam7ybORfDHkh36zR8p+tOeSF/DCHlv9mTZZX8tPc5D9YRstLeWFO+XdzaPJaXptT/ska8l5eW3OTX5rmJm/ljblr+YV5yB/krfmSP5uGlj/KH0zmLm/NTZa/yJ8tc5EP803+Kn8zr8R8iJFfyC/MH2Tkd/I7c9U0Dfm9/JP5kn+X/6v8X/0Phhh8i1Cy6vcAAAAASUVORK5CYII=",bs=Object.freeze(Object.defineProperty({__proto__:null,default:Vs},Symbol.toStringTag,{value:"Module"})),Fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABrCAAAAACz/eiUAAAFdklEQVRoBb3BCRabSgIEMNX9D13TzWKDwUuSeV+KH9R38Yv4qn4T38VndRIndRLfxCe1icYb9RSfxXu1iy9qF5/EO7WKH9Uq3ot7tYmf1SbeiVu1iD9Tq3gjbtQi/lyt4lZc1SL+Si3iTlzUIqghbpW4U4u4Ea9qCmoVN2qKOzXFVZzVFFNt4qpWcaOmuIizmmKqXVzVJq5qildxVItYVGoVV7WJq5riRRzUFE+1iYt6iIua4iwOaoiD2sRVPcRFTXESTzXEUe3iop7ioqY4ioca4qR2cVEHcVFTHMSupjipXVzUQVzVFE+xqSFe1C5e1VHcqCGeYlNDvKhdvKijuFVDPMSqhnhVuzirVWqIN2qIXSxqiFf1EGe1SA3xTg2xi0UN8ap2cVYHoTZxVkNsYqohLmoXJ3WQeooXNcQqhprionZxUJ/ESQ2xiqGGuKpNHNRncVLEKqghbtRBbOqLOKohFkENcaOm1CIW9VUc1RBTqCHuNIrUIqb6Lg5qiCnUEKsSD416iqnuBPUQTzXEFIpY1RSbRhE1xVQvYlcP8VRDDFFDbGoRi6am1CKGeoqTeoqHGmKIGmJXU0y1iloFTa3iRT3FUxFDFPFQi6CuQm3iVT3EQQ1BaoiHWkXdCEUaN+ohDmoIUsRTTWnqIhqKWNUQm3qIkyJIEU/1QRzUQyxqF2c1hBTxVB/ErobUlIqpdnFWQ0gRT/VW7GqKmlKC2sWLGkJKPNVFaopdTamjUJu4KEJKPNRFvKg7Ubu4KEJKPNRVHJSoG6lNXBUhJXa1Se3ioIbUWdRBXBUhJTb1EE1NcVCr1FEqtYkbRUiJVT2lqUU81VVKmtrFjSKkxKKOohZx1NQiakoRahO3ikjFqg5CLeKkVlGpVdQubhWRilUdhFrESVNTGtQQU63iVhGpWNVTqEWc1EOoKaZaxL0iUrGqp1CLOKmHqKu4V0QqVvUQ1CJOakjFULuoRbxRRCo2tYmhFnFSJ6EO4p0iUrGpTVCrOKkXUQ/xTg2Rik2tYqhVHJVU6k4a79QQKbGpKaZ6il2jNlFp6iHeKkJKbEoai3pIxapRUoIKagiN94qQErsSi9rEVLEpqUVMNUTjgyKkxI3axVBCQ0URu5rikyKkxI16iKFCo6RxVEN8VISUuKijUESjiJOKL4ogKi7qRjRKvKj4rAiixIumFqmnaDQV31U8FUGUeFGbaAxFNIr4QeOphiBKnDW1CBoU0dQQP2g81RCEEie1iqlBiaaG+K7EQw1BFHHU1CIWDSpqEd81jYcihijirBaxatBoaojvmsauhhiiKXFUUzwVoab4QdPYFDEFJU5qiBdNTfFVU7FpSkyhKbFr1BQvmpriBxWbpmlMQRGbRg1x0dQUv2gaU9M0FkFTcVBDvGpqih9UGotKYxE0JaaGCo2LphbxXaUxNEUsYihiaChxrzbxVmPRWNUQqxhqCA0lGncaRSjxSYWGksYmVvUQjVsNJYaa4qnEpogGlcYmVrVLxRsNRXxWQ0wVT7FoahfvNagh3qlVDBUHsWpKfNWYakjjoDHUIhU1xVPsiviqsagpHuokKNJ4iocivqt4qBtpTDXEQeyaEj+peGiaEmc1xUkclPhZEbcqFGkcxVERf6JWUVNqCJoiTuKkxP9FU2mcxVkR/66pNF7EUS3iXxVpvIqTRhH/pIY0LuJVScXfa0oaV/GiKan4S40St+Kihvg7tYh7cauG+CuVxr24U6v4I5Wa4o24V1P8rkQN8Va80RSp+ElFDfFBvNXUIr5qFKn4JD6oXXxUUzQ+i0/qRZzUUyq+ic/qjdSUGqLiB/FdpW6kFtE0fhG/KKFeBCV+Fr+rmBpUSvyZ+GM1ROPPxX8q/lP/A9zVYIqTjIeUAAAAAElFTkSuQmCC",ks=Object.freeze(Object.defineProperty({__proto__:null,default:Fs},Symbol.toStringTag,{value:"Module"})),Is="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAE+klEQVRoBb3BC3bqSgLAQGn/i9a0P4DbNoTkvjNV8o34TL4kP4mvyDfksziSp7iQH8kH8SK34kh+IO/FTj6KF/lI3okH+ULs5AN5I1YmX4qdvCW3YiO/Eit5R27ERn4tFvKGXMVK/iJWcksuYiV/Eyu5Iyexkj+LldyQWazkX8RCrmQSC/lObOQkFnIhR7GQl0DeiBeZxELO5CAWchAgt+JIJrGQE3mJhRzFQm7EkcxiITN5iUFmsZCrmMgsFjKRh1jIWSzkInbGICexkCN5iEEuYiNncSRnsZAD2cVCzuJBTmIiZ7GQF9nEIFfxJLOYyEUM8iKbGOQqnmQWE7mKQZ5kFYPciBeZxZFcxSBPsgqQG3EgsziSGzHIgyxikBtxILM4kjsxyE6GGORGHMksDuRWDLITiEFuxERmcSS3YpCNQAxyFTOZxYG8EYOshBjkRsxkFgfyRgyyEmKQO3EkJ3Eg7wTISgiQGxlHchIH8k4MspAY5CqJlTHIWRzIOzHIQmKQi4yNMchFHMhbMchgDHIVO2OQqziQt2KQwRjkInbGIDfiQHbJWYAMBshVHMmdOBAIkJBZDAIGyFnsjEFuxYkEEjKJQcBALuLA5E7MJGMjkwABAzmLidyKiUnsZBKDYCAnMZF7Ge/IJAbBQM7iQN7IeE8OYhAMZJKxMgZ5Iz6SowDBkEnM5E5CfCJHAYIhkziSi0AW8ZEcBAiGHMXOGOQkkFV8JgcBgiEvMZOjANnET+QgQDDkKWbyFMhD/EyOYhBDHuJENjHILr4hkwAxeYgTWcVGhrgyMAYhVjKJQQzZxZkM8RNjJ5tkFoMYsosLIe4ZDxKDZMidGMSQTcaFgRAI8WDM5LMYxJBNxh3ZBDLEDfksBjFkk7ES4kUekiR2Eg/yWQxiyC4GyYTYyFFm7CQe5LMYxJBdgEkyxEomITEYEg/yWQxiyC7ATBaxkpMMhIRYCMlnAYIhuwB5iI3cS4iFkHwWIBiyi0F2sZF7CbEQks8CBAN5SJ5iI/cSYiEknwUIBnIjdnIvIRbyswDBQG7ETu4lxEJ+FCBgIDdiJ2/FSkI+ChAwkBuxk7diJYQMIbcCBAzkRuzkndjIT2IQkECuYifvxEaOkosYBCSQq9jJVSAQOzlIzmIQEEIuYidnIZt4EAiQITkJkEEI5Cx2Mgl5iCuBZBaDDEIgZ7GTh0AO4o5AMgmQhWQgJ7GTTTKJe3IjkIVkIBexkqv4QM4yk4UMgUwSYiFPyRA/EJKjQFYyBDLJjIXsMiYGMgsEkqNMVgIxyFFmLOQlHkw+SA4CZCUQCznIWMkkBpPvxSAbWQTIJFZyFCCz2MitQJ5kESBHsZGjkKckOcmQozDZySJAZrEweQrZJV8J5EU2YXIQBpK8ZPIbgRzIKgPkJSFkkvxSgDzJJpOzkH+RAfIiDyFnyb8JkBfZZYBMkn8QYHIgDxkmT0nI3wUmR/IUYPIUIH8UEshEjgL5b8RCZnKQgfwXAgyZySyQfxdgciYnAfKPMkwuZBaDyT/IQO7ISQYmf5aEyQ05ywD5qwxM7shFLEz+IAlMbsmNGOT3MlZyT27FYMgvJAQm78itMFbypYRYyFvyRjzIF2IlyQfyXjzIZ4GxkI/kg8BYmLwTGCv5gXyWxEoyeQrjxZAfyU/iwbglBPIF+Vl8IIR8Sb4TM1mF/Ib8QsaL/J78X8n/1f8Am9IOixOlrIUAAAAASUVORK5CYII=",Ms=Object.freeze(Object.defineProperty({__proto__:null,default:Is},Symbol.toStringTag,{value:"Module"})),Ns="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsCAAAAACu+NgsAAAF5klEQVRoBb3BSWLjRgAEMNT/H13p5k6JsuU5BIhv1M/iS/Gr+kZ8I35RpzQ29S5+FT+pUzypq/hFfFaH+Ent4mfxSe3iV7VJ4wfxQW3iS7WJj+JRbeI3tQi1iU/iSa3iV7ULtYoP4l2t4nd1CmqRxpN4U4sYivhBnWKqRTyJVzXFohbxSZ1iUYt4EC9qik2t4lldxKoW8SbuaopdreJZHdLY1CJexVVNcVGreFSHNHa1iBdxUVNc1S4e1EWcaoq7uKghbuoQ72pILeKqhriJUw1xUxfxrtLUFHc1xFXsaoqruol3jaYWcVNDXMWuhriqu3hSqUXc1RAXsakpTvUqHjW1iBc1xCk2RZzqTTyq1BRvijjFqoY41Jt4VqkpStzUELtY1BCHpq7is0aR2sSphtjFVFPs6iZ+UilSQ5oShxpiE1MNsatFahE/qtQUtYtNDbGJqYhDXcQvKvUmNjXEKoYiTo1axaqGeFKvUsSmhljEUMShoabYlBTxpp7FpoZYBEWcmloFRUxFvGrUk9gUsQg1xKmpIShiqkVMRRpDox7FpoaYQhEXNYUSQ72JChpqF3WIXRFT1BAXdYihHqREQ+1SF7ErYooibuobKaE+iEMRQxRxU6TeRUWlCHUT1C52NcSQGuKiqSEq6iIVi3oQQ+3iUMQQJa6aGkLFVKcY6kFMtYtTEaSIq6aGmIrUIiWm2qQOMdUuTkWQIq6aGmJRU4pULOpBTLWLUw0hRVw1NcShUYtY1IOYahenGkJKvKghDo2aYlW7qE1MtYuLIqTEi5LGpkJNsapd1Cam2sVFEVLipilpLCooUrGqTahNTLWLixoiJW5qkSIWtYlFbUJtYqpdXNQQKXFVm9jUKabahNrEVLu4qCFS4qqGlKB2qSk2NYXaxFS7uKghUuKqppjqVaxqEWoTU+3iooZIiat6kRpCxa6moDYx1S6uikjFTb0LJU6VEtQmptrFVRGpuKkptUot4tSoKdQuptrETRGpuKlDmlrFRaOmUIcYahM3RaTiphapXbxo1BRqkRJDbeKmiFRc1So1BbWKTaOmUItUGtQmbopIxVWdgopNiU1FhdpFo3ZxU0QqrmoVFHFRQUPFog5Rp7gpIhVXdYpNDUGFRokGjTqEWsVNEam4qik2dRUVjRINGnVI7eKmiJS4qEUs6l0aRUwNJfUibopIiYt6E+qURg0xNGqRuoi7IlLioq5iqqs0aoihUavUJhU3NURKnOoUi0pNqRgaRUyNIirqEDc1REpc1CINNQQ1pAgalcbUKKJC7eKmhkiJi7qIRa3SGBqVxtQookJN0bgrQkpc1CJOTS1i1RSxKaEx1BCNuyKkiFMt4tCoKTZNEVOjhKahpjTuipAiTrWIVQU1pLEpYtEoodFQQuOmhpAa4lCr1BBTDWnsKo1Fo8SuROOuCFJDHJoiLmqKxq5pLColFg0VjZsagtQQh6aIQ61C401Ncag07moIoobYNUpQd9F4U1OsmiJeFDFEDXFRh6hdNN7UIlZFvKghhlDEoVHEi8aDWqWxqHhVQwyhhtg1Kt4U8ap28UkNMQVF7BoVRZwqHtQuPqkhpqCIXVNDfKV28UENsQhqiF1N8ZXaxQc1xCKGGmJTU3yldvGshljFUENsaorv1Cae1RCrmGqITRFfqk08qiE2MdUUqyK+VJt4UlNsYlFDbCq+Vqt4UkPsYlVD/INaxYOaYhermuIf1CIe1BCH2NQUf1dTvKspTrGrKf6spnhXU5ziUFP8WQ3xpqa4iFNN8Vc1xKua4ipOtYg/qiFe1BQ3cVGL+Jsa4q6muIurmuJvirirKV7ETU3xJ0Vc1SJexV1N8SclLmoRb+JVDfGtRomLWsS7eFNTfKdR4lSLeBAPaoivNEocaopH8aSG+E6JXS3iWTyqKb5QxKoW8Uk8q0X8qoipVvFRfFCH+EkJdYjP4qM6xWeVOsRP4id1ikd1FT+LX9SraKh38Zv4TX0pfhdfaOoX8ZX4Sv0gvhZ/UK/S+Iv4X8X/6j/OzIuL68bXyAAAAABJRU5ErkJggg==",Cs=Object.freeze(Object.defineProperty({__proto__:null,default:Ns},Symbol.toStringTag,{value:"Module"})),Ks="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABsCAAAAABBOrMSAAAFg0lEQVRoBb3BSYKkRgAEMMX/Hx1OloKEWnsOluIX9UX8KL6r79L4RXxWV7GpF+Kr+KhO8UrN4ov4oA7xQZ3io3irHuKr2qXxQbxTu/hN7eK9eK028Qe1i3fipdrE39Qm3ogXahN/V5t4KZ7VKv5NreKVuKtV/KY2cahVvBA3tYrf1CEOtYoncVOLODVeq6s41Cru4qIWMSnxQt3FqRZxF7NaxKyIu3ohJjXETUxqEbNaxKrEql6IiyKu4lSLuKhVLIqgblLEVQ1xEYdaxEXtYqhF6iY1xE0NMYtDDXFVuxjqENRF3NUQk3ioIW7qIYZ6CGoWz4qYxK6GuKlDDLWLoVYp4pUa4hSbWsRNHWKoXQx1ipdqiENsaoibOsVQu6BO8UYRh1jVEDc1iaF2oSbxRg3xEIsa4q4mMdQm1EW8UUPsYlFD3NQshtqk7uKNInYx1BB3NYlFvRXvlNjFUEPc1CQW9V68U8QmqCHuapMSq3ov3qkhVkERd7VJEat6JTXEW0WsgiJuahKb2qROKdJ4q4ZYhCJuapMSD7VJ3cUHRSxCETd1iofapA6pIT6pIYYo4qYm8VCb1FV8VEMMUcRVbVLiVJuoWXxRxBBFXNQmRRxqF6vaxRc1BKkhLuoUp9rEqibxSQ1Birio1EOcahNDXcUnRZAiLpoaUmJWm6B2qU18UAQpYtaoXcxqE/VCvFdDSBGTmsSsNqlX4r0aQkpM6hQXtUu9Eh8UISVONYmL2kRdpVLxXg0hJQ41i4vaRM1SpOKDIqTEoWZxUZuoSYo0PipCShxqFhe1ibqJb4qQEoe6CCo2tYk6pMR3NURKHOoiqFjVLtRFfFVDpMSpZqHEqnZBbVLxixoiJU51ERWb2sSqFmkap8ZrNURKnOoiKja1iaEOsapJ3NUQKTGpWSp2tYmh3osSVzVESkxqiHqIXW2ChvokrmqIlJiUoB7ioVYpUl/ERQ2REs9qF4d6LdSzmNUQKfGsdnEoQh1SH8SkCCnxrHZxqCHqJk1jV6c4FSElntUuDkXqSczqEKcipMST2sWkpFKzuKpTHIqQEk9qF5MijZrEVZ3iUIQUcVe7mNUQahKzhtrFoQgp4q52MStiVZM4NNQuHoogRdzVLi4qNk3NYtNQu3goghRxV5t4ry5i1ahdHIogRdzVJl6rqJugUbs41BCkhripTbxSQt2FRu3iUEOQGuKmdvFCiVqkJtEoKeJUxBBFXNVD7GoXKorUVTRqFacaYoga4qImQVOTKKlZlKBWcSpiETXERZ1SpE6hHmKoIUXUKk41xCIUcVGnoJ6kFrEqUkSt4lRDLEINMatZapW6i4ciGrWKQw2xCoqYNPUsqE1qEVcNtYhTDbEKipg0tUodYlGnaFw0ilScaohVUEOcapd6iF1tQombWsSphtjEUEMcaheVGuJQq1BDHBpqiEkNsYlFEYfahaaGmJQYahEPjSIVhxpiF4sa4lCbUKt4oYZ4aCipONQQD7GoRTzUJihpvFRDUEMoUvFQi3iIVQ3xUJtYVLzRlHioIRUPNcQhNrWITVOL+KJWsapNPNQiDrGpRWxqFV/VJtQiJXa1iFPsahGrpob4rq6iYleLOMVDLWLVVBo/qLvY1SImcahFrGqIX9RV7GoRszjVEJuKHzVNPcSuFnERp1rFX1XULja1iKuY1Cr+qlG7WNUibmJWq/ireohVLeIuLmoRf1abWNQqnsRVLeKvahOLWsSzuKsh/qqGWNQqXogntYg/KrGoVbwSL9QQ/6YW8Vq8UkP8g1rFG/FSLeKPahVvxWu1it/VLt6LN+oQ39VDfBJv1Sk+qkN8FJ/UKV6qSXwTn9VVDA31LL6Kb+pH8YP4QVOfxY/iJ/VB/C7+oG6i8Sfx/4r/13856SmLbWlT4gAAAABJRU5ErkJggg==",Ts=Object.freeze(Object.defineProperty({__proto__:null,default:Ks},Symbol.toStringTag,{value:"Module"})),xs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABqCAAAAAB4oTsxAAAEb0lEQVRoBb3BC5KDVgIEMPX9D937wGCD+XmS1Erxi3oSP4lH9Zt4FvdqJ3ZqJ57EndqIc/UR9+JareJBreJOXKlV/KAWcSPO1SJ+Vi9xKU7VS/xJzeJKnKiXOFUvcVSzOBdHNYkrtYqDeokzcVCzuFarOKhZnIhvNYk79RHfahZH8aUmcas24qAmcRB7NYlbtRVHNYlvsVWzuFV7caKG+BIbNYlb9S1O1CT2YqOGuFUHcaqG2ImPGuJOnYkzNYmteKshbtRBijhVk9iIVU3iUh2EpnGhJvERixriSp2IBzXERyxqiHN1Kp7UEG/xUkOcqi+hhjQe1BCrmNUQp2onSmoST2qIVcyKOFVboUQRP6ghFjGpIU7VVlQ0flVDLGKoSZyqL/EnNcRLDEVcqK34syJeghriQr3FlxriXg0xC2qIC/UWO7WKOzXEJCjiSn3ERm3EtRpiEhRxpTbirXbiUg0xCUVcqq1Y1Je4VEMMUUNcq42Y1FFcqiGGqCFu1Eeoc3GpiCGKuFe/iCs1BKkh7tUv4koNQWqIe/WLuFQEKeJB/SIuFUGKuFc/iUs1hBRxrw6ivsS1GkKKuFd7oQ7iRhFS4kFtpc7EnSKkxIP6CEWonbhThJS4V6uYNA21E7dqiJS4V4vQ0BhqJ27VEClxqxah4qV24l4NkRK36iVKvNROPKghUuJOLaLES71FxYMaIiXu1CI0ZvUWKp7UEClxpxbRmNVHaDyqIVLiTi2iMamPUPGohkiJO/URQ30EjWc1RCpu1UdQqZf4WQ2Rilv1FtRHKo1f1BCpuFVvUVtR0nhWQ6TEnXpLPYpTRUiJW7WRehYHRUiJW/VPxE4RUuJa/VOxVYSUOKp/L95qCCmxqiH1H4lVEaSIWf2XUmJRBCliUrNQp6KuhfoSiyJIEZP6z8VLDUEUMdSP4q0uhIpFDUEUMdSD2Ksb0VjUEEMUMdSlOFFbsVNiVUMMUUMMdRTXGr8pYhKKGGov/hs1xCTUENRHzIr4l4qYhRpiUkN8FHGqPuJOEbNQkzhRxEcRL7UTV4p4CWqIo6bErBaxqL04V8RLDEUc1CyGeom9WqVxpoZ4iaGG+FIHcVCrNI5qiEUMNYmtSr2kZnGm3uKohljErIi92otT9RHfaohVzGqIj6Z24qi+xJcijVW81BBvTW3FUR3EXg3xFi9NEataBBVn6lvs1BAfsaghVvUSRVyovdiqITZiVUMsmpqkxLXaiY2axEasahKrGlJp3Kit+CjS2Iq3GmLRKClxqz7ioyaxEx81iVmjpMS9eou3msRebNQkJk3N4kkt4q1msRdbNYlJvcSTSk1iVZP4Fjs1iUlN4lnNYlWTOIi9msVQxA9qEquaxFF8qVn8RRGrIo0T8a1m8Q/VLM7EQc3in6iXOBVnahJ/VYs4F6dqiL+pl7gUp2oVP6pVXIoL9RaP6i1uxKVaxb16i1txoz7iXG3Eg7hX31IX4lE8qB/FD+JZPYrfxE/qUvxB/EFtpdH4k/i/iv+r/wEEcJN6pgU6cwAAAABJRU5ErkJggg==",Qs=Object.freeze(Object.defineProperty({__proto__:null,default:xs},Symbol.toStringTag,{value:"Module"})),Js="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABsCAAAAABBOrMSAAAFa0lEQVRoBb3BR4IjRwADMPD/j6arc5Q0ezEQf1I/xN/Eb/UHafxB/FB3Mamn+Cm+qpN4UyfxQ3xTu/iidvFVfFS7+KlW8U18Uqv4o1rFR/GuVvEPahGfxKtaxD+qRbyLNzWLr2qIm1rEm3iqRXxVq7ioRbyIh5rFd7WLq5rEi7irWfxSu7iqWTzETU3ipPGmdnFTs7iLqxrirMSb2sVdTeImzmoWZ0W8qF081RBXcVaTOKsh3tQmnmoSF3FSk7ioSbyoQzzUJM7iUJO4qlk81Vnc1SRO4lBDXNUinuoqbmoSh9jVEFe1ibu6i5sa4hCbGuKmdnFWL+KmJrGLVQ1xU4c41Lu4qUlsYlGTuKlDLOohahJPRWxiVpO4qZOY1V1qES9qiFXMaoibOolFfRCvahKLmNUQN3USi3oTH9UQi5jUEDdNHWJVZ6khvqghZjEp4q5O4lAX8V0NMYuhhripVUqc1EX8UMQsqCFuapUiDnUVtYkXNcQkqCFuapESh1qEehN3NcQk1BB3NUuJXc1iUg8pcVfEJNQQN3WITU1iVu/iroYYQg1xVYdY1SQm9UXcFDFEDXHVqFWsaohJ7VIPcVPEEDXEVVNDilgVMdQh9SJuiiCKuGrUKlZFDPUQQ+3ipgiiiIs6xKKGGOomVrWLqyKIEle1i0URQz3Eog5xVUNIERd1iEUR1EOs6hBXNYQUcdbUJlZFqFWoTcxqFzc1hBRxUouU2NQuFnWIoXZxV0OkiEOdxKY2sajUJqhD3NUQKWJXJ7GpXUwa6hBqFw81RIrY1UnsapEGFeok1CaeaoiUONRZbJqapFGpQyoNtYmnGiIldnUWk8bQ1Cx1kYqhNvGihkiJQ10EjUl9FEOt4lURKXGoi1AxqY9iqFW8KiIlDnURKmY1C0pqE5NaxLsiUuKkzqJiVbMY6hBDLeKDIlLipM6iYlWzmNQmqE18UERKnNQQNUuJVc1iUS/ikyJS4qyEmqViV5OY1SbUKj4pIiWeahO7mkRFvYlPaoiUeKpN7GqShnoRn9UQKfFUqzjUImqX2sRnNURKPNUqDjWL2qRW8VUNkRJPtYqzukoNafxShBTxUKs4adRd/EURUsRDLeKsoc7S+JMipIiHWsRFU4uoIY1d7eKqhpAiHmoRV7VLkTqLTcVJDSE1xF0t4oNKzeKDxq6GkBrirmbx1CihhrioVdBY1RCkhripRdw0FbP6LjQWNQSpIW5qEZ/UT1ExK2KIGuKqFrErsai/icasiCEUcVWLmFWs6iw1iaGhpM5iqCGGUMRVreKirlKpQyxqE0MNMYQa4qJ2sahdTGoRJ0UMtYihiEmoIS7qENQuhhI1xEOJSRHUEJOghjipReomaBqNIt7VIoYaYhJDESeNGlJnocSmxG81xCyGGuJQi2ioIYaKkxI/NSUWMdQQh1qExq5x0Wj8UkMsYlJD7GoRVFDirvFbEZuYFbGrRXzU0Gj8UEOsYlZDbJqaxEeNisZ3NYlVLGqIVVOT+KrR+KomsYlFTWLRqCG+qWh8U5PYxaqGWDRqiG8qGt/UEIdY1SQWjSK+qfiuSOMQm5rErKHiq0rji5rESexqErOm4rtK44sa4iwONYlZEV9VGh/VJC7ipCYxa/xQaXxSs7iIs5rE31QaH9QsruKsZvEnJT6oIR7iqob4g6bEu5rEQ9zUEL81JV7VJJ7irob4gxIvahYv4qFm8UMRTzWLN/GihvihaTzUIl7Fm5rEv6tFvIt3NYl/U4v4JN7VLP6uNvFRfFKb+K128UV8VCfxTe3iq/imDvGmTtL4IX6ou5jUU/wUv9SrUIdU/EH8Qf0UfxN/U5/F38U/qJto/JP4f8X/6z8dVxuL55I6qgAAAABJRU5ErkJggg==",As=Object.freeze(Object.defineProperty({__proto__:null,default:Js},Symbol.toStringTag,{value:"Module"})),Ws=Object.assign({"/assets/chess_templates/black_bishop.png":ms,"/assets/chess_templates/black_cannon.png":ps,"/assets/chess_templates/black_guard.png":ws,"/assets/chess_templates/black_king.png":_s,"/assets/chess_templates/black_knight.png":Ss,"/assets/chess_templates/black_pawn.png":qs,"/assets/chess_templates/black_rook.png":Rs,"/assets/chess_templates/red_bishop.png":bs,"/assets/chess_templates/red_cannon.png":ks,"/assets/chess_templates/red_guard.png":Ms,"/assets/chess_templates/red_king.png":Cs,"/assets/chess_templates/red_knight.png":Ts,"/assets/chess_templates/red_pawn.png":Qs,"/assets/chess_templates/red_rook.png":As});async function js(){var e;const i={};for(const[o,t]of Object.entries(Ws)){const n=(e=o.split("/").pop())==null?void 0:e.split(".")[0];if(n){const s=new Image;s.src=t.default,await new Promise(h=>{s.onload=h});const l=cv.imread(s),r=new cv.Mat;cv.cvtColor(l,r,cv.COLOR_RGBA2GRAY),i[n]=r,l.delete()}}return i}function Ys(i,e,o){let t=-1,n="none";const s=[i.cols,i.rows],l=new cv.Mat;i.channels()===4?cv.cvtColor(i,l,cv.COLOR_RGBA2GRAY):i.channels()===3?cv.cvtColor(i,l,cv.COLOR_RGB2GRAY):i.copyTo(l);const r=Object.entries(e).filter(([c,f])=>o==="red"?c.startsWith("red_"):o==="black"?c.startsWith("black_"):!0);for(const[c,f]of r){const u=new cv.Mat;cv.resize(f,u,new cv.Size(s[0],s[1]));const g=new cv.Mat;cv.matchTemplate(l,u,g,cv.TM_CCOEFF_NORMED);const d=cv.minMaxLoc(g);if(d.maxVal>t){t=d.maxVal;const p={king:"k",guard:"a",bishop:"b",knight:"n",rook:"r",cannon:"c",pawn:"p"},_=c.split("_")[1];n=p[_]||"none"}u.delete(),g.delete()}return l.delete(),t>.3?n:"none"}function Ls({onImageUpload:i}){const e=Pe(null);return N("section",{className:"upload-section",children:[N("h2",{children:"上传图片"}),N("input",{ref:e,type:"file",onChange:n=>{var l;const s=(l=n.target.files)==null?void 0:l[0];if(s){const r=new FileReader;r.onload=h=>{var f;const c=new Image;c.onload=()=>i(c),c.src=(f=h.target)==null?void 0:f.result},r.readAsDataURL(s)}},accept:"image/*",style:{display:"none"}}),N("button",{onClick:()=>{var n;(n=e.current)==null||n.click()},children:"选择图片"})]})}const Gs=360;function Os({overlayImageSrc:i,chessboardRect:e={x:0,y:0,width:0,height:0},originalImageSize:o={width:0,height:0}}){const n=Math.max(0,e.x-15),s=Math.max(0,e.y-15),l=Math.min(o.width-n,e.width+2*15),r=Math.min(o.height-s,e.height+2*15),h=Math.min(1,Gs/Math.max(l,r)),c=o.width/l,f=l*h,u=r*h,g=f*c,d=(f-g)/2;return N("section",{className:"board-result-section",children:[N("h2",{children:"分析结果"}),N("div",{className:"image-container",style:{width:`${f}px`,paddingBottom:`${u}px`},children:N("img",{src:i,alt:"分析结果",className:"overlay-image",style:{left:`${d}px`,width:`${g}px`,height:`${o.height*h}px`,marginTop:`${-s*h}px`}})})]})}function Bs({fenCode:i,onCopy:e}){return N("div",{className:"fen-section",children:[N("h2",{children:"FEN代码"}),N("div",{className:"fen-container",children:[N("input",{type:"text",value:i,readOnly:!0}),N("button",{onClick:e,children:"复制"})]})]})}function ho(i,e){const[o,t]=i.trim().split(/\s+/),n=o.split("/");if(n.length!==10)throw new Error("无效的 FEN:行数不正确");const s=[];for(const E of n){const R=[];for(const k of E)if(k>="1"&&k<="9"){const b=parseInt(k,10);for(let F=0;F{let R="",k=0;for(const b of E)b?(k>0&&(R+=k.toString(),k=0),R+=b):k+=1;return k>0&&(R+=k.toString()),R}).join("/")} ${q} - - 0 1`}function Te(i,e){const o={K:"帅",A:"仕",B:"相",N:"马",R:"车",C:"炮",P:"兵",k:"将",a:"士",b:"象",n:"马",r:"车",c:"炮",p:"卒"},t="abcdefghi",n=["零","一","二","三","四","五","六","七","八","九"],[s]=i.trim().split(/\s+/),l=s.split("/"),r=[];for(const w of l){const U=[];for(const E of w)if(E>="1"&&E<="9"){const R=parseInt(E,10);for(let k=0;k="A"&&g<="Z",p=o[g],_=d?n[9-h]:` ${h+1} `;let q="",a="";return h===f?(q=d?c>u?"进":"退":cu?"进":"退":c{const i=window.innerWidth*.8,e=8*C+C,o=window.devicePixelRatio;return Math.min(1,i/e)*o};function zs({fen:i,bestMove:e,onFenUpdate:o}){const[t,n]=Z([]),s=Pe(null),[l,r]=Z(xe()),[h,c]=Z(!1),[f,u]=Z(null);rt(()=>{const a=new FontFace("LiSu",`url(${Ds})`);a.load().then(()=>(document.fonts.add(a),document.fonts.ready)).then(()=>{c(!0)}).catch(w=>console.error("Failed to load font:",w))},[]),rt(()=>{const a=g(i);n(a)},[i]),Fo(()=>{let a=window.innerWidth;function w(){const U=window.innerWidth;(U!==a||a===void 0)&&(s.current&&r(xe()),a=U)}return w(),window.addEventListener("resize",w),()=>window.removeEventListener("resize",w)},[]),rt(()=>{if(!s.current||!h)return;const a=s.current,w=a.getContext("2d");w&&(w.clearRect(0,0,a.width,a.height),d(w,l),t.forEach((U,E)=>{U.forEach((R,k)=>{if(R){const b=(f&&f[0]===E&&f[1]===k)??!1;p(w,R,[E,k],l,b)}})}),e&&_(w,e))},[t,e,l,h,f]),rt(()=>{const a=s.current;if(!a)return;function w(U){const E=s.current;if(!E)return;const R=E.getBoundingClientRect(),k=E.width/R.width,b=E.height/R.height,F=(U.clientX-R.left)*k,V=(U.clientY-R.top)*b,m=C/2*l,S=Math.round((F-m)/(C*l)),v=Math.round((V-m)/(C*l));if(console.log(`Clicked intersection: col: ${S}, row: ${v}`),S>=0&&S<=8&&v>=0&&v<=9)if(f){const[y,M]=f,K=`${String.fromCharCode(97+M)}${9-y}`,A=`${String.fromCharCode(97+S)}${9-v}`,W=`${K}${A}`,T=ho(i,W);o(T),u(null)}else u([v,S])}return a.addEventListener("click",w),()=>{a.removeEventListener("click",w)}},[s,l,f,i,o]);function g(a){const w=a.split(" ")[0].split("/"),U=[];for(let E of w){const R=[];for(let k of E)if(isNaN(parseInt(k))){const b=k===k.toUpperCase()?"red":"black",F=k.toLowerCase();R.push({color:b,type:F})}else{const b=parseInt(k);for(let F=0;FR/2)&&(a.beginPath(),a.moveTo(V+v+y,m-y),a.lineTo(V+v+y,m-v-y),a.lineTo(V+y,m-v-y),a.stroke(),a.beginPath(),a.moveTo(V+v+y,m+y),a.lineTo(V+v+y,m+v+y),a.lineTo(V+y,m+v+y),a.stroke())}b(1*C+E,2*C+E),b(7*C+E,2*C+E),b(1*C+E,7*C+E),b(7*C+E,7*C+E);for(let V=0;V<5;V++){const m=V===0||V===4;b(2*V*C+E,3*C+E,m),b(2*V*C+E,6*C+E,m)}a.font="11px Arial",a.textAlign="center",a.textBaseline="middle",a.fillStyle="rgba(0, 0, 0, 0.4)";const F=["一","二","三","四","五","六","七","八","九"];for(let V=0;V<9;V++)a.fillText(F[V],(8-V)*C+E,k-E/2);for(let V=0;V<9;V++)a.fillText((9-V).toString(),(8-V)*C+E,E/2)}function p(a,w,U,E,R){const k=C/2,[b,F]=U,V=F*C+k,m=b*C+k,S=C*.4;a.beginPath(),a.arc(V+2,m+2,S,0,Math.PI*2),a.fillStyle="rgba(0, 0, 0, 0.3)",a.fill(),a.beginPath(),a.arc(V,m,S,0,Math.PI*2),a.fillStyle=w.color==="red"?"#ffcccc":"#e0e0e0",a.fill(),a.strokeStyle=w.color==="red"?"#c00000":"#000000",a.lineWidth=2,a.stroke(),a.fillStyle=w.color==="red"?"#c00000":"#000000",a.font='22px "LiSu", sans-serif';const v=w.type.toUpperCase(),y=w.color==="red"?q[v]:q[v.toLowerCase()];if(a.save(),a.setTransform(E,0,0,1.3*E,V*E,m*E),a.textAlign="center",a.textBaseline="bottom",a.fillText(y,S*.05,S*.9),a.restore(),R){const M=C*.9,K=M*.25;a.strokeStyle="rgba(0, 220, 75, 0.9)",a.lineWidth=2,a.beginPath(),a.moveTo(V-M/2,m-M/2+K),a.lineTo(V-M/2,m-M/2),a.lineTo(V-M/2+K,m-M/2),a.stroke(),a.beginPath(),a.moveTo(V+M/2-K,m-M/2),a.lineTo(V+M/2,m-M/2),a.lineTo(V+M/2,m-M/2+K),a.stroke(),a.beginPath(),a.moveTo(V-M/2,m+M/2-K),a.lineTo(V-M/2,m+M/2),a.lineTo(V-M/2+K,m+M/2),a.stroke(),a.beginPath(),a.moveTo(V+M/2-K,m+M/2),a.lineTo(V+M/2,m+M/2),a.lineTo(V+M/2,m+M/2-K),a.stroke()}}function _(a,w){const U=C/2,[E,R]=w.match(/.{2}/g)||[];if(!E||!R)return;const k=E.charCodeAt(0)-97,b=9-parseInt(E[1]),F=R.charCodeAt(0)-97,V=9-parseInt(R[1]),m=k*C+U,S=b*C+U,v=F*C+U,y=V*C+U,M=15,K=Math.atan2(y-S,v-m),A=v-M*Math.cos(K)*.86,W=y-M*Math.sin(K)*.86;a.beginPath(),a.moveTo(m,S),a.lineTo(A,W),a.strokeStyle="rgba(0, 0, 255, 0.6)",a.lineWidth=3,a.stroke(),a.beginPath(),a.moveTo(v,y),a.lineTo(v-M*Math.cos(K-Math.PI/6),y-M*Math.sin(K-Math.PI/6)),a.lineTo(v-M*Math.cos(K+Math.PI/6),y-M*Math.sin(K+Math.PI/6)),a.closePath(),a.fillStyle="rgba(0, 0, 255, 0.6)",a.fill()}const q={k:"将",a:"士",b:"象",n:"馬",r:"車",c:"砲",p:"卒",K:"帥",A:"仕",B:"相",N:"傌",R:"俥",C:"炮",P:"兵"};return N("div",{style:{width:"100%",display:"flex",justifyContent:"center"},children:N("canvas",{ref:s,className:"chessboard",style:{maxWidth:"80vw",height:"auto"}})})}function Ps({bestMove:i,isCalculating:e,error:o,onNextMove:t,onPreviousMove:n,moveHistory:s,fenCode:l,fenHistory:r,onFenUpdate:h}){const c=s.length%2===0?"红方":"黑方",f=s.length+1,u=s.map((p,_)=>{const q=r[_],a=Te(q,p);return N("span",{className:"move-item",children:a},_)}),g=i==="red_wins"||i==="black_wins",d=i==="red_wins"?"红方胜":i==="black_wins"?"黑方胜":"";return N("div",{className:"solution-section",children:[N("h2",{children:"解法展示"}),N("div",{className:"chessboard-display",children:N(zs,{fen:l,bestMove:g?"":i,onFenUpdate:h})}),N("div",{className:"solution-controls",children:[N("button",{onClick:n,disabled:s.length===0,children:"上一步"}),N("button",{onClick:t,disabled:e||!i||g,children:"下一步"})]}),N("div",{className:"solution-debug",children:[e&&N("p",{children:"正在计算最佳走法..."}),o&&N("p",{style:{color:"red"},children:o}),!g&&i&&N("p",{children:[c,"最佳走法:",Te(l,i)," (第 ",f," 步)"]}),g&&N("p",{style:{fontWeight:"bold",color:"green"},children:d})]}),N("div",{className:"move-list",children:u})]})}function Xs(i,e){return{k:e==="red"?"K":"k",a:e==="red"?"A":"a",b:e==="red"?"B":"b",n:e==="red"?"N":"n",r:e==="red"?"R":"r",c:e==="red"?"C":"c",p:e==="red"?"P":"p",none:""}[i]}function Zs(i,e="red"){const o=[];for(const l of i){let r=0,h="";for(const c of l)if(c==="none")r++;else{r>0&&(h+=r.toString(),r=0);const[f,u]=c.split("_");h+=Xs(u,f)}r>0&&(h+=r.toString()),o.push(h),console.log(`FEN row: ${h}`)}const s=`${o.join("/")} ${e==="red"?"w":"b"} - - 0 1`;return console.log(`Generated FEN: ${s}`),s}function Hs(){const[i,e]=Z(null),[o,t]=Z(!0),n=async()=>{console.log("OpenCV.js is ready");try{const s=await js();if(Object.keys(s).length===0){console.error("No templates were successfully loaded");return}e(s)}catch(s){console.error("Error loading templates:",s)}finally{t(!1)}};return rt(()=>{let s;return(async()=>{typeof cv<"u"?(await new Promise(r=>{cv.onRuntimeInitialized=r}),await n()):(document.addEventListener("opencv-loaded",n),s=setInterval(()=>{!o&&typeof cv<"u"&&(clearInterval(s),n())},500))})(),()=>{document.removeEventListener("opencv-loaded",n),clearInterval(s)}},[]),{templates:i,isLoading:o}}const $s="modulepreload",ti=function(i){return"/xiangqi-analysis/"+i},Qe={},ei=function(e,o,t){let n=Promise.resolve();if(o&&o.length>0){document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),r=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=Promise.allSettled(o.map(h=>{if(h=ti(h),h in Qe)return;Qe[h]=!0;const c=h.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${f}`))return;const u=document.createElement("link");if(u.rel=c?"stylesheet":$s,c||(u.as="script"),u.crossOrigin="",u.href=h,r&&u.setAttribute("nonce",r),document.head.appendChild(u),c)return new Promise((g,d)=>{u.addEventListener("load",g),u.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(l){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=l,window.dispatchEvent(r),!r.defaultPrevented)throw l}return n.then(l=>{for(const r of l||[])r.status==="rejected"&&s(r.reason);return e().catch(s)})};class oi{constructor(){this.engineReady=!1,this.currentResolve=null}async initEngine(){if(!this.engineReady)try{const e=await ei(()=>import("./pikafish-ZteQ764f.js"),[]),o=e.default||e;window.Pikafish=o,this.engineInstance=await o({locateFile:t=>t==="pikafish.data"?`https://xiangqiai.com/wasm/data/${t}`:`https://xiangqiai.com/wasm/single/${t}`}),await this.engineInstance.ready,this.engineInstance.read_stdout=t=>{console.log("> ",t);const n=t.match(/bestmove\s(\S+)/);n&&this.currentResolve&&(this.currentResolve(n[1]),this.currentResolve=null)},this.engineInstance.send_command("uci"),this.engineReady=!0}catch(e){console.error("Failed to initialize Pikafish:",e)}}async getBestMove(e,o=14){if(!this.engineReady)throw new Error("Engine is not ready");return new Promise((t,n)=>{try{this.currentResolve=s=>{if(s==="(none)"){const r=e.split(" ")[1];t(r==="b"?"red_wins":"black_wins")}else t(s)},this.engineInstance.send_command(`position fen ${e}`),this.engineInstance.send_command(`go depth ${o}`),setTimeout(()=>{this.currentResolve&&(n(new Error("Engine timeout")),this.currentResolve=null)},5e3)}catch(s){n(s)}})}}function ni(){const[i,e]=Z(null),[o,t]=Z(""),[n,s]=Z(!1),[l,r]=Z(null),[h,c]=Z(!1);rt(()=>{(async()=>{const g=new oi;await g.initEngine(),e(g),c(!0)})()},[]);const f=ko(async(u,g)=>{if(i){s(!0),r(null);try{const d=await i.getBestMove(u,g);if(t(d),d==="red_wins"||d==="black_wins"){s(!1);return}}catch(d){r(`Error: ${d.message}`)}finally{s(!1)}}},[i]);return{engine:i,bestMove:o,isCalculating:n,error:l,fetchBestMove:f,setBestMove:t,isEngineReady:h}}function si(){const i=Number(localStorage.getItem("depth"))||14,[e,o]=Z(i);return rt(()=>{localStorage.setItem("depth",e.toString())},[e]),{depth:e,setDepth:o}}const ii=({depth:i,onDepthChange:e})=>N("div",{className:"depth-control-section",children:[N("h2",{children:"搜索深度控制"}),N("div",{className:"depth-slider-container",children:[N("label",{htmlFor:"depth-slider",children:["当前深度: ",i]}),N("input",{id:"depth-slider",type:"range",min:"10",max:"30",value:i,onChange:o=>{o.target instanceof HTMLInputElement&&e(Number(o.target.value))}})]})]}),ri=`

2024-10-08

  • 增加 更新日志 显示
  • 棋盘显示优化 @@ -23,4 +23,4 @@ ${$e}`)}function Do(i,e,o){return(i>=0&&o?` ${Ve(i,e-1)}`:Ve(i,e)).padEnd(e)}fun
  • 优化黑棋子识别
  • 新增欢迎提示和加载界面
-`,ii=()=>{const[i,e]=Z(!1);return N("div",{className:"changelog",children:[N("h3",{onClick:()=>{e(!i)},className:"changelog-title",children:[N("span",{className:"changelog-arrow",children:i?"▼":"▶"}),"更新日志"]}),i&&N("div",{className:"changelog-content markdown-content",dangerouslySetInnerHTML:{__html:si}})]})},xe="c5d42fec";function ri(){const[i,e]=Z(!1);it(()=>{const t=localStorage.getItem("lastSeenVersion");(!(localStorage.getItem("skipFutureModals")==="true")||t!==xe)&&e(!0)},[]);const o=t=>{e(!1),localStorage.setItem("lastSeenVersion",xe),t?localStorage.setItem("skipFutureModals","true"):localStorage.removeItem("skipFutureModals")};return i?N("div",{className:"modal-overlay",children:N("dialog",{open:!0,className:"welcome-modal",children:N("div",{className:"welcome-modal-content",children:[N("h2",{children:"欢迎使用"}),N("p",{children:"该应用正在开发完善中"}),N("p",{children:"目前在 JJ象棋 残局截图上进行了测试"}),N("p",{children:"请注意:需要在设置中关闭行棋提示"}),N(ii,{}),N("div",{className:"button-group",children:[N("button",{onClick:()=>o(!1),className:"primary-button",children:"我知道了"}),N("button",{onClick:()=>o(!0),className:"secondary-button",children:"不再提示"})]})]})})}):null}const li=()=>N("div",{className:"spinner"});function hi(){const[i,e]=Z(""),[o,t]=Z(""),[n,s]=Z([]),[l,r]=Z([]),[h,c]=Z(),[f,u]=Z(),{templates:g,isLoading:d}=Xs(),{bestMove:p,isCalculating:E,error:q,fetchBestMove:a,setBestMove:_,isEngineReady:U}=ei(),{depth:w,setDepth:R}=oi(),F=d||!U;it(()=>{o&&a(o,w)},[o,w,a]);const b=()=>{navigator.clipboard.writeText(o)},k=()=>{if(!p||p==="red_wins"||p==="black_wins")return;const y=lo(o,p);t(y),s(M=>[...M,y]),r(M=>[...M,p]),_("")},V=()=>{if(n.length>1){const y=n.slice(0,-1),M=l.slice(0,-1),K=y[y.length-1];s(y),r(M),t(K),_("")}},m=y=>{if(d||!g)return;u({width:y.width,height:y.height});const{gridCells:M,chessboardRect:K}=$n(y),A={x:Math.max(0,K.x),y:Math.max(0,K.y),width:Math.min(K.width,y.width-K.x),height:Math.min(K.height,y.height-K.y)};c(A);const W=[];for(let L=0;LArray(9).fill("none"));W.forEach(L=>{const[B,x]=L.position;L.type!==null&&(Y[B][x]=`${L.color}_${L.type}`)});const j=Ps(Y,"red");t(j),s([j])},S=y=>{s([]),r([]),_(""),m(y)},v=y=>{t(y),s(M=>[...M,y]),_("")};return F?N("div",{className:"loading-overlay",children:[N(li,{}),N("p",{children:"正在加载必要组件,请稍候..."}),N("p",{children:"如果加载时间过长,请刷新页面重试。"})]}):N(qt,{children:[N("header",{children:N("h1",{children:"象棋棋盘识别与分析"})}),N("main",{className:"app-container",children:[N(ri,{}),N("div",{className:"content-wrapper",children:[N("div",{className:"left-column",children:N(Ds,{bestMove:p,isCalculating:E,error:q,onNextMove:k,onPreviousMove:V,moveHistory:l,fenCode:o,fenHistory:n,onFenUpdate:v})}),N("div",{className:"right-column",children:[N(js,{onImageUpload:S}),N(Ls,{overlayImageSrc:i,chessboardRect:h,originalImageSize:f}),N(Gs,{fenCode:o,onCopy:b}),N(ni,{depth:w,onDepthChange:R})]})]})]}),N("footer",{children:N("p",{children:["© 2024 象棋棋盘识别与分析系统 | Powered by ",N("a",{href:"https://github.com/official-pikafish/Pikafish",children:"Pikafish"})," | ",N("a",{href:"https://github.com/iFwu/xiangqi-analysis",children:"GitHub 源码仓库"})]})})]})}vo(N(hi,{}),document.getElementById("app")); +`,li=()=>{const[i,e]=Z(!1);return N("div",{className:"changelog",children:[N("h3",{onClick:()=>{e(!i)},className:"changelog-title",children:[N("span",{className:"changelog-arrow",children:i?"▼":"▶"}),"更新日志"]}),i&&N("div",{className:"changelog-content markdown-content",dangerouslySetInnerHTML:{__html:ri}})]})},Je="d92b2260";function hi(){const[i,e]=Z(!1);rt(()=>{const t=localStorage.getItem("lastSeenVersion");(!(localStorage.getItem("skipFutureModals")==="true")||t!==Je)&&e(!0)},[]);const o=t=>{e(!1),localStorage.setItem("lastSeenVersion",Je),t?localStorage.setItem("skipFutureModals","true"):localStorage.removeItem("skipFutureModals")};return i?N("div",{className:"modal-overlay",children:N("dialog",{open:!0,className:"welcome-modal",children:N("div",{className:"welcome-modal-content",children:[N("h2",{children:"欢迎使用"}),N("p",{children:"该应用正在开发完善中"}),N("p",{children:"目前在 JJ象棋 残局截图上进行了测试"}),N("p",{children:"请注意:需要在设置中关闭行棋提示"}),N(li,{}),N("div",{className:"button-group",children:[N("button",{onClick:()=>o(!1),className:"primary-button",children:"我知道了"}),N("button",{onClick:()=>o(!0),className:"secondary-button",children:"不再提示"})]})]})})}):null}const ci=()=>N("div",{className:"spinner"});function ai(){const[i,e]=Z(""),[o,t]=Z(""),[n,s]=Z([]),[l,r]=Z([]),[h,c]=Z(),[f,u]=Z(),{templates:g,isLoading:d}=Hs(),{bestMove:p,isCalculating:_,error:q,fetchBestMove:a,setBestMove:w,isEngineReady:U}=ni(),{depth:E,setDepth:R}=si(),k=d||!U;rt(()=>{o&&a(o,E)},[o,E,a]);const b=()=>{navigator.clipboard.writeText(o)},F=()=>{if(!p||p==="red_wins"||p==="black_wins")return;const y=ho(o,p);t(y),s(M=>[...M,y]),r(M=>[...M,p]),w("")},V=()=>{if(n.length>1){const y=n.slice(0,-1),M=l.slice(0,-1),K=y[y.length-1];s(y),r(M),t(K),w("")}},m=y=>{if(d||!g)return;u({width:y.width,height:y.height});const{gridCells:M,chessboardRect:K}=es(y),A={x:Math.max(0,K.x),y:Math.max(0,K.y),width:Math.min(K.width,y.width-K.x),height:Math.min(K.height,y.height-K.y)};c(A);const W=[];for(let L=0;LArray(9).fill("none"));W.forEach(L=>{const[B,x]=L.position;L.type!==null&&(Y[B][x]=`${L.color}_${L.type}`)});const j=Zs(Y,"red");t(j),s([j])},S=y=>{s([]),r([]),w(""),m(y)},v=y=>{t(y),s(M=>[...M,y]),w("")};return k?N("div",{className:"loading-overlay",children:[N(ci,{}),N("p",{children:"正在加载必要组件,请稍候..."}),N("p",{children:"如果加载时间过长,请刷新页面重试。"})]}):N(qt,{children:[N("header",{children:N("h1",{children:"象棋棋盘识别与分析"})}),N("main",{className:"app-container",children:[N(hi,{}),N("div",{className:"content-wrapper",children:[N("div",{className:"left-column",children:N(Ps,{bestMove:p,isCalculating:_,error:q,onNextMove:F,onPreviousMove:V,moveHistory:l,fenCode:o,fenHistory:n,onFenUpdate:v})}),N("div",{className:"right-column",children:[N(Ls,{onImageUpload:S}),N(Os,{overlayImageSrc:i,chessboardRect:h,originalImageSize:f}),N(Bs,{fenCode:o,onCopy:b}),N(ii,{depth:E,onDepthChange:R})]})]})]}),N("footer",{children:N("p",{children:["© 2024 象棋棋盘识别与分析系统 | Powered by"," ",N("a",{href:"https://github.com/official-pikafish/Pikafish",children:"Pikafish"})," | ",N("a",{href:"https://github.com/iFwu/xiangqi-analysis",children:"GitHub 源码仓库"})]})})]})}Ro(N(ai,{}),document.getElementById("app")); diff --git a/index.html b/index.html index f7a8f00..34f1ed6 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ 象棋棋盘识别与分析系统 | 在线象棋分析工具 - +