mons-rules 0.4.9 → 0.4.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mons-rules.js +1 -1
- package/package.json +1 -1
package/dist/mons-rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var ms=Object.defineProperty;var s=(e,n)=>ms(e,"name",{value:n,configurable:!0});var y=Object.freeze({White:"white",Black:"black"}),x=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),M=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),P=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),Z=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var Jo=Object.freeze({[y.White]:0,[y.Black]:1});function en(e){return Jo[e]}s(en,"colorId");var nn=Object.freeze({[M.Demon]:0,[M.Drainer]:1,[M.Angel]:2,[M.Spirit]:3,[M.Mystic]:4}),Be=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),er=Object.freeze({[Z.SelectPotion]:0,[Z.SelectBomb]:1}),D=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),nt=4,En=Object.freeze({kind:"supermana"});function Pn(e){return e===y.Black?y.White:y.Black}s(Pn,"otherColor");function zn(e,n,t){if(!Number.isInteger(t)||t<0||t>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:t})}s(zn,"createMon");function Xo(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}s(Xo,"monEquals");function Ee(e){return e.cooldown>0}s(Ee,"isMonFainted");function oa(e){return zn(e.kind,e.color,2)}s(oa,"faintMon");function ra(e){return e.cooldown>0?zn(e.kind,e.color,e.cooldown-1):We(e)}s(ra,"decreaseMonCooldown");function tt(e){return Object.freeze({kind:"regular",color:e})}s(tt,"regularMana");function na(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}s(na,"manaEquals");function nr(e,n){return e||!n?2:1}s(nr,"manaScoreForOwnership");function aa(e,n){return nr(e.kind==="supermana",e.kind==="regular"&&e.color===n)}s(aa,"manaScore");function ze(e){return Object.freeze({kind:"mon",mon:We(e)})}s(ze,"monItem");function sn(e){return Object.freeze({kind:"mana",mana:et(e)})}s(sn,"manaItem");function ot(e,n){return Object.freeze({kind:"mon-with-mana",mon:We(e),mana:et(n)})}s(ot,"monWithManaItem");function gt(e,n){return Object.freeze({kind:"mon-with-consumable",mon:We(e),consumable:n})}s(gt,"monWithConsumableItem");function Mt(e){return Object.freeze({kind:"consumable",consumable:e})}s(Mt,"consumableItem");function We(e){return Object.isFrozen(e)?e:zn(e.kind,e.color,e.cooldown)}s(We,"immutableMon");function et(e){return e.kind==="supermana"?En:Object.isFrozen(e)?e:tt(e.color)}s(et,"immutableMana");function Wn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:ze(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:sn(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:ot(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:gt(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:Mt(e.consumable)}}s(Wn,"immutableItem");function W(e){return{i:e.i,j:e.j}}s(W,"copyLocation");function fs(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:W(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(fs,"copyInput");function rt(e){let n=fs(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Wn(e.actorMonItem)}}s(rt,"copyNextInput");function Hn(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Wn(e.item),from:W(e.from),to:W(e.to)};case"mana-move":return{kind:"mana-move",mana:et(e.mana),from:W(e.from),to:W(e.to)};case"mana-scored":return{kind:"mana-scored",mana:et(e.mana),at:W(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:We(e.mystic),from:W(e.from),to:W(e.to)};case"demon-action":return{kind:"demon-action",demon:We(e.demon),from:W(e.from),to:W(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:We(e.demon),from:W(e.from),to:W(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Wn(e.item),from:W(e.from),to:W(e.to),by:W(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:We(e.by),at:W(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Wn(e.by),at:W(e.at)};case"use-potion":return{kind:"use-potion",from:W(e.from),to:W(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:et(e.mana),by:We(e.by),at:W(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:We(e.mon),from:W(e.from),to:W(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:et(e.mana),at:W(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:W(e.from),to:W(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:We(e.by),from:W(e.from),to:W(e.to)};case"mon-awake":return{kind:"mon-awake",mon:We(e.mon),at:W(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:W(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}s(Hn,"copyEvent");function tr(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(W)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(rt)};case"events":return{kind:"events",events:e.events.map(Hn)}}}s(tr,"copyOutput");function Q(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}s(Q,"itemMon");function ia(e){let n=Q(e);return n===void 0||!Ee(n)}s(ia,"isSpiritTargetAllowed");function vn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}s(vn,"itemMana");function or(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}s(or,"itemConsumable");function sa(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Xo(e.mon,n.mon);case"mana":return n.kind==="mana"&&na(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Xo(e.mon,n.mon)&&na(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Xo(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}s(sa,"itemEquals");function Zo(e){return`${e.kind}:${e.color}:${e.cooldown}`}s(Zo,"monKey");function ta(e){return e.kind==="supermana"?"s":`r:${e.color}`}s(ta,"manaKey");function to(e){switch(e.kind){case"mon":return`m:${Zo(e.mon)}`;case"mana":return`a:${ta(e.mana)}`;case"mon-with-mana":return`mm:${Zo(e.mon)}:${ta(e.mana)}`;case"mon-with-consumable":return`mc:${Zo(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}s(to,"itemKey");function rr(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}s(rr,"inputKey");function ca(e){return e.map(rr).join(";")}s(ca,"inputChainKey");function Ct(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}s(Ct,"inputEquals");function V(e){return`${e.i},${e.j}`}s(V,"locationFen");var oo=48,ps=57,bs=44,hs=59,ys=108,ks=109,gs=122,Ms=112,Cs=98;function Is(e){switch(e){case Z.SelectPotion:return"p";case Z.SelectBomb:return"b"}}s(Is,"modifierFen");function Ss(e){switch(e.kind){case"takeback":return"z";case"location":return`l${V(e.location)}`;case"modifier":return`m${Is(e.modifier)}`}}s(Ss,"inputFen");function ua(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<oo||o>ps))return o===oo+1&&n+1<t&&e.charCodeAt(n+1)===oo?10:o-oo}s(ua,"parseCoordinate");function la(e,n){return e+(n===10?2:1)}s(la,"coordinateEnd");function Es(e,n,t){let o=ua(e,n,t);if(o===void 0)return;let r=la(n,o);if(r>=t||e.charCodeAt(r)!==bs)return;let a=r+1,i=ua(e,a,t);if(!(i===void 0||la(a,i)!==t))return{i:o,j:i}}s(Es,"parseLocation");function Ps(e,n,t){switch(e.charCodeAt(n)){case ys:{let o=Es(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case ks:return t!==n+2?void 0:e.charCodeAt(n+1)===Ms?{kind:"modifier",modifier:Z.SelectPotion}:e.charCodeAt(n+1)===Cs?{kind:"modifier",modifier:Z.SelectBomb}:void 0;case gs:return t===n+1?{kind:"takeback"}:void 0;default:return}}s(Ps,"parseInputFenRange");function at(e){return e.map(Ss).join(";")}s(at,"inputArrayFen");function It(e){if(typeof e!="string")throw new TypeError("input FEN must be a string");if(e==="")return[];let n=[],t=0;for(let o=0;o<=e.length;o+=1){if(o<e.length&&e.charCodeAt(o)!==hs)continue;if(n.length===nt)return;let r=Ps(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}s(It,"parseInputArrayFen");var da=Math.trunc(5.5),vs=10;function te(e,n){return{i:e,j:n}}s(te,"location");function St(e,n){return e.i===n.i&&e.j===n.j}s(St,"locationEquals");function pn(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}s(pn,"isValidLocation");function Qn(e){if(!pn(e))throw new RangeError(`board location must use integer coordinates from 0 to ${vs}`)}s(Qn,"assertValidLocation");function se(e){return Qn(e),e.i*11+e.j}s(se,"locationIndex");function it(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return te(Math.trunc(e/11),e%11)}s(it,"fromLocationIndex");function Aa(e,n){return te(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}s(Aa,"locationBetween");function ma(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}s(ma,"locationDistance");function fa(e,n){let t=[];for(let o=e.i-n;o<=e.i+n;o+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=te(o,r);pn(a)&&!St(a,e)&&t.push(a)}return t}s(fa,"nearbyLocationsFor");function pa(e,n){let t=[];for(let[o,r]of n){let a=te(e.i+o,e.j+r);pn(a)&&t.push(a)}return t}s(pa,"directionalReachabilityFor");function ws(e){let n=[];for(let t=-2;t<=2;t+=1)for(let o=-2;o<=2;o+=1){if(Math.max(Math.abs(t),Math.abs(o))!==2)continue;let r=te(e.i+t,e.j+o);pn(r)&&n.push(r)}return n}s(ws,"spiritReachabilityFor");function Et(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(it(t)).map(o=>Object.freeze(o)))))}s(Et,"buildCache");var Ts=Et(e=>fa(e,1)),Os=Et(e=>fa(e,3)),xs=Et(e=>pa(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),Rs=Et(e=>pa(e,[[-2,0],[2,0],[0,2],[0,-2]])),_s=Et(ws);function Pt(e,n){return pn(n)?e[se(n)]??[]:[]}s(Pt,"cachedLocations");function He(e){return Pt(Ts,e)}s(He,"nearbyLocations");function ro(e){return Pt(Os,e)}s(ro,"bombReachableLocations");function ao(e){return Pt(xs,e)}s(ao,"mysticReachableLocations");function io(e){return Pt(Rs,e)}s(io,"demonReachableLocations");function so(e){return Pt(_s,e)}s(so,"spiritReachableLocations");var ar=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(it(n))));var ba=Object.freeze({includeManaStartsWithPotionAction:!1}),ir=Object.freeze({includeManaStartsWithPotionAction:!0});function Fe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}s(Fe,"nextInput");function ha(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}s(ha,"firstOptionFromEachKindGroup");function sr(e,n){return e!==void 0&&ma(e,n)===1}s(sr,"isLocationGuardedByAngelLocation");function ya(e,n,t,o){if(t!==void 0){for(let a of e)if(St(a,t))return o(t)?[Fe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(Fe({kind:"location",location:a},n));return r}s(ya,"nextInputsFromLocations");var vt=new RangeError("fast workspace allocation failed");function wt(e){return e===vt}s(wt,"isFastWorkspaceAllocationFailure");function Oe(e){throw e instanceof RangeError?vt:e}s(Oe,"rethrowFastWorkspaceAllocation");var bn=x.Classic,ye=5,re=5,wn=1,Ue=1,qn=Object.freeze([x.Classic,x.SwappedManaRows,x.OffsetArcManaRows,x.CenterSpokeManaRows,x.AlternatingManaRows,x.InnerWedgeManaRows,x.OuterWedgeManaRows,x.BentCenterManaRows,x.OuterEdgeManaRows,x.SplitFlankManaRows,x.ForwardBridgeManaRows,x.CornerChainManaRows]),Ma=Object.freeze({[x.Classic]:0,[x.SwappedManaRows]:1,[x.OffsetArcManaRows]:2,[x.CenterSpokeManaRows]:3,[x.AlternatingManaRows]:4,[x.InnerWedgeManaRows]:5,[x.OuterWedgeManaRows]:6,[x.BentCenterManaRows]:7,[x.OuterEdgeManaRows]:8,[x.SplitFlankManaRows]:9,[x.ForwardBridgeManaRows]:10,[x.CornerChainManaRows]:11}),Ds=new Map(qn.map(e=>[Ma[e],e]));function Ca(e){return Ma[e]}s(Ca,"gameVariantId");function J(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(te(n,t))))}s(J,"locations");function Qe(e,n){return Object.freeze({[y.Black]:e,[y.White]:n})}s(Qe,"manaLayout");var Ls=Object.freeze({[x.Classic]:Qe(J([3,4],[3,6],[4,3],[4,5],[4,7]),J([7,4],[7,6],[6,3],[6,5],[6,7])),[x.SwappedManaRows]:Qe(J([3,3],[3,5],[3,7],[4,4],[4,6]),J([7,3],[7,5],[7,7],[6,4],[6,6])),[x.OffsetArcManaRows]:Qe(J([3,4],[3,6],[4,2],[4,5],[4,8]),J([6,2],[6,5],[6,8],[7,4],[7,6])),[x.CenterSpokeManaRows]:Qe(J([3,5],[4,2],[4,4],[4,6],[4,8]),J([6,2],[6,4],[6,6],[6,8],[7,5])),[x.AlternatingManaRows]:Qe(J([4,1],[4,3],[4,5],[4,7],[4,9]),J([6,1],[6,3],[6,5],[6,7],[6,9])),[x.InnerWedgeManaRows]:Qe(J([3,4],[3,6],[4,4],[4,5],[4,6]),J([6,4],[6,5],[6,6],[7,4],[7,6])),[x.OuterWedgeManaRows]:Qe(J([3,4],[3,5],[3,6],[4,3],[4,7]),J([6,3],[6,7],[7,4],[7,5],[7,6])),[x.BentCenterManaRows]:Qe(J([3,5],[4,4],[4,5],[4,6],[5,3]),J([5,7],[6,4],[6,5],[6,6],[7,5])),[x.OuterEdgeManaRows]:Qe(J([4,0],[4,1],[4,9],[4,10],[5,1]),J([5,9],[6,0],[6,1],[6,9],[6,10])),[x.SplitFlankManaRows]:Qe(J([3,4],[3,6],[4,2],[4,3],[5,2]),J([5,8],[6,7],[6,8],[7,4],[7,6])),[x.ForwardBridgeManaRows]:Qe(J([3,4],[3,6],[4,3],[4,5],[5,4]),J([5,6],[6,5],[6,7],[7,4],[7,6])),[x.CornerChainManaRows]:Qe(J([3,5],[3,6],[4,6],[4,7],[5,7]),J([5,3],[6,3],[6,4],[7,4],[7,5]))}),Ia=Object.freeze({kind:"regular"}),ka=Object.freeze({kind:"consumable-base"}),Ns=Object.freeze({kind:"supermana-base"}),Tt=Object.freeze(te(5,5)),Ot=J([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function Sa(e){return Number.isSafeInteger(e)?Ds.get(e):void 0}s(Sa,"gameVariantFromId");function ga(e,n){return Ls[e][n]}s(ga,"manaBaseLocations");function Bs(e){let n=Array.from({length:121}).fill(Ia),t=s((o,r)=>{n[se(o)]=Object.freeze(r)},"put");t(te(0,0),{kind:"mana-pool",color:y.Black}),t(te(0,10),{kind:"mana-pool",color:y.Black}),t(te(10,0),{kind:"mana-pool",color:y.White}),t(te(10,10),{kind:"mana-pool",color:y.White}),t(te(0,3),{kind:"mon-base",monKind:M.Mystic,color:y.Black}),t(te(0,4),{kind:"mon-base",monKind:M.Spirit,color:y.Black}),t(te(0,5),{kind:"mon-base",monKind:M.Drainer,color:y.Black}),t(te(0,6),{kind:"mon-base",monKind:M.Angel,color:y.Black}),t(te(0,7),{kind:"mon-base",monKind:M.Demon,color:y.Black}),t(te(10,3),{kind:"mon-base",monKind:M.Demon,color:y.White}),t(te(10,4),{kind:"mon-base",monKind:M.Angel,color:y.White}),t(te(10,5),{kind:"mon-base",monKind:M.Drainer,color:y.White}),t(te(10,6),{kind:"mon-base",monKind:M.Spirit,color:y.White}),t(te(10,7),{kind:"mon-base",monKind:M.Mystic,color:y.White});for(let o of ga(e,y.Black))t(o,{kind:"mana-base",color:y.Black});for(let o of ga(e,y.White))t(o,{kind:"mana-base",color:y.White});return t(te(5,0),ka),t(te(5,10),ka),t(Tt,Ns),Object.freeze(n)}s(Bs,"buildSquares");var Fs=new Map(qn.map(e=>[e,Bs(e)]));function co(e){let n=Fs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}s(co,"squaresForVariant");function cr(e,n){return Qn(e),co(n)[se(e)]??Ia}s(cr,"squareAtForVariant");function Us(e){return cr(e,bn)}s(Us,"squareAt");function js(e){switch(e.kind){case"mon-base":return ze(zn(e.monKind,e.color,0));case"mana-base":return sn(tt(e.color));case"supermana-base":return sn(En);case"consumable-base":return Mt(P.BombOrPotion);case"regular":case"mana-pool":return}}s(js,"initialItemForSquare");function Gs(e){return Object.freeze(co(e).map(js))}s(Gs,"buildInitialItems");var Ks=new Map(qn.map(e=>[e,Gs(e)]));function Ea(e){let n=Ks.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}s(Ea,"initialItemsForVariant");function Pa(e,n){for(let t of Ot){let o=Us(t);if(o.kind==="mon-base"&&o.monKind===e&&o.color===n)return t}throw new Error("Expected at least one base for the given mon")}s(Pa,"monBase");var ae=Object.keys(Jo).length,hn=Object.keys(nn).length,xt=ae*hn,ee=1,ue=2,X=3,Rt=1,_t=2,ke=3,Pe=1,wa=2,pe=3,Dt=nn[M.Demon],Me=nn[M.Drainer],Lt=nn[M.Angel],uo=nn[M.Spirit],Nt=nn[M.Mystic],Vs=0,Ws=1,tn=2,zs=3,Ta=5,ce=7,st=se(Tt);function j(e){return e&3}s(j,"cellOccupancy");function le(e){return e>>2&7}s(le,"cellMonKind");function fe(e){return e>>5&1}s(fe,"cellMonColor");function de(e){return e>>6&3}s(de,"cellCooldown");function L(e){return e>>8&3}s(L,"cellMana");function N(e){return e>>10&3}s(N,"cellConsumable");function ct(e){let n=N(e);return n===0||n===Pe}s(ct,"damagingAttackCanComplete");function ut(e,n,t,o,r){return X|e<<2|n<<5|t<<6|o<<8|r<<10}s(ut,"makeMonCell");function Tn(e){return ee|e<<8}s(Tn,"makeManaCell");function Oa(e){return ue|e<<10}s(Oa,"makeConsumableCell");function je(e,n){return nr(e===ke,e-1===n)}s(je,"manaScoreValue");function ve(e,n){return e*ae+n}s(ve,"monId");function lt(e){return e!==tn&&e<ce}s(lt,"squareIsRegularForMovement");function cn(e){return e>=Ta&&e<ce}s(cn,"squareIsPool");function Bt(e){return Math.trunc((e-ce)/ae)}s(Bt,"squareMonBaseKind");function Ft(e){return(e-ce)%ae}s(Ft,"squareMonBaseColor");function H(e,n){return e[n]??0}s(H,"u8");function G(e,n){return e[n]??0}s(G,"u16");function m(e,n){return e[n]??0}s(m,"i32");function Ce(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}s(Ce,"at");function lo(e,n,t){return ut(nn[e.kind],en(e.color),e.cooldown,n,t)}s(lo,"fastMonCellFromMon");function Hs(e){let n=new Uint8Array(121),t=co(e);for(let o=0;o<121;o+=1){let r=t[o];if(r!==void 0)switch(r.kind){case"regular":n[o]=Vs;break;case"consumable-base":n[o]=Ws;break;case"supermana-base":n[o]=tn;break;case"mana-base":n[o]=zs+en(r.color);break;case"mana-pool":n[o]=Ta+en(r.color);break;case"mon-base":n[o]=ce+ve(nn[r.monKind],en(r.color));break}}return n}s(Hs,"buildSquares");var Qs=new Map(qn.map(e=>[e,Hs(e)]));function Ao(e){let n=Qs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Oe(t)}}s(Ao,"fastSquaresForVariant");var mo=(()=>{let e=new Int32Array(xt).fill(-1),n=Ao(Ce(qn,0));for(let t of Ot){let o=se(t),r=H(n,o);r>=ce&&(e[r-ce]=o)}return e})();function Ut(e){let n=[],t=new Int32Array(121),o=new Int32Array(121);for(let r=0;r<121;r+=1){o[r]=n.length;let a=e(it(r)).map(se).sort((i,l)=>i-l);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}s(Ut,"buildOffsetTable");var me=Ut(He),On=Ut(ao),xn=Ut(io),fo=Ut(so),po=Ut(ro),qs=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),i=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-i))}}return e})();function Ie(e,n){return H(qs,e*121+n)}s(Ie,"chebyshev");function $s(e,n){let t=Math.trunc(e/11),o=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((t+r)/2)*11+Math.trunc((o+a)/2)}s($s,"midpointCompute");var Ys=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1)for(let t=0;t<121;t+=1)e[n*121+t]=$s(n,t);return e})();function bo(e,n){return H(Ys,e*121+n)}s(bo,"midpoint");var va=(()=>{let e=[],n=Ao(Ce(qn,0));for(let t=0;t<121;t+=1)cn(H(n,t))&&e.push(t);return new Int32Array(e)})(),ur=(()=>{let e=new Uint8Array(121*ae);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11,r=Math.min(o,10-o);for(let a=0;a<ae;a+=1){let i=a===0?10:0,l=Math.abs(i-t);e[a*121+n]=l>r?l:r}}return e})(),xa=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(da-Math.trunc(n/11));return e})(),un=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<va.length;o+=1){let r=Ie(n,m(va,o));r<t&&(t=r)}e[n]=t}return e})();function Xs(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}s(Xs,"xorshift");function Rn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}s(Rn,"randomTable");var _n=Xs(49734321),Ra=3,ho=1+xt*Ra,Zs=Rn(_n,121*ho),Js=Rn(_n,121*ho),ec=Rn(_n,484),nc=Rn(_n,484),tc=Rn(_n,484),oc=Rn(_n,484),_a=2048,yo=Rn(_n,_a),lr=Rn(_n,_a);function Da(e){return j(e)!==X?0:1+ve(le(e),fe(e))*Ra+de(e)}s(Da,"monSlot");function ko(e,n){return n===0?0:m(Zs,e*ho+Da(n))^m(ec,e*4+L(n))^m(tc,e*4+N(n))}s(ko,"cellHashLo");function go(e,n){return n===0?0:m(Js,e*ho+Da(n))^m(nc,e*4+L(n))^m(oc,e*4+N(n))}s(go,"cellHashHi");function dr(e,n){return e>=ye?y.White:n>=ye?y.Black:void 0}s(dr,"winnerForScores");function Mo(e){return dr(e.whiteScore,e.blackScore)}s(Mo,"winnerForState");function dt(e){return e.turnNumber===1}s(dt,"isFirstTurnState");function Co(e){return e.activeColor===y.White?e.whitePotionsCount:e.blackPotionsCount}s(Co,"currentPlayerPotions");function yn(e){return e<re}s(yn,"canMoveMonForCounts");function La(e){return yn(e.monsMovesCount)}s(La,"canPlayerMoveMon");function Dn(e,n){return!e&&n<wn}s(Dn,"canMoveManaForCounts");function Na(e){return Dn(dt(e),e.manaMovesCount)}s(Na,"canPlayerMoveMana");function Io(e,n,t){return!e&&(t>0||n<Ue)}s(Io,"canUseActionForCounts");function Ba(e){return Io(dt(e),e.actionsUsedCount,Co(e))}s(Ba,"canPlayerUseAction");function Fa(e,n){if(n===void 0)return!0;let t=Q(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===M.Drainer&&!Ee(n.mon):e.kind==="consumable"&&e.consumable===P.BombOrPotion;case"mana":return t?.kind===M.Drainer&&!Ee(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===P.BombOrPotion;case"consumable":return n.consumable===P.BombOrPotion&&t!==void 0}}s(Fa,"spiritDestinationItemAllowed");function Ar(e,n,t,o,r,a,i){if(!Dn(e,t))return!1;let l=yn(n);return!l&&!Io(e,o,r)||!a||i&&!l&&o>=Ue&&r>0}s(Ar,"shouldSuggestRegularManaStartsFromScalars");function Ua(e,n,t){return Ar(dt(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,Co(e),n,t)}s(Ua,"shouldSuggestRegularManaStarts");function mr(e,n,t,o){return e?!yn(n):Dn(e,t)?!yn(n)&&!o:!0}s(mr,"shouldAdvanceTurnForCounts");function $n(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}s($n,"regularSquareForMovement");function fr(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?$n(o)&&t.mon.kind===M.Drainer:t!==void 0?!1:$n(o)}s(fr,"regularManaMoveDestinationAllowed");function rc(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of He(n))if(fr(e.board,t))return!0;return!1}s(rc,"hasMovableFreeRegularMana");function ja(e){let n=dt(e),o=!(!n&&Dn(n,e.manaMovesCount)&&!yn(e.monsMovesCount))||rc(e);return mr(n,e.monsMovesCount,e.manaMovesCount,o)}s(ja,"shouldAdvanceTurn");var At=0,Eo=1,Cr=2,on=3,Ln=4,Ir=5,xe=127,Ge=0,ln=1,Nn=2,Sr=3,Po=-2,Ga=16,ac=Math.ceil(121*Uint16Array.BYTES_PER_ELEMENT/Int32Array.BYTES_PER_ELEMENT),br=ac,hr=br+xt,yr=hr+ae,kr=yr+Ga,ic=kr+ae;function Re(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}s(Re,"encodeMove");function mt(e){return e&7}s(mt,"moveType");function Ka(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(Ka,"sameSquares");function qe(e){return e>>3&127}s(qe,"moveFrom");function _e(e){return e>>10&127}s(_e,"moveTo");function ft(e){return e>>17&127}s(ft,"moveAux");function jt(e){return e>>24&3}s(jt,"moveModifier");function pr(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}s(pr,"validateArrayLength");var gr=class{static{s(this,"MutableFastPosition")}storage=new Int32Array(ic);cells=new Uint16Array(this.storage.buffer,0,121);squares=new Uint8Array(121);monLocations=this.storage.subarray(br,br+xt).fill(-1);freeMana=this.storage.subarray(hr,hr+ae);manaIndices=this.storage.subarray(yr,yr+Ga);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=this.storage.subarray(kr,kr+ae);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.storage.set(t.storage),this.squares=t.squares,this.manaCount=t.manaCount,this.whiteScore=t.whiteScore,this.blackScore=t.blackScore,this.active=t.active,this.monsMoves=t.monsMoves,this.manaMoves=t.manaMoves,this.actionsUsed=t.actionsUsed,this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){pr(n.cells,121,"cells"),pr(n.squares,121,"squares"),pr(n.potions,ae,"potions");let t;try{t=new Uint8Array(n.squares)}catch(d){Oe(d)}let o=0;for(let d=0;d<121;d+=1){let f=G(n.cells,d);if(!(f===0||j(f)!==ee)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,l=n.monsMoves,u=n.manaMoves,c=n.actionsUsed,A=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=l,this.manaMoves=u,this.actionsUsed=c,this.potions.set(n.potions),this.firstTurn=A,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,t=0;for(let o=0;o<121;o+=1){let r=G(this.cells,o);if(r===0)continue;n^=ko(o,r),t^=go(o,r);let a=j(r);if(a===X)this.monLocations[ve(le(r),fe(r))]=o;else if(a===ee){let i=L(r);(i===1||i===2)&&(this.freeMana[i-1]=m(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},vo=gr;function Gt(e,n,t){let o=m(e.monLocations,ve(Lt,n));if(o<0)return!1;let r=G(e.cells,o);return j(r)===X&&le(r)===Lt&&fe(r)===n&&de(r)===0&&Ie(o,t)===1}s(Gt,"awakeAngelGuards");function sc(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(m(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=m(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}s(sc,"removeManaIndex");function cc(e,n){let t=e.manaCount;if(t>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let o=t;for(;o>0&&m(e.manaIndices,o-1)>n;)e.manaIndices[o]=m(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}s(cc,"insertManaIndex");function z(e,n,t){let o=G(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=ko(n,o),e.hashHi^=go(n,o);let r=j(o);if(r===X){let a=ve(le(o),fe(o));m(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===ee){let a=L(o);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)-1),sc(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=ko(n,t),e.hashHi^=go(n,t);let r=j(t);if(r===X)e.monLocations[ve(le(t),fe(t))]=n;else if(r===ee){let a=L(t);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)+1),cc(e,n)}}}}s(z,"setCell");function So(e){return ut(le(e),fe(e),de(e),0,0)}s(So,"plainMonCell");function Yn(e,n,t){return ut(le(e),fe(e),de(e),n,t)}s(Yn,"carryingMonCell");function Va(e,n){e.potions[n]=m(e.potions,n)+1}s(Va,"addPotion");function Mr(e,n,t,o){if(L(n)===0&&N(n)===0&&o===ln){z(e,t,Yn(n,0,Pe));return}z(e,t,n),Va(e,fe(n))}s(Mr,"collectConsumableAt");function uc(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}s(uc,"addScore");function Er(e){if(e.actionsUsed<Ue){e.actionsUsed+=1;return}e.potions[e.active]=m(e.potions,e.active)-1}s(Er,"consumeAction");function Wa(e,n){let t=le(n),o=fe(n),r=m(mo,ve(t,o));z(e,r,ut(t,o,2,0,0))}s(Wa,"faintMonAt");function lc(e){let n=G(e.cells,st);j(n)===X&&L(n)===0&&N(n)===0?z(e,st,Yn(n,ke,0)):z(e,st,Tn(ke))}s(lc,"supermanaBackToBase");function dc(e,n,t){let o=L(n);if(o===ke?lc(e):o!==0&&z(e,t,Tn(o)),N(n)===Pe){let r=m(mo,ve(le(n),fe(n)));t!==r&&z(e,t,0)}}s(dc,"releaseFaintedCarry");function Pr(e,n,t){Wa(e,n),dc(e,n,t)}s(Pr,"faintTargetAndReleaseCarry");function vr(e,n,t){uc(e,je(t,e.active));let o=G(e.cells,n);j(o)===X?z(e,n,So(o)):z(e,n,0)}s(vr,"scoreCarriedManaAt");function Ac(e,n){let t=qe(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o),i=L(r);if(e.monsMoves+=1,z(e,t,0),z(e,o,r),a!==0){let l=j(a);l===ee?(i!==0&&z(e,t,Tn(i)),z(e,o,Yn(r,L(a),0))):l===ue&&N(a)===pe&&Mr(e,r,o,jt(n))}i!==0&&cn(H(e.squares,o))&&vr(e,o,i)}s(Ac,"applyMonMove");function mc(e,n){let t=qe(n),o=_e(n),r=L(G(e.cells,t)),a=G(e.cells,o);e.manaMoves+=1,z(e,t,0),z(e,o,Tn(r)),a!==0&&z(e,o,Yn(a,r,0)),cn(H(e.squares,o))&&vr(e,o,r)}s(mc,"applyManaMove");function fc(e,n){let t=_e(n),o=G(e.cells,t);Er(e),z(e,t,0),Pr(e,o,t)}s(fc,"applyMysticAction");function pc(e,n){let t=qe(n),o=_e(n),r=jt(n),a=r===Sr?xe:ft(n),i=G(e.cells,t),l=G(e.cells,o),u=m(mo,ve(le(i),fe(i))),c=N(l)!==Pe||a===xe||a===u;return z(e,t,0),a===xe?z(e,o,So(i)):z(e,o,0),Er(e),l!==0&&(Pr(e,l,o),N(l)===Pe&&Wa(e,i)),a!==xe&&(r===ln?z(e,a,Yn(i,0,Pe)):(z(e,a,So(i)),r===Nn&&Va(e,fe(i)))),c}s(pc,"applyDemonAction");function bc(e,n){let t=qe(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o);z(e,o,0),z(e,t,So(r)),Pr(e,a,o)}s(bc,"applyBombAttack");function hc(e,n){let t=_e(n),o=ft(n),r=jt(n),a=G(e.cells,t),i=G(e.cells,o),l=L(a);if(Er(e),z(e,t,0),z(e,o,a),i!==0){let u=j(a);if(u===X){let c=j(i);c===ee?(l!==0&&z(e,t,Tn(l)),z(e,o,Yn(a,L(i),0))):c===ue&&Mr(e,a,o,r)}else u===ee?z(e,o,Yn(i,l,0)):u===ue&&Mr(e,i,o,r)}l!==0&&cn(H(e.squares,o))&&vr(e,o,l)}s(hc,"applySpiritAction");function wr(e){let n=dr(e.whiteScore,e.blackScore);return n===void 0?-1:en(n)}s(wr,"positionWinner");function za(e){return Io(e.firstTurn,e.actionsUsed,m(e.potions,e.active))}s(za,"canUseAction");function Ha(e,n){return m(e.freeMana,e.active)===0?!1:Ar(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,m(e.potions,e.active),n!==0,!0)}s(Ha,"manaStartsAllowed");function pt(e,n){if(!lt(H(e.squares,n)))return!1;let t=G(e.cells,n);return t===0||j(t)===X&&le(t)===Me&&L(t)===0&&N(t)===0}s(pt,"manaMoveAllowed");function yc(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=m(e.manaIndices,t),r=G(e.cells,o);if(j(r)!==ee||L(r)!==n)continue;let a=m(me.starts,o),i=m(me.counts,o);for(let l=0;l<i;l+=1){let u=m(me.list,a+l);if(pt(e,u))return!0}}return!1}s(yc,"hasMovableFreeRegularMana");function kc(e){let t=!(!e.firstTurn&&Dn(e.firstTurn,e.manaMoves)&&!yn(e.monsMoves))||m(e.freeMana,e.active)!==0&&yc(e);return mr(e.firstTurn,e.monsMoves,e.manaMoves,t)}s(kc,"shouldAdvanceTurn");function gc(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let t=0;t<hn;t+=1){let o=m(e.monLocations,ve(t,n));if(o<0)continue;let r=G(e.cells,o),a=de(r);a===0||L(r)!==0||N(r)!==0||z(e,o,ut(le(r),fe(r),a-1,L(r),N(r)))}}s(gc,"advanceTurn");function Qa(e,n){let t=e,o=mt(n),r=!0;switch(o){case At:Ac(t,n);break;case Eo:mc(t,n);break;case Cr:fc(t,n);break;case on:r=pc(t,n);break;case Ln:hc(t,n);break;case Ir:bc(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=wr(t);return a===-1&&kc(t)&&gc(t),r?a:Po}s(Qa,"applyFastMove");function qa(e){switch(e){case P.Bomb:return Pe;case P.Potion:return wa;case P.BombOrPotion:return pe}}s(qa,"consumableCode");function $a(e){return e.kind==="supermana"?ke:en(e.color)===0?Rt:_t}s($a,"manaCode");var Ya=2147483647;function Xa(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>Ya-t||n.blackPotionsCount>Ya-t||n.turnNumber>Number.MAX_SAFE_INTEGER-t)return!1;let o;try{o=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(vn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=Q(a);if(i===void 0)continue;let l=ve(nn[i.kind],en(i.color));if(o[l]!==0)return!1;o[l]=1}try{Mc(e,n)}catch(a){if(wt(a))return!1;throw a}return!0}s(Xa,"tryLoadPosition");function Mc(e,n){let t;try{t=new Uint16Array(121)}catch(r){Oe(r)}let o=n.board.items;for(let r=0;r<121;r+=1){let a=o[r];if(a!==void 0)switch(a.kind){case"mon":t[r]=lo(a.mon,0,0);break;case"mana":t[r]=Tn($a(a.mana));break;case"mon-with-mana":t[r]=lo(a.mon,$a(a.mana),0);break;case"mon-with-consumable":t[r]=lo(a.mon,0,qa(a.consumable));break;case"consumable":t[r]=Oa(qa(a.consumable));break}}e.reset({cells:t,squares:Ao(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:en(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}s(Mc,"loadPosition");function wo(e){return{kind:"location",location:it(e)}}s(wo,"locationInput");function Cc(e){return{kind:"modifier",modifier:e===ln?Z.SelectBomb:Z.SelectPotion}}s(Cc,"modifierInput");function Za(e){let n=mt(e),t=[wo(qe(e)),wo(_e(e))];n===Ln?t.push(wo(ft(e))):n===on&&ft(e)!==xe&&t.push(wo(ft(e)));let o=jt(e);return(o===ln||o===Nn)&&(n===At||n===on||n===Ln)&&t.push(Cc(o)),t}s(Za,"moveToInputs");var To=1e6,Ic=-2147483648,Sc=2147483647,Ec=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor","manaToNearestPool","manaStepQueue1","manaStepQueue2","manaStepQueue3","manaStepQueue4","manaStepQueue5","manaStepWinThreat","drainerTripTurn1","drainerTripTurn2","drainerTripTurn3","drainerTripTurn4","supermanaCarrier","scoreShape10","scoreShape20","scoreShape21","scoreShape30","scoreShape31","scoreShape32","tripGradient","raceHalfTurn","threatMoverScaleSpare","threatMoverScaleFew","tripTwoPointScale"];function Kt(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,t={scoreUnit:0,potion:0,bomb:0,activeMon:0,faintMon:0,faintDrainer:0,faintCooldownStep:0,drainerCloseToMana:0,drainerCloseToOwnPool:0,drainerCloseToSupermana:0,carrierCloseToPool:0,carrierPointBonus:0,carrierScoresThisTurn:0,carrierScoresNextTurn:0,winningCarrier:0,drainerPickupScoresThisTurn:0,manaToOwnerPool:0,manaPointsAttraction:0,manaDrainerControl:0,supermanaDrainerControl:0,monCloseToCenter:0,spiritCloseToEnemy:0,spiritOnOwnBase:0,angelCloseToDrainer:0,angelGuardingDrainer:0,attackerCloseToEnemyDrainer:0,drainerThreatImmediate:0,drainerThreatWalk:0,carrierThreatFactor:0,manaToNearestPool:0,manaStepQueue1:0,manaStepQueue2:0,manaStepQueue3:0,manaStepQueue4:0,manaStepQueue5:0,manaStepWinThreat:0,drainerTripTurn1:0,drainerTripTurn2:0,drainerTripTurn3:0,drainerTripTurn4:0,supermanaCarrier:0,scoreShape10:0,scoreShape20:0,scoreShape21:0,scoreShape30:0,scoreShape31:0,scoreShape32:0,tripGradient:0,raceHalfTurn:0,threatMoverScaleSpare:0,threatMoverScaleFew:0,tripTwoPointScale:0};for(let o of Ec){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-To||r>To)throw new RangeError(`weights.${o} must be a safe integer from -${To} through ${To}`);t[o]=r}return Object.freeze(t)}s(Kt,"normalizeEvalWeights");var gn=Kt({scoreUnit:12e3,potion:240,bomb:1200,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:1600,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:8e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:2100,drainerThreatWalk:720,carrierThreatFactor:2,manaToNearestPool:0,manaStepQueue1:3600,manaStepQueue2:2500,manaStepQueue3:1050,manaStepQueue4:800,manaStepQueue5:800,manaStepWinThreat:8e3,drainerTripTurn1:4200,drainerTripTurn2:2200,drainerTripTurn3:1e3,drainerTripTurn4:400,supermanaCarrier:4e3,scoreShape10:-6824,scoreShape20:-6978,scoreShape21:-3085,scoreShape30:-8259,scoreShape31:-4275,scoreShape32:-1052,tripGradient:400,raceHalfTurn:900,threatMoverScaleSpare:25,threatMoverScaleFew:55,tripTwoPointScale:290}),Or=Kt({...gn,threatMoverScaleSpare:35}),xo=Kt(gn);var ri=.5,Pc="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",Tr;function vc(){if(Tr!==void 0)return Tr;try{let e=new Int16Array(3025),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,o=0,r=0,a=0;for(let i of Pc){if(i==="=")break;let l=n.indexOf(i);if(o=o<<6|l,t+=6,t<8)continue;t-=8;let u=o>>t&255;if(o&=(1<<t)-1,(r&1)===0)a=u;else{let c=a|u<<8;e[r>>1]=c>=32768?c-65536:c}r+=1}return Tr=e,e}catch(e){Oe(e)}}s(vc,"memoizedLearnedProPhaseNumerators");var be=99,we=Math.max(be+1,11),Ja=3,$e=ye+2,Oo=re+1,xr=0,ai=1,Rr=2,Bn=3,ii=3,si=Oo,Mn=6,ei=Mn*2+1,Vt=6,_r=2,ni=12;function kn(e){let n=Fn(we);for(let t=0;t<we;t+=1)n[t]=Math.trunc(e/(t+1));return n}s(kn,"distanceTable");function wc(e){let n=Fn(we),t=e.manaToNearestPool;for(let o=0;o<we;o+=1){let r=o<=1?e.manaStepQueue1:o===2?e.manaStepQueue2:o===3?e.manaStepQueue3:o===4?e.manaStepQueue4:e.manaStepQueue5;n[o]=r+Math.trunc(t/(o+1))}return n}s(wc,"manaStepQueueTable");function Tc(e){let n=Fn($e*$e),t=new Set,o=s((r,a,i)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let l=r*$e+a,u=a*$e+r;if(t.has(l)||t.has(u))throw new RangeError("score shape cells must be written once");t.add(l),t.add(u),n[l]=i,n[u]=-i},"set");o(1,0,e.scoreShape10),o(2,0,e.scoreShape20),o(2,1,e.scoreShape21),o(3,0,e.scoreShape30),o(3,1,e.scoreShape31),o(3,2,e.scoreShape32);for(let r=0;r+1<$e;r+=1)for(let a=0;a<$e;a+=1)if(e.scoreUnit+m(n,(r+1)*$e+a)-m(n,r*$e+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}s(Tc,"scoreShapeTable");function ci(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=1+Math.ceil(t/re);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}s(ci,"drainerTripTable");function Oc(e){let n=ci(e);for(let t=0;t<we;t+=1)n[t]=di(m(n,t),e.tripTwoPointScale,"two-point trip");return n}s(Oc,"twoPointTripTable");function xc(e){let n=Fn(ei);for(let t=0;t<ei;t+=1)n[t]=(t-Mn)*e;return n}s(xc,"raceTable");function Rc(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=t>ni?ni:t;n[t]=o*e}return n}s(Rc,"tripStepTable");function _c(e){let n=Fn(Ja*we);for(let t=0;t<Ja;t+=1){let o=t*we;for(let r=0;r<we;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}s(_c,"manaPointsAttractionTable");function ui(e,n){return n===xr?100:n===Rr?e.threatMoverScaleSpare:e.threatMoverScaleFew}s(ui,"moverScale");function li(e,n,t){let o=e*n;if(!Number.isSafeInteger(o))throw new RangeError(`${t} derived value requires a safe integer product`);return Math.trunc(o/100)}s(li,"scaledSafeInteger");function di(e,n,t){let o=li(e,n,t);if(o<Ic||o>Sc)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}s(di,"scaledInt32");function Dc(e){let n=Fn(2*Bn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1)n[t*Bn+r]=di(e.drainerThreatImmediate*o,ui(e,r),"immediate threat")}return n}s(Dc,"threatImmediateTable");function Lc(e){let n=Nc(2*Bn*Oo);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1){let a=ui(e,r),i=(t*Bn+r)*Oo;for(let l=0;l<Oo;l+=1)n[i+l]=li(Math.trunc(e.drainerThreatWalk*o*(re+1-l)/re),a,"walking threat")}}return n}s(Lc,"threatWalkTable");function Fn(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(Fn,"createInt32Table");function Nc(e){try{return new Float64Array(e)}catch(n){Oe(n)}}s(Nc,"createFloat64Table");function Bc(e,n){let t=Mn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=ye-_r;for(let r=0;r<o;r+=1){let a=e.scoreUnit+m(n,o*$e+r)-m(n,(o-1)*$e+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}s(Bc,"assertRaceStaysMonotone");function Ai(e){let n=Tc(e);return Bc(e,n),{weights:e,learnedPro:e===xo?vc():void 0,manaPointsAttraction:_c(e.manaPointsAttraction),manaToOwnerPool:kn(e.manaToOwnerPool),manaToNearestPool:wc(e),scoreShape:n,drainerTrip:ci(e),drainerTripTwoPoint:Oc(e),race:xc(e.raceHalfTurn),tripStep:Rc(e.tripGradient),carrierCloseToPool:kn(e.carrierCloseToPool),drainerCloseToMana:kn(e.drainerCloseToMana),drainerCloseToOwnPool:kn(e.drainerCloseToOwnPool),drainerCloseToSupermana:kn(e.drainerCloseToSupermana),angelCloseToDrainer:kn(e.angelCloseToDrainer),spiritCloseToEnemy:kn(e.spiritCloseToEnemy),monCloseToCenter:kn(e.monCloseToCenter),attackerCloseToEnemyDrainer:kn(e.attackerCloseToEnemyDrainer),threatImmediate:Dc(e),threatWalk:Lc(e)}}s(Ai,"createEvalTables");var Ro=Ai(gn),ti=new WeakMap;function mi(e){if(e===gn||e===Or||e===xo)return e;if(!Object.isFrozen(e))return Kt(e);let n=ti.get(e);return n===void 0&&(n=Kt(e),ti.set(e,n)),n}s(mi,"memoizedNormalizedEvalWeights");var oi=new WeakMap;function fi(e){if(e===gn)return Ro;let n=oi.get(e);return n===void 0&&(n=Ai(e),oi.set(e,n)),n}s(fi,"memoizedEvalTables");var Cn=1e6,pi=Int32Array.of(0,10,110,120);function Fc(e,n){for(let t=0;t<pi.length;t+=1){let o=m(pi,t);if(Ie(n,o)===1&&pt(e,o))return!0}return!1}s(Fc,"hasAdjacentScoringPool");function Uc(e,n){let t=e.whiteScore>e.blackScore?e.whiteScore:e.blackScore,o=(t<ye?t:ye-1)*605,r=e.monLocations,a=0,i=r[0]??0;i>=0&&(a+=n[o+i]??0);let l=r[1]??0;l>=0&&(a-=n[o+120-l]??0);let u=o+121,c=r[2]??0;c>=0&&(a+=n[u+c]??0);let A=r[3]??0;A>=0&&(a-=n[u+120-A]??0);let d=u+121,f=r[4]??0;f>=0&&(a+=n[d+f]??0);let h=r[5]??0;h>=0&&(a-=n[d+120-h]??0);let p=d+121,k=r[6]??0;k>=0&&(a+=n[p+k]??0);let g=r[7]??0;g>=0&&(a-=n[p+120-g]??0);let w=p+121,v=r[8]??0;v>=0&&(a+=n[w+v]??0);let I=r[9]??0;return I>=0&&(a-=n[w+120-I]??0),a*ri}s(Uc,"learnedProResidual");var Dr=new WeakMap,Wt,bt;function jc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(jc,"sameSquareContent");function Gc(e){try{let n=new Uint8Array(14641).fill(be),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let i=0;i<121;i+=1){let l=m(On.starts,i),u=m(On.counts,i);for(let d=0;d<121;d+=1){let f=be;for(let h=0;h<u;h+=1){let p=m(On.list,l+h);if(H(e,p)>=ce)continue;let k=Ie(d,p);k<f&&(f=k)}n[i*121+d]=f}t[i]=r.length;let c=m(xn.starts,i),A=m(xn.counts,i);for(let d=0;d<A;d+=1){let f=m(xn.list,c+d);if(H(e,f)>=ce)continue;let h=bo(i,f),p=H(e,h);p===tn||p>=ce||(r.push(f),a.push(h))}o[i]=r.length-m(t,i)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Oe(n)}}s(Gc,"buildAttackTables");function Kc(e){if(e===Wt&&bt!==void 0)return bt;let n=Dr.get(e);if(n!==void 0)return Wt=e,bt=n,n;if(bt!==void 0&&jc(Wt,e)){let o=bt;return Dr.set(e,o),Wt=e,o}let t=Gc(e);return Dr.set(e,t),Wt=e,bt=t,t}s(Kc,"attackTablesFor");function Vc(e,n,t,o){let r=e.cells;if(!ct(r[n]??0))return be;let a=t^1,i=be,l=Kc(e.squares);for(let u=0,c=a;u<hn;u+=1,c+=ae){let A=e.monLocations[c]??-1;if(A<0)continue;let d=r[A]??0;if(j(d)!==X)continue;let f=N(d);if(f===Pe){let k=Ie(A,n)-3,g=k<0?0:k;if(g===0)return 0;g<i&&(i=g);continue}if(u!==Nt&&u!==Dt||o||de(d)!==0||f!==0||L(d)!==0)continue;if(u===Nt){let k=l.mysticSteps[n*121+A]??0;if(k===0)return 0;k<i&&(i=k);continue}let h=l.demonStarts[n]??0,p=l.demonCounts[n]??0;for(let k=0;k<p;k+=1){let g=l.demonBetween[h+k]??0;if(g!==A&&r[g]!==0)continue;let w=Ie(A,l.demonOrigins[h+k]??0);if(w===0)return 0;w<i&&(i=w)}}return i}s(Vc,"estimatedAttackSteps");function bi(e,n,t=0){let o=n.weights,r=e.cells,a=e.squares,i=e.monLocations,l=e.manaIndices,u=e.potions,c=(e.whiteScore-e.blackScore)*o.scoreUnit+(n.scoreShape[e.whiteScore*$e+e.blackScore]??0)+((u[0]??0)-(u[1]??0))*o.potion,A=i[Me*ae]??0,d=i[Me*ae+1]??0,f=A>=0&&de(r[A]??0)===0,h=d>=0&&de(r[d]??0)===0,p=be,k=be,g=be,w=be,v=be,I=be,T=re-e.monsMoves,S=t!==0,C=ye-e.whiteScore,E=ye-e.blackScore,_=0,U=Vt,R=Vt,Se=Vt,ge=Vt,Ae=!1,mn=!1;if(S){if(A>=0){let O=r[A]??0;Ae=de(O)<=1&&L(O)===0&&N(O)===0}if(d>=0){let O=r[d]??0;mn=de(O)<=1&&L(O)===0&&N(O)===0}}let ie=0,Ke=0,Xe=!1,Vn=!1,De=0,Le=0,Qo=0,qo=0;for(let O=0;O<e.manaCount;O+=1){let K=l[O]??0,Ze=r[K]??0;if(j(Ze)!==ee)continue;let q=L(Ze),Te=f?Ie(A,K):be,$=h?Ie(d,K):be;Te<p&&(p=Te),$<k&&(k=$);let oe=un[K]??0;if(f){let B=Te+oe;q===Rt&&B<g?g=B:q!==Rt&&B<v&&(v=B)}if(h){let B=$+oe;q===_t&&B<w?w=B:q!==_t&&B<I&&(I=B)}if(S){let B=!1;if(q!==ke&&oe<=1&&Fc(e,K)&&(B=!0,q-1===0?De<2&&(De+=1):Le<2&&(Le+=1)),Ae&&(f?Te:Ie(A,K))+oe<=re){let F=je(q,0);F>ie?(ie=F,Xe=B&&q-1===0):F===ie&&!(B&&q-1===0)&&(Xe=!1)}if(mn&&(h?$:Ie(d,K))+oe<=re){let F=je(q,1);F>Ke?(Ke=F,Vn=B&&q-1===1):F===Ke&&!(B&&q-1===1)&&(Vn=!1)}}let Ne=$-Te;if(Ne>4&&(Ne=4),Ne<-4&&(Ne=-4),o.manaPointsAttraction!==0){let B=n.manaPointsAttraction;f&&(c+=B[je(q,0)*we+Te]??0),h&&(c-=B[je(q,1)*we+$]??0)}if(q===ke)c+=o.supermanaDrainerControl*Ne;else{let B=q-1,he=B===0?1:-1;c+=he*(n.manaToOwnerPool[ur[B*121+K]??0]??0),c+=he*(n.manaToNearestPool[oe]??0),c+=o.manaDrainerControl*Ne,oe<=2&&(B===0?C:E)<=1&&(_|=B===0?1:2),B===0?oe<U&&(U=oe):oe<R&&(R=oe)}}_!==0&&(c+=o.manaStepWinThreat*(((_&1)===0?0:1)-((_&2)===0?0:1)));for(let O=0;O<ae;O+=1){let K=O===0?1:-1,Ze=O^1;for(let q=0,Te=O;q<hn;q+=1,Te+=ae){let $=i[Te]??0;if($<0)continue;let oe=r[$]??0;if(j(oe)!==X)continue;let Ne=de(oe);Ne!==0&&(c-=K*((q===Me?o.faintDrainer:o.faintMon)+o.faintCooldownStep*Ne));let B=a[$]??0;Ne===0&&B<ce&&(c+=K*o.activeMon);let he=L(oe);if(he!==0){let F=je(he,O),an=un[$]??0;c+=K*((n.carrierCloseToPool[an]??0)+F*o.carrierPointBonus),he===ke&&(c+=K*o.supermanaCarrier),O===e.active&&an<=T?c+=K*o.carrierScoresThisTurn*F:O!==e.active&&an<=re&&(c+=K*o.carrierScoresNextTurn*F,S&&(O===0?F>Qo&&(Qo=F):F>qo&&(qo=F)));let Ve=O===0?e.whiteScore:e.blackScore;F>=ye-Ve&&(c+=K*o.winningCarrier)}else N(oe)===Pe&&(c+=K*o.bomb);if(Ne===0)if(q===Me){let F=0,an=O===0?p:k,Ve=O===0?g:w,Je=O===0?v:I,$o=Ve<Je?Ve:Je,fn=O===e.active?T:re,Xr=n.drainerTrip,eo=he!==0?un[$]??0:N(oe)!==0?be:Ve;he===0&&N(oe)===0&&Je<be&&(Ve>=be||(n.drainerTripTwoPoint[Je>fn?Je-fn:0]??0)-(n.tripStep[Je]??0)>(n.drainerTrip[Ve>fn?Ve-fn:0]??0)-(n.tripStep[Ve]??0))&&(Xr=n.drainerTripTwoPoint,eo=Je),F-=n.tripStep[eo]??0;let Zr=eo>fn?eo-fn:0,no=1+((Zr+re-1)/re|0);O===0?no<Se&&(Se=no):no<ge&&(ge=no),F+=Xr[Zr]??0,F+=n.drainerCloseToMana[an]??0,F+=n.drainerCloseToOwnPool[ur[O*121+$]??0]??0,F+=n.drainerCloseToSupermana[Ie($,st)]??0,he===0&&N(oe)===0&&O===e.active&&$o<=T&&(F+=o.drainerPickupScoresThisTurn),c+=K*F;let Jr=Gt(e,O,$),Yo=Vc(e,$,O,Jr),ds=he!==0,As=O!==e.active||T===0?xr:T>=ii?Rr:ai,ea=(ds?Bn:0)+As;Yo===0?c-=K*(n.threatImmediate[ea]??0):Yo<=re&&(c-=K*(n.threatWalk[ea*si+Yo]??0)),Jr&&(c+=K*o.angelGuardingDrainer)}else if(q===Lt){let F=O===0?A:d;F>=0&&(c+=K*(n.angelCloseToDrainer[Ie($,F)]??0))}else if(q===uo){let F=be;for(let an=0,Ve=Ze;an<hn;an+=1,Ve+=ae){let Je=i[Ve]??0;if(Je<0)continue;let $o=r[Je]??0;if(de($o)!==0)continue;let fn=Ie($,Je);fn<F&&(F=fn)}c+=K*(n.spiritCloseToEnemy[F]??0),B>=ce&&(c-=K*o.spiritOnOwnBase)}else{c+=K*(n.monCloseToCenter[xa[$]??0]??0);let F=Ze===0?A:d,an=Ze===0?f:h;F>=0&&an&&(c+=K*(n.attackerCloseToEnemyDrainer[Ie($,F)]??0))}}}if(o.raceHalfTurn!==0&&(C<E?C:E)<=_r){let O=e.manaMoves>0?1:0,K=U+(e.active===0?O:0),Ze=R+(e.active===1?O:0),q=Se<K?Se:K,$=(ge<Ze?ge:Ze)*2+(e.active===1?0:1)-(q*2+(e.active===0?0:1)),oe=$>Mn?Mn:$<-Mn?-Mn:$;c+=n.race[oe+Mn]??0}if(S){let O=e.active^1,K=O===0?1:-1,Ze=O===0?ie:Ke,q=O===0?Qo:qo,Te=O===0?De:Le,$=Te>0,oe=O===0?Xe:Vn,Ne=Te>=2||Te===1&&!oe,B=Ze;B>0&&Ne&&(B+=1);let he=q;he>0&&$&&(he+=1),he>B&&(B=he),$&&B<1&&(B=1);let F=O===0?e.whiteScore:e.blackScore;B>0&&F+B>=ye&&(c+=K*t)}return n.learnedPro!==void 0&&(c+=Uc(e,n.learnedPro)),c}s(bi,"evaluateWithTables");var In=704,_o=1073741824;function Un(e,n){return n?e+_o:e}s(Un,"encodeGeneratedMoves");function zt(e){return e>=_o?e-_o:e}s(zt,"generatedMoveCount");function Ht(e){return e>=_o}s(Ht,"generatedMovesHadRawStartOption");function Lr(e,n){return j(e)===X&&fe(e)!==n&&de(e)===0}s(Lr,"isEnemyAwakeMon");function Nr(e){let n=131072;return L(e)!==0&&(n+=1<<20),le(e)===Me&&(n+=1<<19),n}s(Nr,"damagingAttackKey");function Wc(e,n,t){let o=G(e.cells,t),r=H(e.squares,t),a=j(n),i=a===X,l=L(n),u=N(n),c=o===0?-1:j(o),A=c===X&&(L(o)!==0||N(o)!==0);if(c===X)if(A){if(a!==ue||u!==pe)return 0}else{if(i)return 0;if(a===ee){if(le(o)!==Me||de(o)!==0)return 0}else if(u!==pe)return 0}else if(c===ee){if(!i||le(n)!==Me||de(n)!==0)return 0}else if(c===ue&&(N(o)!==pe||!i))return 0;if(r>=ce){if(!i||Bt(r)!==le(n)||Ft(r)!==fe(n)||l!==0||u!==0)return 0}else if(r===tn){let d=c===ee&&L(o)===ke,f=i&&le(n)===Me;if(!(l===ke||l===0&&f&&(o===0||d)||f&&d))return 0}return o===0?1:i?l===0&&u===0?c===ue?N(o)===pe?2:0:1:l!==0?c===ue?N(o)===pe?1:0:1:c!==ue||N(o)!==pe?0:1:a===ee?c!==X||A?0:1:c!==X?0:A?u===pe?1:0:2}s(Wc,"spiritDestinationOptionCount");function zc(e,n,t,o,r,a){let i=r,l=!1,u=le(t),c=fe(t),A=L(t),d=N(t),f=e.active,h=e.cells,p=e.squares,k=me.list,g=un[n]??0,w=u===Me?1024:0,v=n<<3|xe<<17,I=me.starts[n]??0,T=me.counts[n]??0;if(A!==0){for(let S=0;S<T;S+=1){let C=k[I+S]??0,E=h[C]??0,_=p[C]??0,U=E===0?-1:j(E);if(U===X||U!==ee&&U!==ue&&!lt(_)&&(_!==tn||A!==ke)||(l=!0,U===ue&&N(E)!==pe))continue;let R=0;cn(_)&&(R+=(1<<21)+je(A,f)*(1<<18)),U===ee?R+=65536+je(L(E),f)*512:U===ue&&(R+=16384),a[i]=R+(g-(un[C]??0))*2048+4096,o[i]=v|C<<10|Ge<<24,i+=1}return Un(i,l)}if(d!==0){for(let S=0;S<T;S+=1){let C=k[I+S]??0,E=h[C]??0,_=E===0?-1:j(E);if(_===ue){if(l=!0,N(E)!==pe)continue;a[i]=w+16384}else{if(_!==-1||!lt(p[C]??0))continue;l=!0,a[i]=w}o[i]=v|C<<10|Ge<<24,i+=1}return Un(i,l)}if(u===Me){for(let S=0;S<T;S+=1){let C=k[I+S]??0,E=h[C]??0,_=p[C]??0,U=E===0?-1:j(E);if(U===X)continue;if(_>=ce){if(Bt(_)!==Me||Ft(_)!==c)continue}else if(_===tn&&E!==0&&(U!==ee||L(E)!==ke))continue;if(l=!0,U===ue&&N(E)!==pe)continue;let R=1024;U===ee?R+=65536+je(L(E),f)*512:U===ue&&(R+=16384),U===ue&&N(E)===pe?(a[i]=R,o[i]=v|C<<10|ln<<24,i+=1,a[i]=R,o[i]=v|C<<10|Nn<<24,i+=1):(a[i]=R,o[i]=v|C<<10|Ge<<24,i+=1)}return Un(i,l)}for(let S=0;S<T;S+=1){let C=k[I+S]??0,E=h[C]??0,_=p[C]??0,U=E===0?-1:j(E);if(!(U===X||U===ee)){if(_>=ce){if(Bt(_)!==u||Ft(_)!==c)continue}else if(_===tn)continue;if(l=!0,U===ue){if(N(E)!==pe)continue;a[i]=16384,o[i]=v|C<<10|ln<<24,i+=1,a[i]=16384,o[i]=v|C<<10|Nn<<24,i+=1}else a[i]=0,o[i]=v|C<<10|Ge<<24,i+=1}}return Un(i,l)}s(zc,"generateMonMoves");function Hc(e,n,t,o,r){let a=e.active,i=o,l=!1,u=m(On.starts,n),c=m(On.counts,n);for(let A=0;A<c;A+=1){let d=m(On.list,u+A),f=G(e.cells,d);Lr(f,a)&&(Gt(e,a^1,d)||(l=!0,ct(f)&&(r[i]=Nr(f),t[i]=Re(Cr,n,d,xe,Ge),i+=1)))}return Un(i,l)}s(Hc,"generateMysticMoves");function Qc(e,n,t,o,r){let a=e.active,i=o,l=!1,u=Dt,c=a,A=m(xn.starts,n),d=m(xn.counts,n);for(let f=0;f<d;f+=1){let h=m(xn.list,A+f),p=G(e.cells,h);if(!Lr(p,a)||Gt(e,a^1,h))continue;let k=bo(n,h);if(G(e.cells,k)!==0)continue;let g=H(e.squares,k);if(g===tn||g>=ce||(l=!0,!ct(p)))continue;let w=Nr(p),v=H(e.squares,h),I=L(p);if(!(!(N(p)===Pe)&&(I!==0&&I!==ke||v===tn||v>=ce))){r[i]=w,t[i]=Re(on,n,h,xe,Ge),i+=1;continue}let C=i,E=m(me.starts,h),_=m(me.counts,h);for(let U=0;U<_;U+=1){let R=m(me.list,E+U),Se=G(e.cells,R),ge=Se===0?-1:j(Se);if(ge!==-1&&ge!==ue)continue;let Ae=H(e.squares,R);(lt(Ae)||Ae>=ce&&Bt(Ae)===u&&Ft(Ae)===c)&&(ge===ue?N(Se)===pe?(r[i]=w,t[i]=Re(on,n,h,R,ln),i+=1,r[i]=w,t[i]=Re(on,n,h,R,Nn),i+=1):(r[i]=w,t[i]=Re(on,n,h,R,Sr),i+=1):(r[i]=w,t[i]=Re(on,n,h,R,Ge),i+=1))}i===C&&(r[i]=w,t[i]=Re(on,n,h,xe,Ge),i+=1)}return Un(i,l)}s(Qc,"generateDemonMoves");function qc(e,n,t,o,r){let a=o,i=!1,l=e.active,u=m(fo.starts,n),c=m(fo.counts,n);for(let A=0;A<c;A+=1){let d=m(fo.list,u+A),f=G(e.cells,d);if(f===0||j(f)===X&&de(f)!==0)continue;i=!0;let h=L(f),p=j(f)===ee,k=H(un,d),g=(1<<21)+je(h,l)*(1<<18),w=m(me.starts,d),v=m(me.counts,d);for(let I=0;I<v;I+=1){let T=m(me.list,w+I),S=Wc(e,f,T);if(S===0)continue;let C=0;h!==0&&cn(H(e.squares,T))?C+=8192+g:p&&$c(e,T,k,l)&&(C+=40960),S===2?(r[a]=C,t[a]=Re(Ln,n,d,T,ln),a+=1,r[a]=C,t[a]=Re(Ln,n,d,T,Nn),a+=1):(r[a]=C,t[a]=Re(Ln,n,d,T,Ge),a+=1)}}return Un(a,i)}s(qc,"generateSpiritMoves");function $c(e,n,t,o){if(H(un,n)<t)return!0;let r=G(e.cells,n);return j(r)===X&&le(r)===Me&&fe(r)===o&&de(r)===0}s($c,"advancesMana");function Yc(e,n,t,o,r){let a=e.active,i=o,l=!1,u=m(po.starts,n),c=m(po.counts,n);for(let A=0;A<c;A+=1){let d=m(po.list,u+A),f=G(e.cells,d);Lr(f,a)&&(l=!0,ct(f)&&(r[i]=Nr(f),t[i]=Re(Ir,n,d,xe,Ge),i+=1))}return Un(i,l)}s(Yc,"generateBombMoves");function Xc(e,n,t,o,r){let a=o,i=m(me.starts,n),l=m(me.counts,n);for(let u=0;u<l;u+=1){let c=m(me.list,i+u),A=H(e.squares,c);pt(e,c)&&(r[a]=cn(A)?(1<<21)+(1<<18):16,t[a]=Re(Eo,n,c,xe,Ge),a+=1)}return a}s(Xc,"generateManaMoves");function Zc(e,n,t,o,r){let a=o;if(H(un,n)!==1)return a;let i=m(me.starts,n),l=m(me.counts,n);for(let u=0;u<l;u+=1){let c=m(me.list,i+u),A=H(e.squares,c);!cn(A)||!pt(e,c)||(r[a]=(1<<21)+(1<<18),t[a]=Re(Eo,n,c,xe,Ge),a+=1)}return a}s(Zc,"generateWinningManaMoves");var Jc=new Int32Array(In);function Br(e,n,t=Jc){let o=e.active,r=yn(e.monsMoves),a=za(e),i=0,l=0;for(let u=0;u<hn;u+=1){let c=m(e.monLocations,ve(u,o));if(c<0)continue;let A=G(e.cells,c);if(j(A)!==X)continue;let d=!1,f=L(A),h=N(A),p=f!==0||h!==0;if(!(!p&&de(A)!==0)){if(r){let k=zc(e,c,A,n,i,t);i=zt(k),d||=Ht(k)}if(p){if(h===Pe){let k=Yc(e,c,n,i,t);i=zt(k),d||=Ht(k)}}else if(H(e.squares,c)<ce&&a){if(u===Nt){let g=Hc(e,c,n,i,t);i=zt(g),d||=Ht(g)}else if(u===Dt){let g=Qc(e,c,n,i,t);i=zt(g),d||=Ht(g)}else if(u===uo){let g=qc(e,c,n,i,t);i=zt(g),d||=Ht(g)}}d&&(l+=1)}}if(Ha(e,l)){let u=o+1;for(let c=0;c<e.manaCount;c+=1){let A=m(e.manaIndices,c),d=G(e.cells,A);j(d)===ee&&L(d)===u&&(i=Xc(e,A,n,i,t))}}else if(m(e.freeMana,o)!==0&&Dn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=ye){let u=o+1;for(let c=0;c<e.manaCount;c+=1){let A=m(e.manaIndices,c),d=G(e.cells,A);j(d)===ee&&L(d)===u&&(i=Zc(e,A,n,i,t))}}if(i>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${i} moves for ${n.length} slots`);return i}s(Br,"generateMoves");var dn=48,Do=dn-2,jn=Cn-dn-1,Lo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),hi=new WeakMap;function gi(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return yi(e);let t=hi.get(e);return t===void 0&&(t=yi(e),hi.set(e,t)),t}s(gi,"memoizedSearchLimits");function yi(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,t=n.maxDepth;if(!Number.isSafeInteger(t)||t<0||t>Do)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Do}`);let o=n.maxNodes;if(!Number.isSafeInteger(o)||o<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:t,maxNodes:o,tuning:r===void 0?Lo:eu(r)})}s(yi,"normalizeSearchLimits");function eu(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:ki(n,"lateMoveReduction"),lateMoveIndex:Sn(n,"lateMoveIndex",In),lateMoveDeepIndex:Sn(n,"lateMoveDeepIndex",In),moveCountPruning:ki(n,"moveCountPruning"),moveCountDepth:Sn(n,"moveCountDepth",Do),moveCountBase:Sn(n,"moveCountBase",In),moveCountFactor:Sn(n,"moveCountFactor",In),futilityMargin:Sn(n,"futilityMargin",jn),aspirationDelta:Sn(n,"aspirationDelta",jn),aspirationMinDepth:Sn(n,"aspirationMinDepth",Do),winsNextTurnThreat:Sn(n,"winsNextTurnThreat",jn)})}s(eu,"normalizeSearchTuning");function ki(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}s(ki,"normalizedTuningBoolean");function Sn(e,n,t){let o=e[n];if(typeof o!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(o)||o<0||o>t)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${t}`);return o}s(Sn,"normalizedTuningInteger");var Xn=1<<20,Qt=new Int32Array(0);function qt(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(qt,"allocateTranspositionPart");var No=class{static{s(this,"TranspositionTable")}keyLo=Qt;keyHi=Qt;score=Qt;info=Qt;move=Qt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=Xn-1,!0;if(n())return!1;let t=qt(Xn);if(n())return!1;let o=qt(Xn);if(n())return!1;let r=qt(Xn);if(n())return!1;let a=qt(Xn);if(n())return!1;let i=qt(Xn);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=Xn-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};var nu=16,$t=1<<nu,tu=$t-1,ou=1<<30,Mi=0,Ci=1,Ii=2,ru=3,Si=4194303,au=2047,iu=32768,Ei=1<<28,Pi=1<<24,vi=1<<23,Gn=Cn*2,wi=s(()=>!1,"NO_TIMEOUT"),Ri=ae,_i=re+1,Di=wn+1,Li=Ue+1,Ni=2,Fr=4,su=Ri*_i*Di*Li*Ni*Fr*Fr;if(yo.length!==lr.length||yo.length<su)throw new RangeError("fast scalar hash table is too small for the configured state space");function Ur(e,n,t,o,r,a,i,l,u){if(o===0){let I=0,T=-2147483648,S=1,C=-2147483648,E=-2147483648,_=1,U=-2147483648;for(let R=0;R<t;R+=1){let Se=m(e,R),ge=m(n,R);if(Se===r)ge+=Ei;else if(Se===a)ge+=Pi;else if(Se===i)ge+=vi;else{let mn=m(l,u+qe(Se)*121+_e(Se));ge+=mn>8191?8191:mn}n[R]=ge;let Ae=m(n,R);if(R===0){E=Ae,T=Ae;continue}Ae>T?(T=Ae,I=R,U>=E?(C=U,S=_):(C=E,S=R)):(R===1||Ae>C)&&(C=Ae,S=R),(R===1||Ae>U)&&(U=Ae,_=R)}if(I!==0){let R=m(e,0);e[0]=m(e,I),e[I]=R,n[I]=m(n,0),n[0]=T}if(t>1&&S!==1){let R=m(e,1);e[1]=m(e,S),e[S]=R,n[S]=m(n,1),n[1]=C}return t}let c=qe(o),A=_e(o),d=0,f=0,h=-2147483648,p=1,k=-2147483648,g=-2147483648,w=1,v=-2147483648;for(let I=0;I<t;I+=1){let T=m(e,I);if(mt(T)===At&&T<o){let E=qe(T),_=_e(T);if(E!==c&&E!==A&&_!==c&&_!==A)continue}let S=m(n,I);if(T===r)S+=Ei;else if(T===a)S+=Pi;else if(T===i)S+=vi;else{let E=m(l,u+qe(T)*121+_e(T));S+=E>8191?8191:E}d!==I&&(e[d]=T),n[d]=S;let C=m(n,d);d===0?(g=C,h=C):(C>h?(h=C,f=d,v>=g?(k=v,p=w):(k=g,p=d)):(d===1||C>k)&&(k=C,p=d),(d===1||C>v)&&(v=C,w=d)),d+=1}if(d===0)return Ur(e,n,t,0,r,a,i,l,u);if(f!==0){let I=m(e,0);e[0]=m(e,f),e[f]=I,n[f]=m(n,0),n[0]=h}if(d>1&&p!==1){let I=m(e,1);e[1]=m(e,p),e[p]=I,n[p]=m(n,1),n[1]=k}return d}s(Ur,"orderMoves");var Bo=class{static{s(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(dn*2);#a=new Int32Array(ae*121*121);#b=new Int32Array(dn+1);#s=new Int32Array($t);#h=new Int32Array($t);#p=new Int32Array($t);#A=new Float64Array($t);#c=0;#y;#k=0;#g;#u=Ro;#S=Lo;#E=0;#m=0;#P=0;#l=!1;#M=!1;#i=0;#C=wi;constructor(){this.#o=new No;for(let n=0;n<=dn;n+=1)this.#e.push(new vo),this.#n.push(new Int32Array(In)),this.#t.push(new Int32Array(In))}get root(){return Ce(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=gn){let r=gi(n),a=mi(o);if(this.#M=!1,this.#i=0,wr(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#u=fi(a);let i=r.tuning;this.#S=i,this.#E=i.winsNextTurnThreat;let l=!Ka(this.#g,this.root.squares);(a!==this.#y||i.winsNextTurnThreat!==this.#k||l)&&(this.#y=a,this.#k=i.winsNextTurnThreat,this.#g=this.root.squares,this.#c>=ou&&(this.#c=0,this.#p.fill(0)),this.#c+=1),this.#m=0,this.#P=r.maxNodes,this.#l=!1,this.#C=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let u=0,c=0,A=0;for(let d=1;d<=r.maxDepth;d+=1){if(d===2){if(this.#m>=this.#P||!this.#o.prepare(this.#C)){this.#l=!0;break}this.#_()}let f=-Gn,h=Gn;i.aspirationDelta>0&&A>0&&d>=i.aspirationMinDepth&&(f=c-i.aspirationDelta,h=c+i.aspirationDelta);let p=this.#w(d,u,f,h),k=0;for(;!this.#d()&&p.move!==0&&(p.score<=f||p.score>=h)&&(f>-Gn||h<Gn);){k+=1;let g=i.aspirationDelta*(1<<k);p.score<=f&&(f=k>=2?-Gn:p.score-g),p.score>=h&&(h=k>=2?Gn:p.score+g),p=this.#w(d,p.move,f,h)}if(p.move===0)break;if(this.#d()){(A===0||this.#u.learnedPro!==void 0&&p.verifiedChallenger===!0&&!this.#M)&&(u=p.move,c=p.score);break}if(u=p.move,c=p.score,A=d,!p.selective&&c>=Cn-dn)break}return{move:u,score:c,depth:A,nodes:this.#m,supported:!this.#M}}finally{this.#o.deactivate(),this.#u=Ro,this.#S=Lo,this.#E=0,this.#C=wi}}#_(){this.#o.generation+=1,this.#o.generation>Si&&this.#o.clear()}#w(n,t,o,r){let a=Ce(this.#e,0),i=Ce(this.#n,0),l=Br(a,i,Ce(this.#t,0));if(l===0)return{move:0,score:0,selective:!1};Ur(i,Ce(this.#t,0),l,0,t,m(this.#r,0),m(this.#r,1),this.#a,a.active*121*121);let u=Ce(this.#t,0),c=o,A=0,d=-Gn,f=!1,h=!1;for(let p=0;p<l;p+=1){p>=2&&this.#R(i,u,p,l);let k=m(i,p),g=this.#T(a,k,0),w,v=this.#i,I,T=p===0;if(p===0?(w=this.#f(a,g,0,n-1,c,r),I=this.#i!==v):(w=this.#f(a,g,0,n-1,c,c+1),I=this.#i!==v,w>c&&!this.#d()&&(v=this.#i,w=this.#f(a,g,0,n-1,c,r),T=!0,I=this.#i!==v)),this.#d()||(w>d&&(d=w,A=k,f=I,h=T&&t!==0&&m(i,0)===t&&k!==t,w>c&&(c=w)),c>=r))break}return A===0&&(A=m(i,0),d=0,f=!0),{move:A,score:d,selective:f,verifiedChallenger:h}}#T(n,t,o){let r=Ce(this.#e,o+1);r.copyFrom(n),this.#b[o]=t;let a=Qa(r,t);return a===Po&&(this.#M=!0,this.#l=!0),a}#f(n,t,o,r,a,i){let l=Ce(this.#e,o+1);return t===Po?0:t!==-1?t===n.active?Cn-o:-(Cn-o):l.active===n.active?this.#O(r,o+1,a,i):-this.#O(r,o+1,-i,-a)}#O(n,t,o,r){if(!this.#v())return 0;let a=Ce(this.#e,t);if(t>=dn-2)return this.#I(a);if(n<=0)return this.#I(a);let i=o,l=this.#D(a,t),u=Ti(a),c=Oi(a,u,l),A=xi(a,u,l),d=this.#o,f=(c^A*3)&d.mask,h=0,p=m(d.info,f),k=m(d.keyLo,f)===c&&m(d.keyHi,f)===A&&(p>>>8&Si)===d.generation;if(k&&(h=m(d.move,f),(p>>2&63)>=n)){let Ke=m(d.score,f)/2,Xe=p&3;if(Xe===Mi||Xe===Ci&&Ke>=r||Xe===Ii&&Ke<=i)return Ke}let g=this.#S,w=Ce(this.#n,t),v=Br(a,w,Ce(this.#t,t));if(v===0)return this.#I(a,c,A);let I=Ce(this.#t,t);v=Ur(w,I,v,l,h,m(this.#r,t*2),m(this.#r,t*2+1),this.#a,a.active*121*121);let T=v;if(g.moveCountPruning&&n<=g.moveCountDepth){let ie=g.moveCountBase+g.moveCountFactor*n;ie<T&&(T=ie)}let S=n<=2;if(S&&!this.#v()||this.#d())return 0;let C=!1,E=!1,_=-Gn,U=0,R=this.#i;for(let ie=0;ie<v;ie+=1){ie>=2&&this.#R(w,I,ie,v);let Ke=m(w,ie),Xe=m(I,ie)>=iu;if(!Xe&&U!==0){let Le=ie>=T;if(!Le&&S&&(C||(E=this.#x(a,c,A)+g.futilityMargin*n<=o,C=!0),Le=E),Le){this.#i+=1;break}}let Vn=this.#T(a,Ke,t),De;if(ie===0)De=this.#f(a,Vn,t,n-1,i,r);else{let Le=0;g.lateMoveReduction&&!Xe&&n>=3&&ie>=g.lateMoveIndex&&(Le=ie>=g.lateMoveDeepIndex?2:1,Le>=n&&(Le=n-1)),De=this.#f(a,Vn,t,n-1-Le,i,i+1),!this.#d()&&De>i&&(Le>0||De<r)&&(De=this.#f(a,Vn,t,n-1,i,r))}if(this.#d())return 0;if(De>_&&(_=De,U=Ke),De>i&&(i=De),i>=r){this.#L(a,Ke,t,n,Xe);break}}if(U===0)return this.#I(a);let ge=this.#i!==R?ru:_>=r?Ci:_<=o?Ii:Mi,Ae=_,mn=n;if(Ae<Cn-dn&&Ae>-Cn+dn){let ie=p>>2&63;(!k||mn>=ie)&&(p===0&&m(d.info,f)===0&&(d.entries+=1),d.keyLo[f]=c,d.keyHi[f]=A,d.score[f]=Ae*2,d.info[f]=d.generation<<8|mn<<2|ge,d.move[f]=U)}return _}#D(n,t){if(t===0)return 0;let o=m(this.#b,t-1);return mt(o)===At&&Ce(this.#e,t-1).active===n.active?o:0}#d(){return this.#l}#v(){return this.#l?!1:this.#m>=this.#P?(this.#l=!0,!1):(this.#m+=1,(this.#m&au)===0&&this.#C()?(this.#l=!0,!1):!0)}#x(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let c=Ti(n);r=Oi(n,c),a=xi(n,c)}let i=(r^a*3)&tu,l;m(this.#p,i)===this.#c&&m(this.#s,i)===r&&m(this.#h,i)===a?l=this.#A[i]??0:(l=bi(n,this.#u,this.#E),this.#s[i]=r,this.#h[i]=a,this.#A[i]=l,this.#p[i]=this.#c);let u=n.active===0?l:-l;return u>jn?jn:u<-jn?-jn:u}#I(n,t,o){return this.#v()?this.#x(n,t,o):0}#L(n,t,o,r,a){if(a)return;let i=o*2;m(this.#r,i)!==t&&(this.#r[i+1]=m(this.#r,i),this.#r[i]=t);let l=n.active*121*121+qe(t)*121+_e(t),u=m(this.#a,l)+r*r;this.#a[l]=u>1<<20?1<<20:u}#R(n,t,o,r){let a=o,i=m(t,o);for(let u=o+1;u<r;u+=1){let c=m(t,u);c>i&&(i=c,a=u)}if(a===o)return;let l=m(n,o);n[o]=m(n,a),n[a]=l,t[a]=m(t,o),t[o]=i}};function Ti(e){let n=m(e.potions,0),t=m(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+Fr*a,a=(e.firstTurn?1:0)+Ni*a,a=e.actionsUsed+Li*a,a=e.manaMoves+Di*a,a=e.monsMoves+_i*a,e.active+Ri*a}s(Ti,"scalarIndex");function Oi(e,n,t=0){return e.hashLo^m(yo,n)^e.whiteScore*2654435761^e.blackScore*2135587861^m(e.potions,0)^Math.imul(t,668265261)}s(Oi,"stateKeyLo");function xi(e,n,t=0){return e.hashHi^m(lr,n)^e.whiteScore*2246822507^e.blackScore*3266489909^m(e.potions,1)^Math.imul(t,374761393)}s(xi,"stateKeyHi");var cu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),uu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),lu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),du=Object.freeze({fast:Object.freeze({budgetMs:50,weights:gn,limits:Object.freeze({maxDepth:40,maxNodes:39936,tuning:uu})}),normal:Object.freeze({budgetMs:150,weights:Or,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:cu})}),pro:Object.freeze({budgetMs:650,weights:xo,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:lu})})});function Au(){return globalThis.performance.now()}s(Au,"systemClock");function Bi(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}s(Bi,"readClock");function mu(){return globalThis.WeakRef}s(mu,"weakRefConstructor");var jr=class{static{s(this,"FastSearcherPool")}#e;run(n){let t=mu(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new Bo}catch(r){if(r instanceof RangeError)return vt;throw r}this.#e=void 0;try{return n(o)}catch(r){if(wt(r))return vt;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},fu=new jr;function Gr(e,n,t=Au){let o=du[n],r=Bi(t)+o.budgetMs,a=!1,i=s(()=>a?!0:(a=Bi(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||i())return{kind:"fallback"};let l;try{l=new vo}catch(c){if(c instanceof RangeError)return{kind:"fallback"};throw c}if(!Xa(l,e,o.limits.maxDepth)||i())return{kind:"fallback"};let u=fu.run(c=>{if(!i()&&(c.root.copyFrom(l),!i()))return c.search(o.limits,i,o.weights)});return u===void 0||wt(u)||!u.supported||u.move===0?{kind:"fallback"}:{kind:"selected",inputs:Za(u.move)}}s(Gr,"selectPackedInputs");function Fi(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}s(Fi,"inputTag");function pu(e,n){let t=Fi(e)-Fi(n);return t!==0?t:e.kind==="location"&&n.kind==="location"?e.location.i-n.location.i||e.location.j-n.location.j:e.kind==="modifier"&&n.kind==="modifier"?er[e.modifier]-er[n.modifier]:0}s(pu,"compareInputs");function bu(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:n}));case"next-input-options":return e.nextInputs.map(({input:n})=>n)}}s(bu,"nextInputs");function Kr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}s(Kr,"applyInputs");function Ui(e){let n=e.fork(),t=[],o=s(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,ir):n.inspectInputGrammar(t,ir);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&Kr(n,t)!==void 0;if(t.length===nt)return!1;let a=bu(r)?.sort(pu);if(a===void 0||a.length===0)return!1;for(let i of a){if(t.push(i),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}s(Ui,"deterministicLegalFallbackInputs");function ji(e,n,t){let o=e.fen(),r=t===void 0?Gr(e,n):Gr(e,n,t),a=r.kind==="selected"?r.inputs:Ui(e),i=Kr(e,a);if(i===void 0&&r.kind==="selected"&&(a=Ui(e),i=Kr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:i,inputFen:at(a)}}s(ji,"suggestMove");function Yt(e){return e===y.White?"w":"b"}s(Yt,"colorFen");function Ye(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case M.Demon:return"e";case M.Drainer:return"d";case M.Angel:return"a";case M.Spirit:return"s";case M.Mystic:return"y"}})();return`${e.color===y.White?n.toUpperCase():n}${e.cooldown}`}s(Ye,"monFen");function hu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=y.White,o=M.Demon;break;case 101:t=y.Black,o=M.Demon;break;case 68:t=y.White,o=M.Drainer;break;case 100:t=y.Black,o=M.Drainer;break;case 65:t=y.White,o=M.Angel;break;case 97:t=y.Black,o=M.Angel;break;case 83:t=y.White,o=M.Spirit;break;case 115:t=y.Black,o=M.Spirit;break;case 89:t=y.White,o=M.Mystic;break;case 121:t=y.Black,o=M.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:zn(o,t,r-48)}s(hu,"parseMonFenAt");function Zn(e){return e.kind==="supermana"?"U":e.color===y.White?"M":"m"}s(Zn,"manaFen");function Gi(e){switch(e){case 77:return tt(y.White);case 109:return tt(y.Black);case 85:return En;default:return}}s(Gi,"parseManaCode");function Ki(e){switch(e){case P.Potion:return"P";case P.Bomb:return"B";case P.BombOrPotion:return"Q"}}s(Ki,"consumableFen");function Vi(e){switch(e){case 80:return P.Potion;case 66:return P.Bomb;case 81:return P.BombOrPotion;default:return}}s(Vi,"parseConsumableCode");function ht(e){switch(e.kind){case"mon":return`${Ye(e.mon)}x`;case"mana":return`xx${Zn(e.mana)}`;case"mon-with-mana":return`${Ye(e.mon)}${Zn(e.mana)}`;case"mon-with-consumable":return`${Ye(e.mon)}${Ki(e.consumable)}`;case"consumable":return`xx${Ki(e.consumable)}`}}s(ht,"itemFen");function Wi(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let l=Gi(o);if(l!==void 0)return sn(l);let u=Vi(o);return u===void 0?void 0:Mt(u)}let r=hu(e,n);if(r===void 0)return;let a=Gi(o);if(a!==void 0)return ot(r,a);let i=Vi(o);return i!==void 0?gt(r,i):o===120?ze(r):void 0}s(Wi,"parseItemFenAt");function yu(e){switch(e.kind){case"mon-move":return`mm ${ht(e.item)} ${V(e.from)} ${V(e.to)}`;case"mana-move":return`mma ${Zn(e.mana)} ${V(e.from)} ${V(e.to)}`;case"mana-scored":return`ms ${Zn(e.mana)} ${V(e.at)}`;case"mystic-action":return`ma ${Ye(e.mystic)} ${V(e.from)} ${V(e.to)}`;case"demon-action":return`da ${Ye(e.demon)} ${V(e.from)} ${V(e.to)}`;case"demon-additional-step":return`das ${Ye(e.demon)} ${V(e.from)} ${V(e.to)}`;case"spirit-target-move":return`stm ${ht(e.item)} ${V(e.from)} ${V(e.to)} ${V(e.by)}`;case"pickup-bomb":return`pb ${Ye(e.by)} ${V(e.at)}`;case"pickup-potion":return`pp ${ht(e.by)} ${V(e.at)}`;case"use-potion":return`up ${V(e.from)} ${V(e.to)}`;case"pickup-mana":return`pm ${Zn(e.mana)} ${Ye(e.by)} ${V(e.at)}`;case"mon-fainted":return`mf ${Ye(e.mon)} ${V(e.from)} ${V(e.to)}`;case"mana-dropped":return`md ${Zn(e.mana)} ${V(e.at)}`;case"supermana-back-to-base":return`sb ${V(e.from)} ${V(e.to)}`;case"bomb-attack":return`ba ${Ye(e.by)} ${V(e.from)} ${V(e.to)}`;case"mon-awake":return`maw ${Ye(e.mon)} ${V(e.at)}`;case"bomb-explosion":return`be ${V(e.at)}`;case"next-turn":return`nt ${Yt(e.color)}`;case"game-over":return`go ${Yt(e.winner)}`;case"takeback":return"z"}}s(yu,"eventFen");function zi(e){return e.map(yu).join(" ")}s(zi,"eventArrayFen");function Hi(e){return e===void 0?void 0:{i:e.i,j:e.j}}s(Hi,"detachedLocation");function Vr(e){let n=new Array(e.length);for(let t=0;t<e.length;t+=1){let o=e[t];o!==void 0&&(n[t]={i:o.i,j:o.j})}return n}s(Vr,"detachedLocations");function Jn(e){let n=e;return n===y.White?0:n===y.Black?1:void 0}s(Jn,"boardColorIndex");var yt=class{constructor(n=bn,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??Ea(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(i=>i===void 0?void 0:Wn(i)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{s(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Kn(t,n)}fork(){let n=new Kn(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(pn(n))return this.storage.itemSlots[se(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return Qn(n),cr(n,this.variant)}allMonsBases(){return Ot}supermanaBase(){return Tt}allMonsLocations(n){let t=Jn(n);return t===void 0?[]:Vr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=Jn(n);return t===void 0?[]:Vr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return Pa(n.kind,n.color)}faintedMonsLocations(n){let t=Jn(n);return t===void 0?[]:Vr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=Jn(n);if(t!==void 0)return Hi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=Jn(n);if(t!==void 0)return Hi(this.getCategoryDerived().awakeAngelLocations[t])}itemsEqual(n){for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=n.storage.itemSlots[t];if(o===void 0||r===void 0){if(o!==r)return!1}else if(!sa(o,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=ar[t];o!==void 0&&r!==void 0&&n.push([r,o])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],t=[],o=[],r=[],a=[],i=[],l,u;for(let A=0;A<121;A+=1){let d=this.storage.itemSlots[A];if(d!==void 0){let f=ar[A];if(f!==void 0){let h=Q(d);if(h!==void 0){let p=Jn(h.color);if(p===void 0)continue;(p===0?n:t).push(f),d.kind==="mon"&&Ee(h)?(p===0?a:i).push(f):h.kind===M.Angel&&!Ee(h)&&(p===0&&l===void 0?l=f:p===1&&u===void 0&&(u=f))}else if(d.kind==="mana"&&d.mana.kind==="regular"){let p=Jn(d.mana.color);p!==void 0&&(p===0?o:r).push(f)}}}}let c={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,i],awakeAngelLocations:[l,u]};return this.storage.categoryDerived=c,c}entries(){return this.getOccupiedEntries().values()}},Kn=class extends yt{static{s(this,"MutableBoard")}#e;delete(n){Qn(n),this.storage.itemSlots[se(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){Qn(n),this.storage.itemSlots[se(n)]=Wn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new yt(this.variant,void 0,this.storage),this.#e}};var Qi=ye+1,ku=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function gu(e){let n="",t=0;for(let o=0;o<11;o+=1){o>0&&(n+="/");let r=t+11,a=0;for(;t<r;){let i=e.itemAtIndex(t);if(t+=1,i===void 0){a+=1;continue}a>0&&(n+=qi(a),a=0),n+=ht(i)}a>0&&(n+=qi(a))}return n}s(gu,"boardFen");function Mu(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let i=0;i<11;i+=1){let l=0,u=!1;for(;a<t&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(u||a+2>=t)return;let A=e.charCodeAt(a+1)-48,d=e.charCodeAt(a+2)-48;if(A<0||A>9||d<0||d>9)return;let f=A*10+d;if(f<1||l+f>11)return;l+=f,a+=3,u=!0;continue}if(a+2>=t||l>=11)return;let c=Wi(e,a);if(c===void 0)return;r[i*11+l]=c,l+=1,a+=3,u=!1}if(l!==11)return;if(i<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Kn(o,r,void 0,!0)}s(Mu,"parseBoardFenRange");function $i(e){let n=`${e.whiteScore} ${e.blackScore} ${Yt(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${gu(e.board)}`,t=e.board.variant;return t===bn?n:`${n} ${Ca(t)}`}s($i,"gameFen");function Yi(e){let n=0,t=s(w=>{let v=n,I=0,T=!1;for(;n<e.length;){let S=e.charCodeAt(n);if(S===32)break;if(S<48||S>57)return-1;if(n===v)T=S===48;else if(T)return-1;if(I=I*10+(S-48),!Number.isSafeInteger(I))return-1;n+=1}if(n===v)return-1;if(w){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return I},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),i=a===119?y.White:a===98?y.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let l=t(!0),u=t(!0),c=t(!0),A=t(!0),d=t(!0),f=t(!0);if(o<0||r<0||l<0||u<0||c<0||A<0||d<0||f<0||o>Qi||r>Qi||l>Ue||u>wn||c>re||f<1)return;let h=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let p=n,k=bn;if(n<e.length){n+=1;let w=t(!1),v=Sa(w);if(v===void 0||v===bn)return;k=v}let g=Mu(e,h,p,k);if(g!==void 0)return{board:g,whiteScore:o,blackScore:r,activeColor:i,actionsUsedCount:l,manaMovesCount:u,monsMovesCount:c,whitePotionsCount:A,blackPotionsCount:d,turnNumber:f}}s(Yi,"parseGameFen");function qi(e){return ku[e]??""}s(qi,"emptyRunFen");function Xi(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}s(Xi,"copyRulesCounters");function Fo(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}s(Fo,"addCounter");function Wr(e,n,t,o){if(e.actionsUsedCount<Ue)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===y.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}s(Wr,"consumeAction");function zr(e,n,t,o){switch(n.kind){case"mon-move":return{valid:Fo(e,"monsMovesCount",1,o)};case"mana-move":return{valid:Fo(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===y.White?"whiteScore":"blackScore";return{valid:Fo(e,r,aa(n.mana,e.activeColor),o)}}case"mystic-action":return Wr(e,n.from,n.to,o);case"demon-action":{let a=t.find(i=>i.kind==="demon-additional-step")?.to??n.to;return Wr(e,a,a,o)}case"spirit-target-move":return Wr(e,n.by,n.to,o);case"pickup-potion":{let r=Q(n.by);if(r===void 0)return{valid:!0};let a=r.color===y.White?"whitePotionsCount":"blackPotionsCount";return{valid:Fo(e,a,1,o)}}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":return{valid:!0}}}s(zr,"projectEventCounters");function Hr(e,n){let t=Xi(e);for(let r of n)if(!zr(t,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let o={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Uo(o,n).turnAdvanced}s(Hr,"canApplyRulesEvents");function Cu(e,n,t,o){let r=zr(e,n,t,!1);switch(r.valid&&r.potionUse!==void 0&&o.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,sn(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let i=Q(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,ze(i))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(i=>i.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,ze(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,ze(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,gt(n.by,P.Bomb));break;case"pickup-potion":{if(Q(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,ot(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,ze(oa(n.mon)));break;case"mana-dropped":e.board.set(n.at,sn(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?ot(a.mon,En):sn(En));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,ze(n.by));break;case"bomb-explosion":{let a=e.board.get(n.at),i=a===void 0?void 0:Q(a);(i===void 0||!Ee(i)||!St(e.board.base(i),n.at))&&e.board.delete(n.at);break}case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}s(Cu,"applyEvent");function Iu(e,n){e.activeColor=Pn(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let t of e.board.faintedMonsLocations(e.activeColor)){let o=e.board.get(t),r=o===void 0?void 0:Q(o);if(r===void 0)continue;let a=ra(r);Ee(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,ze(a))}}s(Iu,"advanceTurn");function Uo(e,n){let t=[];for(let a of n)Cu(e,a,n,t);let o=Mo(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):ja(e)&&(Iu(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}s(Uo,"applyRulesEvents");var Xt=Symbol("cache-miss"),es=Symbol("cached-undefined"),jo=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Su(e){return e===void 0?void 0:[e[0].map(Hn),e[1].map(rt)]}s(Su,"copyStageResult");function Zi(e){return e===void 0?es:[e[0].map(Hn),e[1].map(rt)]}s(Zi,"storeStageResult");function Ji(e){return e===es?void 0:Su(e)}s(Ji,"copyStoredStageResult");function Go(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}s(Go,"setBounded");var Ko=class{static{s(this,"RulesQueryCache")}#e;#n;#t;#o;#r;invalidate(){this.#e=void 0,this.#n=void 0,this.#t=void 0,this.#o=void 0,this.#r=void 0}getStartSuggestion(n){let t=this.#e?.[n];return t===void 0?void 0:tr(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=tr(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){Go(this.#n??=new Map,n,t,jo.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(rt)}setSecondInputOptions(n,t){Go(this.#t??=new Map,n,t.map(rt),jo.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Xt:Ji(t)}setSecondStage(n,t){Go(this.#o??=new Map,n,Zi(t),jo.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Xt:Ji(t)}setThirdStage(n,t){Go(this.#r??=new Map,n,Zi(t),jo.thirdStage)}};function Zt(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Hn)}))}s(Zt,"copyTrackingEntries");var Vo=class e{static{s(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return Zt(this.#n)}get movesVerified(){return this.#t}get verboseTrackingEnabled(){return this.#o}get eventApplicationTrackingEnabled(){return this.#r||this.#o}copy(){let n=new e(this.#o);return n.#e=[...this.#e],n.#n=Zt(this.#n),n.#t=this.#t,n.#r=this.#r,n}fork(){let n=new e(!1);return n.#t=this.#t,n.#r=!1,n}resetForLoadedFen(){this.#a()}resetForBoardReplacement(){this.#a()}#a(){this.#e=[],this.#n=[],this.#t=!1}replace(n){n.takebackFens!==void 0&&(this.#e=[...n.takebackFens]),n.trackingEntries!==void 0&&(this.#n=Zt(n.trackingEntries)),n.movesVerified!==void 0&&(this.#t=n.movesVerified),n.verboseTrackingEnabled!==void 0&&(this.#o=n.verboseTrackingEnabled,n.verboseTrackingEnabled||(this.#n=[]))}setTakebackTracking(n){this.#r=n,n||(this.#e=[])}setVerboseTracking(n){this.#o=n,n||(this.#n=[])}canTakeback(n,t){return this.#r&&this.#e.length>1&&n===t}prepareTakeback(n,t){if(!this.canTakeback(n,t))return;let o=this.#e[this.#e.length-2];if(o!==void 0)return{previousFen:o,takebackFens:this.#e.slice(0,-1),trackingEntries:Zt(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=Zt(n.trackingEntries)}beginEventApplication(n,t){if(!this.#r||this.#e.length!==0)return;let o=n();this.#e.push(o),this.#o&&this.#n.length===0&&this.#n.push({fen:o,color:t,events:[]})}completeEventApplication(n){let t,o=s(()=>t??=n.snapshotFen(),"snapshotFen");this.#r&&(n.winner!==void 0?this.#e=[]:n.turnAdvanced?this.#e=[o()]:this.#e.push(o())),this.#o&&this.#n.push({fen:o(),color:n.color,events:n.events.map(Hn)})}};function ns(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let i=t.mon;if(i.color!==e.activeColor||Ee(i))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(He(n),D.MonMove,o,l=>{let u=e.board.get(l),c=e.board.squareAt(l),A;switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":A=!1;break;case"mana":A=i.kind===M.Drainer;break;case"consumable":case void 0:A=!0;break}if(!A)return!1;switch(c.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===M.Drainer&&(u===void 0||u.kind==="mana"&&u.mana.kind==="supermana");case"mon-base":return c.monKind===i.kind&&c.color===i.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(i.kind){case M.Angel:case M.Drainer:break;case M.Mystic:{let l=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(ao(n),D.MysticAction,o,u=>{let c=e.board.get(u);if(c===void 0||sr(l,u))return!1;let A=Q(c);return A!==void 0&&i.color!==A.color&&!Ee(A)}));break}case M.Demon:{let l=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(io(n),D.DemonAction,o,u=>{let c=e.board.get(u),A=Aa(n,u),d=e.board.squareAt(A);if(c===void 0||sr(l,u)||e.board.get(A)!==void 0||d.kind==="supermana-base"||d.kind==="mon-base")return!1;let f=Q(c);return f!==void 0&&i.color!==f.color&&!Ee(f)}));break}case M.Spirit:a.push(...e.nextInputsFromLocations(so(n),D.SpiritTargetCapture,o,l=>{let u=e.board.get(l);return u===void 0?!1:ia(u)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(He(n),D.ManaMove,o,i=>fr(e.board,i)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(He(n),D.MonMove,o,i=>{let l=e.board.get(i),u=e.board.squareAt(i);switch(l?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return $n(u)?!0:u.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let i=t.mon;if(i.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(He(n),D.MonMove,o,l=>{let u=e.board.get(l),c=e.board.squareAt(l);switch(u?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return $n(c)}})),t.consumable===P.Bomb&&a.push(...e.nextInputsFromLocations(ro(n),D.BombAttack,o,l=>{let u=e.board.get(l),c=u===void 0?void 0:Q(u);return c!==void 0&&i.color!==c.color&&!Ee(c)}));break}case"consumable":break}return a}s(ns,"generateSecondInputOptions");function ts(e,n,t,o,r){let a=[],i=[],l=e.board.squareAt(r),u=e.board.get(r);switch(n){case D.MonMove:{let c=Q(t);if(c===void 0)return;if(i.push({kind:"mon-move",item:t,from:o,to:r}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let A=vn(t);A!==void 0&&i.push({kind:"mana-dropped",mana:A,at:o}),i.push({kind:"pickup-mana",mana:u.mana,by:c,at:r});break}case"consumable":switch(u.consumable){case P.Bomb:case P.Potion:return;case P.BombOrPotion:or(t)!==void 0||vn(t)!==void 0?i.push({kind:"pickup-potion",by:t,at:r}):(a.push(Fe({kind:"modifier",modifier:Z.SelectBomb},D.SelectConsumable,t)),a.push(Fe({kind:"modifier",modifier:Z.SelectPotion},D.SelectConsumable,t)));break}break}if(l.kind==="mana-pool"){let A=vn(t);A!==void 0&&i.push({kind:"mana-scored",mana:A,at:r})}break}case D.ManaMove:{if(t.kind!=="mana")return;let c=t.mana;if(i.push({kind:"mana-move",mana:c,from:o,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:c,by:u.mon,at:r})}switch(l.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:c,at:r});break;case"mon-base":case"supermana-base":return}break}case D.MysticAction:{if(t.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),u!==void 0){let c=Q(u);if(c===void 0)return;if(i.push({kind:"mon-fainted",mon:c,from:r,to:e.board.base(c)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case P.Bomb:i.push({kind:"bomb-explosion",at:r});break;case P.Potion:case P.BombOrPotion:return}}break}case D.DemonAction:{if(t.kind!=="mon")return;let c=t.mon;i.push({kind:"demon-action",demon:c,from:o,to:r});let A=!1,d=!1;if(u!==void 0){let f=Q(u);if(f===void 0)return;if(i.push({kind:"mon-fainted",mon:f,from:r,to:e.board.base(f)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(A=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case P.Bomb:d=!0,i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:c,from:r,to:e.board.base(c)});break;case P.Potion:case P.BombOrPotion:return}}if(!d&&(l.kind==="supermana-base"||l.kind==="mon-base")&&(A=!0),A)for(let f of He(r)){let h=e.board.get(f),p=e.board.squareAt(f);h!==void 0&&h.kind!=="consumable"||($n(p)?a.push(Fe({kind:"location",location:f},D.DemonAdditionalStep)):p.kind==="mon-base"&&p.monKind===c.kind&&p.color===c.color&&a.push(Fe({kind:"location",location:f},D.DemonAdditionalStep)))}break}case D.SpiritTargetCapture:{if(u===void 0)return;let c=Q(u),A=vn(u);a.push(...e.nextInputsFromLocations(He(r),D.SpiritTargetMove,void 0,d=>{let f=e.board.get(d),h=e.board.squareAt(d);if(!Fa(u,f))return!1;switch(h.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let p=f?.kind==="mana"&&f.mana.kind==="supermana";return A?.kind==="supermana"||A===void 0&&c?.kind===M.Drainer&&(f===void 0||p)||c?.kind===M.Drainer&&p}case"mon-base":return c?.kind===h.monKind&&c.color===h.color&&A===void 0&&or(u)===void 0}}));break}case D.BombAttack:{let c=Q(t);if(c===void 0)return;if(i.push({kind:"bomb-attack",by:c,from:o,to:r}),u!==void 0){let A=Q(u);if(A===void 0)return;if(i.push({kind:"mon-fainted",mon:A,from:r,to:e.board.base(A)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case P.Bomb:i.push({kind:"bomb-explosion",at:r});break;case P.Potion:case P.BombOrPotion:return}}break}case D.DemonAdditionalStep:case D.SpiritTargetMove:case D.SelectConsumable:break}return[i,a]}s(ts,"compileSecondInput");function os(e,n,t,o,r){let a=e.get(r),i=[],l=[];switch(n.kind){case D.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,c=e.get(u),A=e.squareAt(u);if(l.push({kind:"spirit-target-move",item:a,from:r,to:u,by:o}),c!==void 0)switch(a.kind){case"mon":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":l.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case P.Potion:case P.Bomb:return;case P.BombOrPotion:i.push(Fe({kind:"modifier",modifier:Z.SelectBomb},D.SelectConsumable,a)),i.push(Fe({kind:"modifier",modifier:Z.SelectPotion},D.SelectConsumable,a));break}break}break;case"mana":if(c.kind!=="mon")return;l.push({kind:"pickup-mana",mana:a.mana,by:c.mon,at:u});break;case"mon-with-mana":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":l.push({kind:"mana-dropped",mana:a.mana,at:r}),l.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case P.Potion:case P.Bomb:return;case P.BombOrPotion:l.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(c.kind!=="consumable"||c.consumable!==P.BombOrPotion)return;l.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(c.kind){case"mana":case"consumable":return;case"mon":i.push(Fe({kind:"modifier",modifier:Z.SelectBomb},D.SelectConsumable,c)),i.push(Fe({kind:"modifier",modifier:Z.SelectPotion},D.SelectConsumable,c));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case P.Potion:case P.Bomb:return;case P.BombOrPotion:l.push({kind:"pickup-potion",by:c,at:u});break}break}break}if(A.kind==="mana-pool"){let d=vn(a);d!==void 0&&l.push({kind:"mana-scored",mana:d,at:u})}break}case D.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=Q(t);if(u===void 0)return;let c=n.input.location;l.push({kind:"demon-additional-step",demon:u,from:r,to:c});let A=e.get(c);if(A?.kind==="consumable")switch(A.consumable){case P.Potion:case P.Bomb:return;case P.BombOrPotion:i.push(Fe({kind:"modifier",modifier:Z.SelectBomb},D.SelectConsumable,t)),i.push(Fe({kind:"modifier",modifier:Z.SelectPotion},D.SelectConsumable,t));break}break}case D.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=Q(t);if(u===void 0)return;switch(n.input.modifier){case Z.SelectBomb:l.push({kind:"pickup-bomb",by:u,at:r});break;case Z.SelectPotion:l.push({kind:"pickup-potion",by:t,at:r});break}break}case D.MonMove:case D.ManaMove:case D.MysticAction:case D.DemonAction:case D.SpiritTargetCapture:case D.BombAttack:return}return[l,i]}s(os,"compileThirdInput");function rs(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(i=>Ct(i.input,e))?.actorMonItem,a=r===void 0?void 0:Q(r);if(!(r===void 0||a===void 0))switch(e.modifier){case Z.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case Z.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}s(rs,"compileFourthInput");function as(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=s(i=>{let l=t([{kind:"location",location:i}]);if(l.kind!=="next-input-options"||l.nextInputs.length===0)return;let u=se(i);r[u]||(r[u]=!0,o.push(i))},"addWhenValid");for(let i of e.board.allMonsLocations(e.activeColor))a(i);if(Ua(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let i of e.board.allFreeRegularManaLocations(e.activeColor))a(i);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}s(as,"suggestedInputToStartWith");function is(e,n,t,o,r,a){let i=n[0];if(i?.kind!=="location")return{kind:"invalid-input"};let l=i.location,u=e.board().get(l);if(u===void 0)return{kind:"invalid-input"};let c=n[1];if(c!==void 0&&c.kind!=="location")return{kind:"invalid-input"};let A=a&&e.requiresCounterCapacityFiltering(),d=e.secondInputOptions(l,u,t,t?void 0:c?.location);if(c===void 0){let E=o&&!A?ha(d):d,_=e.applicableInputOptions(n,E,r,A,o);return _.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:_}}let f=c.location,h=d.find(E=>Ct(E.input,c));if(h===void 0)return{kind:"invalid-input"};let p=n[2],k=e.processSecondInput(h.kind,u,l,f,t),g=k?.[0]??[],w=k?.[1]??[];if(p===void 0){if(w.length!==0){let E=e.applicableInputOptions(n,w,r,A,o);return E.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:E}}return g.length===0?{kind:"invalid-input"}:e.resolveEvents(g,t)}let v=w.find(E=>Ct(E.input,p));if(v===void 0)return{kind:"invalid-input"};let I=n[3],T=e.processThirdInput(v,u,l,f,t);g.push(...T?.[0]??[]);let S=T?.[1]??[];if(I===void 0){if(S.length!==0){let E=e.applicableInputOptions(n,S,r,A,o);return E.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:E}}return g.length===0?{kind:"invalid-input"}:e.resolveEvents(g,t)}let C=rs(I,v,S);return C===void 0?{kind:"invalid-input"}:(g.push(C),e.resolveEvents(g,t))}s(is,"dispatchStagedInput");var rn=class e{static{s(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=bn,o){let r=o===void 0?new Kn(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:y.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Vo(n),this.#t=new Ko,this.#o={board:s(()=>this.board,"board"),requiresCounterCapacityFiltering:s(()=>this.#h(),"requiresCounterCapacityFiltering"),secondInputOptions:s((...a)=>this.#c(...a),"secondInputOptions"),processSecondInput:s((...a)=>this.#y(...a),"processSecondInput"),processThirdInput:s((...a)=>this.#k(...a),"processThirdInput"),applicableInputOptions:s((...a)=>this.#p(...a),"applicableInputOptions"),resolveEvents:s((...a)=>this.#g(...a),"resolveEvents")}}get board(){return this.#e.board.readonlyView()}get whiteScore(){return this.#e.whiteScore}get blackScore(){return this.#e.blackScore}get activeColor(){return this.#e.activeColor}get actionsUsedCount(){return this.#e.actionsUsedCount}get manaMovesCount(){return this.#e.manaMovesCount}get monsMovesCount(){return this.#e.monsMovesCount}get whitePotionsCount(){return this.#e.whitePotionsCount}get blackPotionsCount(){return this.#e.blackPotionsCount}get turnNumber(){return this.#e.turnNumber}get takebackFens(){return this.#n.takebackFens}get isMovesVerified(){return this.#n.movesVerified}get withVerboseTracking(){return this.#n.verboseTrackingEnabled}get verboseTrackingEntities(){return this.#n.trackingEntries}replaceHistory(n){this.#n.replace(n)}#r(n){this.#e.whiteScore=n.whiteScore,this.#e.blackScore=n.blackScore,this.#e.activeColor=n.activeColor,this.#e.actionsUsedCount=n.actionsUsedCount,this.#e.manaMovesCount=n.manaMovesCount,this.#e.monsMovesCount=n.monsMovesCount,this.#e.whitePotionsCount=n.whitePotionsCount,this.#e.blackPotionsCount=n.blackPotionsCount,this.#e.turnNumber=n.turnNumber}static#a(n,t){return new e(n,t.variant,t)}static newSimulationState(n){let t=e.#a(!1,n.board);return t.#r(n),t.#n.setTakebackTracking(!1),t}static fromFen(n,t=!1){let o=Yi(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return $i(this)}copy(){let n=e.#a(this.withVerboseTracking,this.board);return n.#r(this),n.#n=this.#n.copy(),n}fork(){let n=e.#a(!1,this.board);return n.#r(this),n.#n=this.#n.fork(),n}variant(){return this.board.variant}replaceBoardItems(n){let t=Array.from({length:121},()=>{});for(let[r,a]of n)t[se(r)]=a;let o=yt.fromItems(t,this.variant());this.#e.board=o,this.#n.resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){this.#n.setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){this.#t.invalidate()}setVerboseTracking(n){this.#n.setVerboseTracking(n)}#b(n){let t=n.board.fork();this.#e.board=t,this.#r(n),this.invalidateProcessInputCache()}canTakeback(n){return this.#n.canTakeback(this.activeColor,n)}processInput(n,t,o){return this.processInputWithStartOptions(n,t,o,void 0)}processInputWithStartOptions(n,t,o,r){return this.#s(n,t,o,r??ba)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>nt||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let l=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),u=this.#t.getStartSuggestion(l);if(u!==void 0)return u;let c=as(this,r,A=>this.#s(A,!0,!0,r,a));return this.#t.setStartSuggestion(l,c),c}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let l=this.#n.prepareTakeback(this.activeColor,this.activeColor);if(l===void 0)return{kind:"invalid-input"};let u=e.fromFen(l.previousFen,!1);return u===void 0?{kind:"invalid-input"}:t?{kind:"events",events:[{kind:"takeback"}]}:(this.#b(u),this.#n.commitTakeback(l),{kind:"events",events:[{kind:"takeback"}]})}return is(this.#o,n,t,o,r,a)}#h(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#p(n,t,o,r,a){if(!r)return t;let i=s(u=>this.#A([...n,u.input],o),"applicable");if(!a)return t.filter(i);let l=t.find(i);return l===void 0?[]:[l]}#A(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${ca(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Hr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(l=>this.#A([...n,{kind:"location",location:l}],t));case"next-input-options":return a.nextInputs.some(l=>this.#A([...n,l.input],t))}})();return this.#t.setCompletionViability(o,i),i}#c(n,t,o,r){let a=String(se(n)),i=this.#t.getSecondInputOptions(a);if(i!==void 0)return i;let l=ns(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,l),l}#y(n,t,o,r,a){let i=`${n}|${to(t)}|${se(o)}|${se(r)}`,l=this.#t.lookupSecondStage(i);if(l!==Xt)return l;let u=ts(this,n,t,o,r);return a&&this.#t.setSecondStage(i,u),u}#k(n,t,o,r,a){let i=`${rr(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":to(n.actorMonItem)}|${to(t)}|${se(o)}|${se(r)}`,l=this.#t.lookupThirdStage(i);if(l!==Xt)return l;let u=os(this.board,n,t,o,r);return a&&this.#t.setThirdStage(i,u),u}#g(n,t){if(t)return{kind:"events",events:n};let o=this.applyAndAddResultingEvents(n);return o===void 0?{kind:"invalid-input"}:{kind:"events",events:o}}applyAndAddResultingEvents(n){return this.#u(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#u(n,!1);return o===void 0?void 0:{game:t,events:o}}#u(n,t){if(!Hr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return Uo(this.#e,n).events;let o=s(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=Uo(this.#e,n);return this.#n.completeEventApplication({snapshotFen:o,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events}nextInputsFromLocations(n,t,o,r){return ya(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Be.MonMove,re-this.monsMovesCount),n.set(Be.Action,0),n.set(Be.Potion,0),n.set(Be.ManaMove,0),this.turnNumber===1||(n.set(Be.Action,Ue-this.actionsUsedCount),n.set(Be.Potion,this.playerPotionsCount()),n.set(Be.ManaMove,wn-this.manaMovesCount)),n}winnerColor(){return Mo(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(Pn(this.activeColor)).length>n.board.faintedMonsLocations(Pn(n.activeColor)).length}isFirstTurn(){return dt(this)}playerPotionsCount(){return Co(this)}playerCanMoveMon(){return La(this)}playerCanMoveMana(){return Na(this)}playerCanUseAction(){return Ba(this)}};function Wo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!pn(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}s(Wo,"toEnginePosition");function ne(e){return{row:e.i,column:e.j}}s(ne,"fromEnginePosition");function An(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}s(An,"fromEngineMon");function Jt(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}s(Jt,"fromEngineMana");function kt(e){switch(e.kind){case"mon":return{kind:"mon",mon:An(e.mon)};case"mana":return{kind:"mana",mana:Jt(e.mana)};case"mon-with-mana":return{kind:"mon",mon:An(e.mon),carrying:{kind:"mana",mana:Jt(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:An(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}s(kt,"fromEngineItem");function ss(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}s(ss,"fromEngineSquare");function Qr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Wo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(Qr,"toEngineInput");function qr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:ne(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(qr,"fromEngineInput");function Eu(e){let n=qr(e.input),t=e.actorMonItem===void 0?{}:{actor:kt(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...t}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...t}}}s(Eu,"fromEngineInputOption");function zo(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:kt(e.item),from:ne(e.from),to:ne(e.to)};case"mana-move":return{kind:e.kind,mana:Jt(e.mana),from:ne(e.from),to:ne(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:Jt(e.mana),at:ne(e.at)};case"mystic-action":return{kind:e.kind,mystic:An(e.mystic),from:ne(e.from),to:ne(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:An(e.demon),from:ne(e.from),to:ne(e.to)};case"spirit-target-move":return{kind:e.kind,item:kt(e.item),from:ne(e.from),to:ne(e.to),by:ne(e.by)};case"pickup-bomb":return{kind:e.kind,by:An(e.by),at:ne(e.at)};case"pickup-potion":return{kind:e.kind,by:kt(e.by),at:ne(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:ne(e.from),to:ne(e.to)};case"pickup-mana":return{kind:e.kind,mana:Jt(e.mana),by:An(e.by),at:ne(e.at)};case"mon-fainted":return{kind:e.kind,mon:An(e.mon),from:ne(e.from),to:ne(e.to)};case"bomb-attack":return{kind:e.kind,by:An(e.by),from:ne(e.from),to:ne(e.to)};case"mon-awake":return{kind:e.kind,mon:An(e.mon),at:ne(e.at)};case"bomb-explosion":return{kind:e.kind,at:ne(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}s(zo,"fromEngineEvent");function $r(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(ne)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(Eu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(zo)}}}s($r,"fromEngineOutput");function cs(e){return{monMoves:e.get(Be.MonMove)??0,manaMoves:e.get(Be.ManaMove)??0,actions:e.get(Be.Action)??0,potions:e.get(Be.Potion)??0}}s(cs,"availableMoveCountsFromEngine");function Pu(e){if(e!=="")return It(e)}s(Pu,"parseReplayMove");function Ho(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let i=e.activeColor===y.White,c=(i?n:t)[i?r:a];if(c===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let A=Pu(c);if(A===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let d=e.processInput(A,!1,!1);if(d.kind!=="events"||d.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let f={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,f)===!1)return{status:"stopped",...f}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}s(Ho,"replayInterleavedMoves");var Yr=class e{static{s(this,"Game")}#e;constructor(n={}){let{variant:t=x.Classic}=n;if(!wu(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new rn(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=rn.fromFen(n,!0);if(t?.fen()===n)return e.#n(t)}get variant(){return this.#e.variant()}get activeColor(){return this.#e.activeColor}get turnNumber(){return this.#e.turnNumber}get scores(){return{[y.White]:this.#e.whiteScore,[y.Black]:this.#e.blackScore}}get potions(){return{[y.White]:this.#e.whitePotionsCount,[y.Black]:this.#e.blackPotionsCount}}get winner(){return this.#e.winnerColor()}get historyVerified(){return this.#e.isMovesVerified}get takebackFens(){return[...this.#e.takebackFens]}get trackingEntries(){return this.#e.verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(zo),eventsFen:zi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(Qr);return this.#t(t,at(t))}play(n){let t=n.map(Qr);return this.#o(t,at(t))}playFen(n){let t=It(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,at(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return $r(o.processInput(n,!1,!1),t)}#o(n,t){let o=$r(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(Wo(n));return t===void 0?void 0:kt(t)}squareAt(n){return ss(this.#e.board.squareAt(Wo(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(us(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(us(t.i,t.j),{row:t.i,column:t.j});return[...n.values()].sort((t,o)=>t.row-o.row||t.column-o.column)}canTakeback(n){if(!vu(n))throw new TypeError(`unsupported color: ${String(n)}`);return this.#e.canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){let t=this.#e.verboseTrackingEntities;if(t.length<=1)return;let o=t.slice(0,-1),r=o[o.length-1],a=rn.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let l=i<0?[]:n.slice(0,i+1);if(!l.some(u=>{let c=rn.fromFen(u,!1);return c?.fen()!==u||c.variant()!==a.variant()}))return a.replaceHistory({takebackFens:l,trackingEntries:o,verboseTrackingEnabled:!0,movesVerified:this.#e.isMovesVerified}),e.#n(a)}verifyHistory(n){let t=new rn(!0,this.#e.variant());return Ho(t,n.white,n.black).status!=="complete"||t.fen()!==this.#e.fen()?!1:(this.#e.replaceHistory({takebackFens:t.takebackFens,trackingEntries:t.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return this.#e.isLaterThan(n.#e)}availableMoveCounts(){return cs(this.#e.availableMoveKinds())}suggestMove(n){if(!Tu(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=ji(this.#e,n);if(t.output.kind!=="events")return;let o=It(t.inputFen);if(o!==void 0)return{inputs:o.map(qr),inputFen:t.inputFen,events:t.output.events.map(zo)}}};function vu(e){return e===y.White||e===y.Black}s(vu,"isColor");function wu(e){return Object.values(x).includes(e)}s(wu,"isGameVariant");function Tu(e){return e==="fast"||e==="normal"||e==="pro"}s(Tu,"isAutomovePreference");function us(e,n){return`${e},${n}`}s(us,"positionKey");function Ou(e){let n=ls(e.white.fen),t=ls(e.black.fen);if(n===void 0||t===void 0)return n===void 0&&t===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?y.Black:y.White};if(n.variant()!==t.variant())return{kind:"invalid"};let o=n.fen(),r=t.fen();if(n.winnerColor()===void 0&&t.winnerColor()===void 0)return{kind:"ongoing"};let a=new rn(!1,n.variant()),i;return Ho(a,e.white.moves,e.black.moves,(l,{whiteMovesProcessed:u,blackMovesProcessed:c})=>{let A=l.winnerColor();if(A===void 0)return!0;let d=A===y.White?u===e.white.moves.length:c===e.black.moves.length,f=A===y.White?o:r;return i=d&&f===l.fen()?{kind:"winner",winner:A}:{kind:"invalid"},!1}),i??{kind:"invalid"}}s(Ou,"resolveMatch");function ls(e){let n=rn.fromFen(e,!1);return n?.fen()===e?n:void 0}s(ls,"submittedGame");export{y as Color,P as Consumable,Yr as Game,x as GameVariant,Z as Modifier,M as MonKind,Ou as resolveMatch};
|
|
1
|
+
var fs=Object.defineProperty;var s=(e,n)=>fs(e,"name",{value:n,configurable:!0});var y=Object.freeze({White:"white",Black:"black"}),R=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),I=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),O=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),J=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var nr=Object.freeze({[y.White]:0,[y.Black]:1});function nn(e){return nr[e]}s(nn,"colorId");var tn=Object.freeze({[I.Demon]:0,[I.Drainer]:1,[I.Angel]:2,[I.Spirit]:3,[I.Mystic]:4}),Be=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),tr=Object.freeze({[J.SelectPotion]:0,[J.SelectBomb]:1}),_=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),ot=4,En=Object.freeze({kind:"supermana"});function Pn(e){return e===y.Black?y.White:y.Black}s(Pn,"otherColor");function Hn(e,n,t){if(!Number.isInteger(t)||t<0||t>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:t})}s(Hn,"createMon");function Jo(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}s(Jo,"monEquals");function Ee(e){return e.cooldown>0}s(Ee,"isMonFainted");function sa(e){return Hn(e.kind,e.color,2)}s(sa,"faintMon");function ca(e){return e.cooldown>0?Hn(e.kind,e.color,e.cooldown-1):ze(e)}s(ca,"decreaseMonCooldown");function rt(e){return Object.freeze({kind:"regular",color:e})}s(rt,"regularMana");function aa(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}s(aa,"manaEquals");function or(e,n){return e||!n?2:1}s(or,"manaScoreForOwnership");function ua(e,n){return or(e.kind==="supermana",e.kind==="regular"&&e.color===n)}s(ua,"manaScore");function He(e){return Object.freeze({kind:"mon",mon:ze(e)})}s(He,"monItem");function cn(e){return Object.freeze({kind:"mana",mana:tt(e)})}s(cn,"manaItem");function at(e,n){return Object.freeze({kind:"mon-with-mana",mon:ze(e),mana:tt(n)})}s(at,"monWithManaItem");function Ct(e,n){return Object.freeze({kind:"mon-with-consumable",mon:ze(e),consumable:n})}s(Ct,"monWithConsumableItem");function It(e){return Object.freeze({kind:"consumable",consumable:e})}s(It,"consumableItem");function ze(e){return Object.isFrozen(e)?e:Hn(e.kind,e.color,e.cooldown)}s(ze,"immutableMon");function tt(e){return e.kind==="supermana"?En:Object.isFrozen(e)?e:rt(e.color)}s(tt,"immutableMana");function zn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:He(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:cn(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:at(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Ct(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:It(e.consumable)}}s(zn,"immutableItem");function V(e){return{i:e.i,j:e.j}}s(V,"copyLocation");function ps(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:V(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(ps,"copyInput");function it(e){let n=ps(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:zn(e.actorMonItem)}}s(it,"copyNextInput");function Qn(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:zn(e.item),from:V(e.from),to:V(e.to)};case"mana-move":return{kind:"mana-move",mana:tt(e.mana),from:V(e.from),to:V(e.to)};case"mana-scored":return{kind:"mana-scored",mana:tt(e.mana),at:V(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:ze(e.mystic),from:V(e.from),to:V(e.to)};case"demon-action":return{kind:"demon-action",demon:ze(e.demon),from:V(e.from),to:V(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:ze(e.demon),from:V(e.from),to:V(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:zn(e.item),from:V(e.from),to:V(e.to),by:V(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:ze(e.by),at:V(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:zn(e.by),at:V(e.at)};case"use-potion":return{kind:"use-potion",from:V(e.from),to:V(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:tt(e.mana),by:ze(e.by),at:V(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:ze(e.mon),from:V(e.from),to:V(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:tt(e.mana),at:V(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:V(e.from),to:V(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:ze(e.by),from:V(e.from),to:V(e.to)};case"mon-awake":return{kind:"mon-awake",mon:ze(e.mon),at:V(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:V(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}s(Qn,"copyEvent");function rr(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(V)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(it)};case"events":return{kind:"events",events:e.events.map(Qn)}}}s(rr,"copyOutput");function Q(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}s(Q,"itemMon");function la(e){let n=Q(e);return n===void 0||!Ee(n)}s(la,"isSpiritTargetAllowed");function vn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}s(vn,"itemMana");function ar(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}s(ar,"itemConsumable");function da(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Jo(e.mon,n.mon);case"mana":return n.kind==="mana"&&aa(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Jo(e.mon,n.mon)&&aa(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Jo(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}s(da,"itemEquals");function er(e){return`${e.kind}:${e.color}:${e.cooldown}`}s(er,"monKey");function ia(e){return e.kind==="supermana"?"s":`r:${e.color}`}s(ia,"manaKey");function ro(e){switch(e.kind){case"mon":return`m:${er(e.mon)}`;case"mana":return`a:${ia(e.mana)}`;case"mon-with-mana":return`mm:${er(e.mon)}:${ia(e.mana)}`;case"mon-with-consumable":return`mc:${er(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}s(ro,"itemKey");function ir(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}s(ir,"inputKey");function Aa(e){return e.map(ir).join(";")}s(Aa,"inputChainKey");function St(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}s(St,"inputEquals");function W(e){return`${e.i},${e.j}`}s(W,"locationFen");var ao=48,bs=57,hs=44,ys=59,ks=108,gs=109,Ms=122,Cs=112,Is=98;function Ss(e){switch(e){case J.SelectPotion:return"p";case J.SelectBomb:return"b"}}s(Ss,"modifierFen");function Es(e){switch(e.kind){case"takeback":return"z";case"location":return`l${W(e.location)}`;case"modifier":return`m${Ss(e.modifier)}`}}s(Es,"inputFen");function ma(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<ao||o>bs))return o===ao+1&&n+1<t&&e.charCodeAt(n+1)===ao?10:o-ao}s(ma,"parseCoordinate");function fa(e,n){return e+(n===10?2:1)}s(fa,"coordinateEnd");function Ps(e,n,t){let o=ma(e,n,t);if(o===void 0)return;let r=fa(n,o);if(r>=t||e.charCodeAt(r)!==hs)return;let a=r+1,i=ma(e,a,t);if(!(i===void 0||fa(a,i)!==t))return{i:o,j:i}}s(Ps,"parseLocation");function vs(e,n,t){switch(e.charCodeAt(n)){case ks:{let o=Ps(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case gs:return t!==n+2?void 0:e.charCodeAt(n+1)===Cs?{kind:"modifier",modifier:J.SelectPotion}:e.charCodeAt(n+1)===Is?{kind:"modifier",modifier:J.SelectBomb}:void 0;case Ms:return t===n+1?{kind:"takeback"}:void 0;default:return}}s(vs,"parseInputFenRange");function st(e){return e.map(Es).join(";")}s(st,"inputArrayFen");function Et(e){if(typeof e!="string")throw new TypeError("input FEN must be a string");if(e==="")return[];let n=[],t=0;for(let o=0;o<=e.length;o+=1){if(o<e.length&&e.charCodeAt(o)!==ys)continue;if(n.length===ot)return;let r=vs(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}s(Et,"parseInputArrayFen");var pa=Math.trunc(5.5),ws=10;function oe(e,n){return{i:e,j:n}}s(oe,"location");function Pt(e,n){return e.i===n.i&&e.j===n.j}s(Pt,"locationEquals");function bn(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}s(bn,"isValidLocation");function qn(e){if(!bn(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ws}`)}s(qn,"assertValidLocation");function se(e){return qn(e),e.i*11+e.j}s(se,"locationIndex");function ct(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return oe(Math.trunc(e/11),e%11)}s(ct,"fromLocationIndex");function ba(e,n){return oe(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}s(ba,"locationBetween");function ha(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}s(ha,"locationDistance");function ya(e,n){let t=[];for(let o=e.i-n;o<=e.i+n;o+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=oe(o,r);bn(a)&&!Pt(a,e)&&t.push(a)}return t}s(ya,"nearbyLocationsFor");function ka(e,n){let t=[];for(let[o,r]of n){let a=oe(e.i+o,e.j+r);bn(a)&&t.push(a)}return t}s(ka,"directionalReachabilityFor");function Ts(e){let n=[];for(let t=-2;t<=2;t+=1)for(let o=-2;o<=2;o+=1){if(Math.max(Math.abs(t),Math.abs(o))!==2)continue;let r=oe(e.i+t,e.j+o);bn(r)&&n.push(r)}return n}s(Ts,"spiritReachabilityFor");function vt(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(ct(t)).map(o=>Object.freeze(o)))))}s(vt,"buildCache");var Os=vt(e=>ya(e,1)),xs=vt(e=>ya(e,3)),Rs=vt(e=>ka(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),_s=vt(e=>ka(e,[[-2,0],[2,0],[0,2],[0,-2]])),Ds=vt(Ts);function wt(e,n){return bn(n)?e[se(n)]??[]:[]}s(wt,"cachedLocations");function Qe(e){return wt(Os,e)}s(Qe,"nearbyLocations");function io(e){return wt(xs,e)}s(io,"bombReachableLocations");function so(e){return wt(Rs,e)}s(so,"mysticReachableLocations");function co(e){return wt(_s,e)}s(co,"demonReachableLocations");function uo(e){return wt(Ds,e)}s(uo,"spiritReachableLocations");var sr=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(ct(n))));var ga=Object.freeze({includeManaStartsWithPotionAction:!1}),cr=Object.freeze({includeManaStartsWithPotionAction:!0});function Fe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}s(Fe,"nextInput");function Ma(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}s(Ma,"firstOptionFromEachKindGroup");function ur(e,n){return e!==void 0&&ha(e,n)===1}s(ur,"isLocationGuardedByAngelLocation");function Ca(e,n,t,o){if(t!==void 0){for(let a of e)if(Pt(a,t))return o(t)?[Fe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(Fe({kind:"location",location:a},n));return r}s(Ca,"nextInputsFromLocations");var Tt=new RangeError("fast workspace allocation failed");function Ot(e){return e===Tt}s(Ot,"isFastWorkspaceAllocationFailure");function Oe(e){throw e instanceof RangeError?Tt:e}s(Oe,"rethrowFastWorkspaceAllocation");var hn=R.Classic,ke=5,ie=5,wn=1,Ue=1,$n=Object.freeze([R.Classic,R.SwappedManaRows,R.OffsetArcManaRows,R.CenterSpokeManaRows,R.AlternatingManaRows,R.InnerWedgeManaRows,R.OuterWedgeManaRows,R.BentCenterManaRows,R.OuterEdgeManaRows,R.SplitFlankManaRows,R.ForwardBridgeManaRows,R.CornerChainManaRows]),Ea=Object.freeze({[R.Classic]:0,[R.SwappedManaRows]:1,[R.OffsetArcManaRows]:2,[R.CenterSpokeManaRows]:3,[R.AlternatingManaRows]:4,[R.InnerWedgeManaRows]:5,[R.OuterWedgeManaRows]:6,[R.BentCenterManaRows]:7,[R.OuterEdgeManaRows]:8,[R.SplitFlankManaRows]:9,[R.ForwardBridgeManaRows]:10,[R.CornerChainManaRows]:11}),Ls=new Map($n.map(e=>[Ea[e],e]));function Pa(e){return Ea[e]}s(Pa,"gameVariantId");function ee(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(oe(n,t))))}s(ee,"locations");function qe(e,n){return Object.freeze({[y.Black]:e,[y.White]:n})}s(qe,"manaLayout");var Ns=Object.freeze({[R.Classic]:qe(ee([3,4],[3,6],[4,3],[4,5],[4,7]),ee([7,4],[7,6],[6,3],[6,5],[6,7])),[R.SwappedManaRows]:qe(ee([3,3],[3,5],[3,7],[4,4],[4,6]),ee([7,3],[7,5],[7,7],[6,4],[6,6])),[R.OffsetArcManaRows]:qe(ee([3,4],[3,6],[4,2],[4,5],[4,8]),ee([6,2],[6,5],[6,8],[7,4],[7,6])),[R.CenterSpokeManaRows]:qe(ee([3,5],[4,2],[4,4],[4,6],[4,8]),ee([6,2],[6,4],[6,6],[6,8],[7,5])),[R.AlternatingManaRows]:qe(ee([4,1],[4,3],[4,5],[4,7],[4,9]),ee([6,1],[6,3],[6,5],[6,7],[6,9])),[R.InnerWedgeManaRows]:qe(ee([3,4],[3,6],[4,4],[4,5],[4,6]),ee([6,4],[6,5],[6,6],[7,4],[7,6])),[R.OuterWedgeManaRows]:qe(ee([3,4],[3,5],[3,6],[4,3],[4,7]),ee([6,3],[6,7],[7,4],[7,5],[7,6])),[R.BentCenterManaRows]:qe(ee([3,5],[4,4],[4,5],[4,6],[5,3]),ee([5,7],[6,4],[6,5],[6,6],[7,5])),[R.OuterEdgeManaRows]:qe(ee([4,0],[4,1],[4,9],[4,10],[5,1]),ee([5,9],[6,0],[6,1],[6,9],[6,10])),[R.SplitFlankManaRows]:qe(ee([3,4],[3,6],[4,2],[4,3],[5,2]),ee([5,8],[6,7],[6,8],[7,4],[7,6])),[R.ForwardBridgeManaRows]:qe(ee([3,4],[3,6],[4,3],[4,5],[5,4]),ee([5,6],[6,5],[6,7],[7,4],[7,6])),[R.CornerChainManaRows]:qe(ee([3,5],[3,6],[4,6],[4,7],[5,7]),ee([5,3],[6,3],[6,4],[7,4],[7,5]))}),va=Object.freeze({kind:"regular"}),Ia=Object.freeze({kind:"consumable-base"}),Bs=Object.freeze({kind:"supermana-base"}),xt=Object.freeze(oe(5,5)),Rt=ee([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function wa(e){return Number.isSafeInteger(e)?Ls.get(e):void 0}s(wa,"gameVariantFromId");function Sa(e,n){return Ns[e][n]}s(Sa,"manaBaseLocations");function Fs(e){let n=Array.from({length:121}).fill(va),t=s((o,r)=>{n[se(o)]=Object.freeze(r)},"put");t(oe(0,0),{kind:"mana-pool",color:y.Black}),t(oe(0,10),{kind:"mana-pool",color:y.Black}),t(oe(10,0),{kind:"mana-pool",color:y.White}),t(oe(10,10),{kind:"mana-pool",color:y.White}),t(oe(0,3),{kind:"mon-base",monKind:I.Mystic,color:y.Black}),t(oe(0,4),{kind:"mon-base",monKind:I.Spirit,color:y.Black}),t(oe(0,5),{kind:"mon-base",monKind:I.Drainer,color:y.Black}),t(oe(0,6),{kind:"mon-base",monKind:I.Angel,color:y.Black}),t(oe(0,7),{kind:"mon-base",monKind:I.Demon,color:y.Black}),t(oe(10,3),{kind:"mon-base",monKind:I.Demon,color:y.White}),t(oe(10,4),{kind:"mon-base",monKind:I.Angel,color:y.White}),t(oe(10,5),{kind:"mon-base",monKind:I.Drainer,color:y.White}),t(oe(10,6),{kind:"mon-base",monKind:I.Spirit,color:y.White}),t(oe(10,7),{kind:"mon-base",monKind:I.Mystic,color:y.White});for(let o of Sa(e,y.Black))t(o,{kind:"mana-base",color:y.Black});for(let o of Sa(e,y.White))t(o,{kind:"mana-base",color:y.White});return t(oe(5,0),Ia),t(oe(5,10),Ia),t(xt,Bs),Object.freeze(n)}s(Fs,"buildSquares");var Us=new Map($n.map(e=>[e,Fs(e)]));function lo(e){let n=Us.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}s(lo,"squaresForVariant");function lr(e,n){return qn(e),lo(n)[se(e)]??va}s(lr,"squareAtForVariant");function js(e){return lr(e,hn)}s(js,"squareAt");function Gs(e){switch(e.kind){case"mon-base":return He(Hn(e.monKind,e.color,0));case"mana-base":return cn(rt(e.color));case"supermana-base":return cn(En);case"consumable-base":return It(O.BombOrPotion);case"regular":case"mana-pool":return}}s(Gs,"initialItemForSquare");function Ks(e){return Object.freeze(lo(e).map(Gs))}s(Ks,"buildInitialItems");var Ws=new Map($n.map(e=>[e,Ks(e)]));function Ta(e){let n=Ws.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}s(Ta,"initialItemsForVariant");function Oa(e,n){for(let t of Rt){let o=js(t);if(o.kind==="mon-base"&&o.monKind===e&&o.color===n)return t}throw new Error("Expected at least one base for the given mon")}s(Oa,"monBase");var ae=Object.keys(nr).length,yn=Object.keys(tn).length,_t=ae*yn,ne=1,ue=2,X=3,Dt=1,Lt=2,ge=3,Pe=1,Ra=2,pe=3,Nt=tn[I.Demon],Ce=tn[I.Drainer],Bt=tn[I.Angel],Ao=tn[I.Spirit],Ft=tn[I.Mystic],Vs=0,zs=1,on=2,Hs=3,_a=5,ce=7,ut=se(xt);function j(e){return e&3}s(j,"cellOccupancy");function le(e){return e>>2&7}s(le,"cellMonKind");function fe(e){return e>>5&1}s(fe,"cellMonColor");function de(e){return e>>6&3}s(de,"cellCooldown");function D(e){return e>>8&3}s(D,"cellMana");function N(e){return e>>10&3}s(N,"cellConsumable");function lt(e){let n=N(e);return n===0||n===Pe}s(lt,"damagingAttackCanComplete");function dt(e,n,t,o,r){return X|e<<2|n<<5|t<<6|o<<8|r<<10}s(dt,"makeMonCell");function Tn(e){return ne|e<<8}s(Tn,"makeManaCell");function Da(e){return ue|e<<10}s(Da,"makeConsumableCell");function je(e,n){return or(e===ge,e-1===n)}s(je,"manaScoreValue");function ve(e,n){return e*ae+n}s(ve,"monId");function At(e){return e!==on&&e<ce}s(At,"squareIsRegularForMovement");function un(e){return e>=_a&&e<ce}s(un,"squareIsPool");function Ut(e){return Math.trunc((e-ce)/ae)}s(Ut,"squareMonBaseKind");function jt(e){return(e-ce)%ae}s(jt,"squareMonBaseColor");function H(e,n){return e[n]??0}s(H,"u8");function G(e,n){return e[n]??0}s(G,"u16");function m(e,n){return e[n]??0}s(m,"i32");function Ie(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}s(Ie,"at");function mo(e,n,t){return dt(tn[e.kind],nn(e.color),e.cooldown,n,t)}s(mo,"fastMonCellFromMon");function Qs(e){let n=new Uint8Array(121),t=lo(e);for(let o=0;o<121;o+=1){let r=t[o];if(r!==void 0)switch(r.kind){case"regular":n[o]=Vs;break;case"consumable-base":n[o]=zs;break;case"supermana-base":n[o]=on;break;case"mana-base":n[o]=Hs+nn(r.color);break;case"mana-pool":n[o]=_a+nn(r.color);break;case"mon-base":n[o]=ce+ve(tn[r.monKind],nn(r.color));break}}return n}s(Qs,"buildSquares");var qs=new Map($n.map(e=>[e,Qs(e)]));function fo(e){let n=qs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Oe(t)}}s(fo,"fastSquaresForVariant");var po=(()=>{let e=new Int32Array(_t).fill(-1),n=fo(Ie($n,0));for(let t of Rt){let o=se(t),r=H(n,o);r>=ce&&(e[r-ce]=o)}return e})();function Gt(e){let n=[],t=new Int32Array(121),o=new Int32Array(121);for(let r=0;r<121;r+=1){o[r]=n.length;let a=e(ct(r)).map(se).sort((i,u)=>i-u);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}s(Gt,"buildOffsetTable");var Ae=Gt(Qe),On=Gt(so),xn=Gt(co),bo=Gt(uo),ho=Gt(io),$s=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),i=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-i))}}return e})();function Se(e,n){return H($s,e*121+n)}s(Se,"chebyshev");function Ys(e,n){let t=Math.trunc(e/11),o=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((t+r)/2)*11+Math.trunc((o+a)/2)}s(Ys,"midpointCompute");var Xs=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1)for(let t=0;t<121;t+=1)e[n*121+t]=Ys(n,t);return e})();function yo(e,n){return H(Xs,e*121+n)}s(yo,"midpoint");var xa=(()=>{let e=[],n=fo(Ie($n,0));for(let t=0;t<121;t+=1)un(H(n,t))&&e.push(t);return new Int32Array(e)})(),dr=(()=>{let e=new Uint8Array(121*ae);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11,r=Math.min(o,10-o);for(let a=0;a<ae;a+=1){let i=a===0?10:0,u=Math.abs(i-t);e[a*121+n]=u>r?u:r}}return e})(),La=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(pa-Math.trunc(n/11));return e})(),ln=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<xa.length;o+=1){let r=Se(n,m(xa,o));r<t&&(t=r)}e[n]=t}return e})();function Zs(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}s(Zs,"xorshift");function Rn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}s(Rn,"randomTable");var _n=Zs(49734321),Na=3,ko=1+_t*Na,Js=Rn(_n,121*ko),ec=Rn(_n,121*ko),nc=Rn(_n,484),tc=Rn(_n,484),oc=Rn(_n,484),rc=Rn(_n,484),Ba=2048,go=Rn(_n,Ba),Ar=Rn(_n,Ba);function Fa(e){return j(e)!==X?0:1+ve(le(e),fe(e))*Na+de(e)}s(Fa,"monSlot");function Mo(e,n){return n===0?0:m(Js,e*ko+Fa(n))^m(nc,e*4+D(n))^m(oc,e*4+N(n))}s(Mo,"cellHashLo");function Co(e,n){return n===0?0:m(ec,e*ko+Fa(n))^m(tc,e*4+D(n))^m(rc,e*4+N(n))}s(Co,"cellHashHi");function mr(e,n){return e>=ke?y.White:n>=ke?y.Black:void 0}s(mr,"winnerForScores");function Io(e){return mr(e.whiteScore,e.blackScore)}s(Io,"winnerForState");function mt(e){return e.turnNumber===1}s(mt,"isFirstTurnState");function So(e){return e.activeColor===y.White?e.whitePotionsCount:e.blackPotionsCount}s(So,"currentPlayerPotions");function kn(e){return e<ie}s(kn,"canMoveMonForCounts");function Ua(e){return kn(e.monsMovesCount)}s(Ua,"canPlayerMoveMon");function Dn(e,n){return!e&&n<wn}s(Dn,"canMoveManaForCounts");function ja(e){return Dn(mt(e),e.manaMovesCount)}s(ja,"canPlayerMoveMana");function Eo(e,n,t){return!e&&(t>0||n<Ue)}s(Eo,"canUseActionForCounts");function Ga(e){return Eo(mt(e),e.actionsUsedCount,So(e))}s(Ga,"canPlayerUseAction");function Ka(e,n){if(n===void 0)return!0;let t=Q(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===I.Drainer&&!Ee(n.mon):e.kind==="consumable"&&e.consumable===O.BombOrPotion;case"mana":return t?.kind===I.Drainer&&!Ee(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===O.BombOrPotion;case"consumable":return n.consumable===O.BombOrPotion&&t!==void 0}}s(Ka,"spiritDestinationItemAllowed");function fr(e,n,t,o,r,a,i){if(!Dn(e,t))return!1;let u=kn(n);return!u&&!Eo(e,o,r)||!a||i&&!u&&o>=Ue&&r>0}s(fr,"shouldSuggestRegularManaStartsFromScalars");function Wa(e,n,t){return fr(mt(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,So(e),n,t)}s(Wa,"shouldSuggestRegularManaStarts");function pr(e,n,t,o){return e?!kn(n):Dn(e,t)?!kn(n)&&!o:!0}s(pr,"shouldAdvanceTurnForCounts");function Yn(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}s(Yn,"regularSquareForMovement");function br(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Yn(o)&&t.mon.kind===I.Drainer:t!==void 0?!1:Yn(o)}s(br,"regularManaMoveDestinationAllowed");function ac(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Qe(n))if(br(e.board,t))return!0;return!1}s(ac,"hasMovableFreeRegularMana");function Va(e){let n=mt(e),o=!(!n&&Dn(n,e.manaMovesCount)&&!kn(e.monsMovesCount))||ac(e);return pr(n,e.monsMovesCount,e.manaMovesCount,o)}s(Va,"shouldAdvanceTurn");var ft=0,vo=1,Sr=2,rn=3,Ln=4,Er=5,xe=127,Ge=0,dn=1,Nn=2,Pr=3,wo=-2,za=16,ic=Math.ceil(121*Uint16Array.BYTES_PER_ELEMENT/Int32Array.BYTES_PER_ELEMENT),yr=ic,kr=yr+_t,gr=kr+ae,Mr=gr+za,sc=Mr+ae;function Re(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}s(Re,"encodeMove");function pt(e){return e&7}s(pt,"moveType");function Ha(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(Ha,"sameSquares");function $e(e){return e>>3&127}s($e,"moveFrom");function _e(e){return e>>10&127}s(_e,"moveTo");function bt(e){return e>>17&127}s(bt,"moveAux");function Kt(e){return e>>24&3}s(Kt,"moveModifier");function hr(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}s(hr,"validateArrayLength");var Cr=class{static{s(this,"MutableFastPosition")}storage=new Int32Array(sc);cells=new Uint16Array(this.storage.buffer,0,121);squares=new Uint8Array(121);monLocations=this.storage.subarray(yr,yr+_t).fill(-1);freeMana=this.storage.subarray(kr,kr+ae);manaIndices=this.storage.subarray(gr,gr+za);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=this.storage.subarray(Mr,Mr+ae);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.storage.set(t.storage),this.squares=t.squares,this.manaCount=t.manaCount,this.whiteScore=t.whiteScore,this.blackScore=t.blackScore,this.active=t.active,this.monsMoves=t.monsMoves,this.manaMoves=t.manaMoves,this.actionsUsed=t.actionsUsed,this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){hr(n.cells,121,"cells"),hr(n.squares,121,"squares"),hr(n.potions,ae,"potions");let t;try{t=new Uint8Array(n.squares)}catch(d){Oe(d)}let o=0;for(let d=0;d<121;d+=1){let f=G(n.cells,d);if(!(f===0||j(f)!==ne)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,u=n.monsMoves,c=n.manaMoves,l=n.actionsUsed,A=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=u,this.manaMoves=c,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=A,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,t=0;for(let o=0;o<121;o+=1){let r=G(this.cells,o);if(r===0)continue;n^=Mo(o,r),t^=Co(o,r);let a=j(r);if(a===X)this.monLocations[ve(le(r),fe(r))]=o;else if(a===ne){let i=D(r);(i===1||i===2)&&(this.freeMana[i-1]=m(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},To=Cr;function Wt(e,n,t){let o=m(e.monLocations,ve(Bt,n));if(o<0)return!1;let r=G(e.cells,o);return j(r)===X&&le(r)===Bt&&fe(r)===n&&de(r)===0&&Se(o,t)===1}s(Wt,"awakeAngelGuards");function cc(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(m(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=m(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}s(cc,"removeManaIndex");function uc(e,n){let t=e.manaCount;if(t>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let o=t;for(;o>0&&m(e.manaIndices,o-1)>n;)e.manaIndices[o]=m(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}s(uc,"insertManaIndex");function z(e,n,t){let o=G(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=Mo(n,o),e.hashHi^=Co(n,o);let r=j(o);if(r===X){let a=ve(le(o),fe(o));m(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===ne){let a=D(o);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)-1),cc(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=Mo(n,t),e.hashHi^=Co(n,t);let r=j(t);if(r===X)e.monLocations[ve(le(t),fe(t))]=n;else if(r===ne){let a=D(t);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)+1),uc(e,n)}}}}s(z,"setCell");function Po(e){return dt(le(e),fe(e),de(e),0,0)}s(Po,"plainMonCell");function Xn(e,n,t){return dt(le(e),fe(e),de(e),n,t)}s(Xn,"carryingMonCell");function Qa(e,n){e.potions[n]=m(e.potions,n)+1}s(Qa,"addPotion");function Ir(e,n,t,o){if(D(n)===0&&N(n)===0&&o===dn){z(e,t,Xn(n,0,Pe));return}z(e,t,n),Qa(e,fe(n))}s(Ir,"collectConsumableAt");function lc(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}s(lc,"addScore");function vr(e){if(e.actionsUsed<Ue){e.actionsUsed+=1;return}e.potions[e.active]=m(e.potions,e.active)-1}s(vr,"consumeAction");function qa(e,n){let t=le(n),o=fe(n),r=m(po,ve(t,o));z(e,r,dt(t,o,2,0,0))}s(qa,"faintMonAt");function dc(e){let n=G(e.cells,ut);j(n)===X&&D(n)===0&&N(n)===0?z(e,ut,Xn(n,ge,0)):z(e,ut,Tn(ge))}s(dc,"supermanaBackToBase");function Ac(e,n,t){let o=D(n);if(o===ge?dc(e):o!==0&&z(e,t,Tn(o)),N(n)===Pe){let r=m(po,ve(le(n),fe(n)));t!==r&&z(e,t,0)}}s(Ac,"releaseFaintedCarry");function wr(e,n,t){qa(e,n),Ac(e,n,t)}s(wr,"faintTargetAndReleaseCarry");function Tr(e,n,t){lc(e,je(t,e.active));let o=G(e.cells,n);j(o)===X?z(e,n,Po(o)):z(e,n,0)}s(Tr,"scoreCarriedManaAt");function mc(e,n){let t=$e(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o),i=D(r);if(e.monsMoves+=1,z(e,t,0),z(e,o,r),a!==0){let u=j(a);u===ne?(i!==0&&z(e,t,Tn(i)),z(e,o,Xn(r,D(a),0))):u===ue&&N(a)===pe&&Ir(e,r,o,Kt(n))}i!==0&&un(H(e.squares,o))&&Tr(e,o,i)}s(mc,"applyMonMove");function fc(e,n){let t=$e(n),o=_e(n),r=D(G(e.cells,t)),a=G(e.cells,o);e.manaMoves+=1,z(e,t,0),z(e,o,Tn(r)),a!==0&&z(e,o,Xn(a,r,0)),un(H(e.squares,o))&&Tr(e,o,r)}s(fc,"applyManaMove");function pc(e,n){let t=_e(n),o=G(e.cells,t);vr(e),z(e,t,0),wr(e,o,t)}s(pc,"applyMysticAction");function bc(e,n){let t=$e(n),o=_e(n),r=Kt(n),a=r===Pr?xe:bt(n),i=G(e.cells,t),u=G(e.cells,o),c=m(po,ve(le(i),fe(i))),l=N(u)!==Pe||a===xe||a===c;return z(e,t,0),a===xe?z(e,o,Po(i)):z(e,o,0),vr(e),u!==0&&(wr(e,u,o),N(u)===Pe&&qa(e,i)),a!==xe&&(r===dn?z(e,a,Xn(i,0,Pe)):(z(e,a,Po(i)),r===Nn&&Qa(e,fe(i)))),l}s(bc,"applyDemonAction");function hc(e,n){let t=$e(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o);z(e,o,0),z(e,t,Po(r)),wr(e,a,o)}s(hc,"applyBombAttack");function yc(e,n){let t=_e(n),o=bt(n),r=Kt(n),a=G(e.cells,t),i=G(e.cells,o),u=D(a);if(vr(e),z(e,t,0),z(e,o,a),i!==0){let c=j(a);if(c===X){let l=j(i);l===ne?(u!==0&&z(e,t,Tn(u)),z(e,o,Xn(a,D(i),0))):l===ue&&Ir(e,a,o,r)}else c===ne?z(e,o,Xn(i,u,0)):c===ue&&Ir(e,i,o,r)}u!==0&&un(H(e.squares,o))&&Tr(e,o,u)}s(yc,"applySpiritAction");function Or(e){let n=mr(e.whiteScore,e.blackScore);return n===void 0?-1:nn(n)}s(Or,"positionWinner");function Oo(e){return Eo(e.firstTurn,e.actionsUsed,m(e.potions,e.active))}s(Oo,"canUseAction");function $a(e,n){return m(e.freeMana,e.active)===0?!1:fr(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,m(e.potions,e.active),n!==0,!0)}s($a,"manaStartsAllowed");function ht(e,n){if(!At(H(e.squares,n)))return!1;let t=G(e.cells,n);return t===0||j(t)===X&&le(t)===Ce&&D(t)===0&&N(t)===0}s(ht,"manaMoveAllowed");function kc(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=m(e.manaIndices,t),r=G(e.cells,o);if(j(r)!==ne||D(r)!==n)continue;let a=m(Ae.starts,o),i=m(Ae.counts,o);for(let u=0;u<i;u+=1){let c=m(Ae.list,a+u);if(ht(e,c))return!0}}return!1}s(kc,"hasMovableFreeRegularMana");function gc(e){let t=!(!e.firstTurn&&Dn(e.firstTurn,e.manaMoves)&&!kn(e.monsMoves))||m(e.freeMana,e.active)!==0&&kc(e);return pr(e.firstTurn,e.monsMoves,e.manaMoves,t)}s(gc,"shouldAdvanceTurn");function Mc(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let t=0;t<yn;t+=1){let o=m(e.monLocations,ve(t,n));if(o<0)continue;let r=G(e.cells,o),a=de(r);a===0||D(r)!==0||N(r)!==0||z(e,o,dt(le(r),fe(r),a-1,D(r),N(r)))}}s(Mc,"advanceTurn");function Ya(e,n){let t=e,o=pt(n),r=!0;switch(o){case ft:mc(t,n);break;case vo:fc(t,n);break;case Sr:pc(t,n);break;case rn:r=bc(t,n);break;case Ln:yc(t,n);break;case Er:hc(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=Or(t);return a===-1&&gc(t)&&Mc(t),r?a:wo}s(Ya,"applyFastMove");function Xa(e){switch(e){case O.Bomb:return Pe;case O.Potion:return Ra;case O.BombOrPotion:return pe}}s(Xa,"consumableCode");function Za(e){return e.kind==="supermana"?ge:nn(e.color)===0?Dt:Lt}s(Za,"manaCode");var Ja=2147483647;function ei(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>Ja-t||n.blackPotionsCount>Ja-t||n.turnNumber>Number.MAX_SAFE_INTEGER-t)return!1;let o;try{o=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(vn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=Q(a);if(i===void 0)continue;let u=ve(tn[i.kind],nn(i.color));if(o[u]!==0)return!1;o[u]=1}try{Cc(e,n)}catch(a){if(Ot(a))return!1;throw a}return!0}s(ei,"tryLoadPosition");function Cc(e,n){let t;try{t=new Uint16Array(121)}catch(r){Oe(r)}let o=n.board.items;for(let r=0;r<121;r+=1){let a=o[r];if(a!==void 0)switch(a.kind){case"mon":t[r]=mo(a.mon,0,0);break;case"mana":t[r]=Tn(Za(a.mana));break;case"mon-with-mana":t[r]=mo(a.mon,Za(a.mana),0);break;case"mon-with-consumable":t[r]=mo(a.mon,0,Xa(a.consumable));break;case"consumable":t[r]=Da(Xa(a.consumable));break}}e.reset({cells:t,squares:fo(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:nn(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}s(Cc,"loadPosition");function xo(e){return{kind:"location",location:ct(e)}}s(xo,"locationInput");function Ic(e){return{kind:"modifier",modifier:e===dn?J.SelectBomb:J.SelectPotion}}s(Ic,"modifierInput");function ni(e){let n=pt(e),t=[xo($e(e)),xo(_e(e))];n===Ln?t.push(xo(bt(e))):n===rn&&bt(e)!==xe&&t.push(xo(bt(e)));let o=Kt(e);return(o===dn||o===Nn)&&(n===ft||n===rn||n===Ln)&&t.push(Ic(o)),t}s(ni,"moveToInputs");var Ro=1e6,Sc=-2147483648,Ec=2147483647,Pc=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor","manaToNearestPool","manaStepQueue1","manaStepQueue2","manaStepQueue3","manaStepQueue4","manaStepQueue5","manaStepWinThreat","drainerTripTurn1","drainerTripTurn2","drainerTripTurn3","drainerTripTurn4","supermanaCarrier","scoreShape10","scoreShape20","scoreShape21","scoreShape30","scoreShape31","scoreShape32","tripGradient","raceHalfTurn","threatMoverScaleSpare","threatMoverScaleFew","tripTwoPointScale"];function Vt(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,t={scoreUnit:0,potion:0,bomb:0,activeMon:0,faintMon:0,faintDrainer:0,faintCooldownStep:0,drainerCloseToMana:0,drainerCloseToOwnPool:0,drainerCloseToSupermana:0,carrierCloseToPool:0,carrierPointBonus:0,carrierScoresThisTurn:0,carrierScoresNextTurn:0,winningCarrier:0,drainerPickupScoresThisTurn:0,manaToOwnerPool:0,manaPointsAttraction:0,manaDrainerControl:0,supermanaDrainerControl:0,monCloseToCenter:0,spiritCloseToEnemy:0,spiritOnOwnBase:0,angelCloseToDrainer:0,angelGuardingDrainer:0,attackerCloseToEnemyDrainer:0,drainerThreatImmediate:0,drainerThreatWalk:0,carrierThreatFactor:0,manaToNearestPool:0,manaStepQueue1:0,manaStepQueue2:0,manaStepQueue3:0,manaStepQueue4:0,manaStepQueue5:0,manaStepWinThreat:0,drainerTripTurn1:0,drainerTripTurn2:0,drainerTripTurn3:0,drainerTripTurn4:0,supermanaCarrier:0,scoreShape10:0,scoreShape20:0,scoreShape21:0,scoreShape30:0,scoreShape31:0,scoreShape32:0,tripGradient:0,raceHalfTurn:0,threatMoverScaleSpare:0,threatMoverScaleFew:0,tripTwoPointScale:0};for(let o of Pc){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-Ro||r>Ro)throw new RangeError(`weights.${o} must be a safe integer from -${Ro} through ${Ro}`);t[o]=r}return Object.freeze(t)}s(Vt,"normalizeEvalWeights");var Mn=Vt({scoreUnit:12e3,potion:240,bomb:1200,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:1600,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:8e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:2100,drainerThreatWalk:720,carrierThreatFactor:2,manaToNearestPool:0,manaStepQueue1:3600,manaStepQueue2:2500,manaStepQueue3:1050,manaStepQueue4:800,manaStepQueue5:800,manaStepWinThreat:8e3,drainerTripTurn1:4200,drainerTripTurn2:2200,drainerTripTurn3:1e3,drainerTripTurn4:400,supermanaCarrier:4e3,scoreShape10:-6824,scoreShape20:-6978,scoreShape21:-3085,scoreShape30:-8259,scoreShape31:-4275,scoreShape32:-1052,tripGradient:400,raceHalfTurn:900,threatMoverScaleSpare:25,threatMoverScaleFew:55,tripTwoPointScale:290}),zt=Vt({...Mn,threatMoverScaleSpare:35}),Do=Vt(Mn);var si=.5,vc="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",xr;function wc(){if(xr!==void 0)return xr;try{let e=new Int16Array(3025),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,o=0,r=0,a=0;for(let i of vc){if(i==="=")break;let u=n.indexOf(i);if(o=o<<6|u,t+=6,t<8)continue;t-=8;let c=o>>t&255;if(o&=(1<<t)-1,(r&1)===0)a=c;else{let l=a|c<<8;e[r>>1]=l>=32768?l-65536:l}r+=1}return xr=e,e}catch(e){Oe(e)}}s(wc,"memoizedLearnedProPhaseNumerators");var be=99,we=Math.max(be+1,11),ti=3,Ye=ke+2,_o=ie+1,Rr=0,ci=1,_r=2,Bn=3,ui=3,li=_o,Cn=6,oi=Cn*2+1,Ht=6,Dr=2,ri=12;function gn(e){let n=Fn(we);for(let t=0;t<we;t+=1)n[t]=Math.trunc(e/(t+1));return n}s(gn,"distanceTable");function Tc(e){let n=Fn(we),t=e.manaToNearestPool;for(let o=0;o<we;o+=1){let r=o<=1?e.manaStepQueue1:o===2?e.manaStepQueue2:o===3?e.manaStepQueue3:o===4?e.manaStepQueue4:e.manaStepQueue5;n[o]=r+Math.trunc(t/(o+1))}return n}s(Tc,"manaStepQueueTable");function Oc(e){let n=Fn(Ye*Ye),t=new Set,o=s((r,a,i)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let u=r*Ye+a,c=a*Ye+r;if(t.has(u)||t.has(c))throw new RangeError("score shape cells must be written once");t.add(u),t.add(c),n[u]=i,n[c]=-i},"set");o(1,0,e.scoreShape10),o(2,0,e.scoreShape20),o(2,1,e.scoreShape21),o(3,0,e.scoreShape30),o(3,1,e.scoreShape31),o(3,2,e.scoreShape32);for(let r=0;r+1<Ye;r+=1)for(let a=0;a<Ye;a+=1)if(e.scoreUnit+m(n,(r+1)*Ye+a)-m(n,r*Ye+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}s(Oc,"scoreShapeTable");function di(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=1+Math.ceil(t/ie);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}s(di,"drainerTripTable");function xc(e){let n=di(e);for(let t=0;t<we;t+=1)n[t]=fi(m(n,t),e.tripTwoPointScale,"two-point trip");return n}s(xc,"twoPointTripTable");function Rc(e){let n=Fn(oi);for(let t=0;t<oi;t+=1)n[t]=(t-Cn)*e;return n}s(Rc,"raceTable");function _c(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=t>ri?ri:t;n[t]=o*e}return n}s(_c,"tripStepTable");function Dc(e){let n=Fn(ti*we);for(let t=0;t<ti;t+=1){let o=t*we;for(let r=0;r<we;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}s(Dc,"manaPointsAttractionTable");function Ai(e,n){return n===Rr?100:n===_r?e.threatMoverScaleSpare:e.threatMoverScaleFew}s(Ai,"moverScale");function mi(e,n,t){let o=e*n;if(!Number.isSafeInteger(o))throw new RangeError(`${t} derived value requires a safe integer product`);return Math.trunc(o/100)}s(mi,"scaledSafeInteger");function fi(e,n,t){let o=mi(e,n,t);if(o<Sc||o>Ec)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}s(fi,"scaledInt32");function Lc(e){let n=Fn(2*Bn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1)n[t*Bn+r]=fi(e.drainerThreatImmediate*o,Ai(e,r),"immediate threat")}return n}s(Lc,"threatImmediateTable");function Nc(e){let n=Bc(2*Bn*_o);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1){let a=Ai(e,r),i=(t*Bn+r)*_o;for(let u=0;u<_o;u+=1)n[i+u]=mi(Math.trunc(e.drainerThreatWalk*o*(ie+1-u)/ie),a,"walking threat")}}return n}s(Nc,"threatWalkTable");function Fn(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(Fn,"createInt32Table");function Bc(e){try{return new Float64Array(e)}catch(n){Oe(n)}}s(Bc,"createFloat64Table");function Fc(e,n){let t=Cn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=ke-Dr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+m(n,o*Ye+r)-m(n,(o-1)*Ye+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}s(Fc,"assertRaceStaysMonotone");function pi(e){let n=Oc(e);return Fc(e,n),{weights:e,learnedPro:e===Do?wc():void 0,manaPointsAttraction:Dc(e.manaPointsAttraction),manaToOwnerPool:gn(e.manaToOwnerPool),manaToNearestPool:Tc(e),scoreShape:n,drainerTrip:di(e),drainerTripTwoPoint:xc(e),race:Rc(e.raceHalfTurn),tripStep:_c(e.tripGradient),carrierCloseToPool:gn(e.carrierCloseToPool),drainerCloseToMana:gn(e.drainerCloseToMana),drainerCloseToOwnPool:gn(e.drainerCloseToOwnPool),drainerCloseToSupermana:gn(e.drainerCloseToSupermana),angelCloseToDrainer:gn(e.angelCloseToDrainer),spiritCloseToEnemy:gn(e.spiritCloseToEnemy),monCloseToCenter:gn(e.monCloseToCenter),attackerCloseToEnemyDrainer:gn(e.attackerCloseToEnemyDrainer),threatImmediate:Lc(e),threatWalk:Nc(e)}}s(pi,"createEvalTables");var Lo=pi(Mn),ai=new WeakMap;function bi(e){if(e===Mn||e===zt||e===Do)return e;if(!Object.isFrozen(e))return Vt(e);let n=ai.get(e);return n===void 0&&(n=Vt(e),ai.set(e,n)),n}s(bi,"memoizedNormalizedEvalWeights");var ii=new WeakMap;function hi(e){if(e===Mn)return Lo;let n=ii.get(e);return n===void 0&&(n=pi(e),ii.set(e,n)),n}s(hi,"memoizedEvalTables");var Xe=1e6,yi=Int32Array.of(0,10,110,120);function Uc(e,n){for(let t=0;t<yi.length;t+=1){let o=m(yi,t);if(Se(n,o)===1&&ht(e,o))return!0}return!1}s(Uc,"hasAdjacentScoringPool");function jc(e,n){let t=e.whiteScore>e.blackScore?e.whiteScore:e.blackScore,o=(t<ke?t:ke-1)*605,r=e.monLocations,a=0,i=r[0]??0;i>=0&&(a+=n[o+i]??0);let u=r[1]??0;u>=0&&(a-=n[o+120-u]??0);let c=o+121,l=r[2]??0;l>=0&&(a+=n[c+l]??0);let A=r[3]??0;A>=0&&(a-=n[c+120-A]??0);let d=c+121,f=r[4]??0;f>=0&&(a+=n[d+f]??0);let b=r[5]??0;b>=0&&(a-=n[d+120-b]??0);let p=d+121,g=r[6]??0;g>=0&&(a+=n[p+g]??0);let k=r[7]??0;k>=0&&(a-=n[p+120-k]??0);let x=p+121,v=r[8]??0;v>=0&&(a+=n[x+v]??0);let M=r[9]??0;return M>=0&&(a-=n[x+120-M]??0),a*si}s(jc,"learnedProResidual");var Lr=new WeakMap,Qt,yt;function Gc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(Gc,"sameSquareContent");function Kc(e){try{let n=new Uint8Array(14641).fill(be),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let i=0;i<121;i+=1){let u=m(On.starts,i),c=m(On.counts,i);for(let d=0;d<121;d+=1){let f=be;for(let b=0;b<c;b+=1){let p=m(On.list,u+b);if(H(e,p)>=ce)continue;let g=Se(d,p);g<f&&(f=g)}n[i*121+d]=f}t[i]=r.length;let l=m(xn.starts,i),A=m(xn.counts,i);for(let d=0;d<A;d+=1){let f=m(xn.list,l+d);if(H(e,f)>=ce)continue;let b=yo(i,f),p=H(e,b);p===on||p>=ce||(r.push(f),a.push(b))}o[i]=r.length-m(t,i)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Oe(n)}}s(Kc,"buildAttackTables");function Wc(e){if(e===Qt&&yt!==void 0)return yt;let n=Lr.get(e);if(n!==void 0)return Qt=e,yt=n,n;if(yt!==void 0&&Gc(Qt,e)){let o=yt;return Lr.set(e,o),Qt=e,o}let t=Kc(e);return Lr.set(e,t),Qt=e,yt=t,t}s(Wc,"attackTablesFor");function Vc(e,n,t,o){let r=e.cells;if(!lt(r[n]??0))return be;let a=t^1,i=a!==e.active||Oo(e),u=be,c=Wc(e.squares);for(let l=0,A=a;l<yn;l+=1,A+=ae){let d=e.monLocations[A]??-1;if(d<0)continue;let f=r[d]??0;if(j(f)!==X)continue;let b=N(f);if(b===Pe){let k=Se(d,n)-3,x=k<0?0:k;if(x===0)return 0;x<u&&(u=x);continue}if(l!==Ft&&l!==Nt||!i||o||de(f)!==0||b!==0||D(f)!==0)continue;if(l===Ft){let k=c.mysticSteps[n*121+d]??0;if(k===0)return 0;k<u&&(u=k);continue}let p=c.demonStarts[n]??0,g=c.demonCounts[n]??0;for(let k=0;k<g;k+=1){let x=c.demonBetween[p+k]??0;if(x!==d&&r[x]!==0)continue;let v=Se(d,c.demonOrigins[p+k]??0);if(v===0)return 0;v<u&&(u=v)}}return u}s(Vc,"estimatedAttackSteps");function ki(e,n,t=0){let o=n.weights,r=e.cells,a=e.squares,i=e.monLocations,u=e.manaIndices,c=e.potions,l=(e.whiteScore-e.blackScore)*o.scoreUnit+(n.scoreShape[e.whiteScore*Ye+e.blackScore]??0)+((c[0]??0)-(c[1]??0))*o.potion,A=i[Ce*ae]??0,d=i[Ce*ae+1]??0,f=A>=0&&de(r[A]??0)===0,b=d>=0&&de(r[d]??0)===0,p=be,g=be,k=be,x=be,v=be,M=be,w=ie-e.monsMoves,C=t!==0,S=ke-e.whiteScore,P=ke-e.blackScore,L=0,U=Ht,T=Ht,me=Ht,Me=Ht,he=!1,mn=!1;if(C){if(A>=0){let E=r[A]??0;he=de(E)<=1&&D(E)===0&&N(E)===0}if(d>=0){let E=r[d]??0;mn=de(E)<=1&&D(E)===0&&N(E)===0}}let fn=0,Wn=0,nt=!1,Z=!1,De=0,We=0,Vn=0,Le=0;for(let E=0;E<e.manaCount;E+=1){let K=u[E]??0,Je=r[K]??0;if(j(Je)!==ne)continue;let q=D(Je),Te=f?Se(A,K):be,$=b?Se(d,K):be;Te<p&&(p=Te),$<g&&(g=$);let re=ln[K]??0;if(f){let B=Te+re;q===Dt&&B<k?k=B:q!==Dt&&B<v&&(v=B)}if(b){let B=$+re;q===Lt&&B<x?x=B:q!==Lt&&B<M&&(M=B)}if(C){let B=!1;if(q!==ge&&re<=1&&Uc(e,K)&&(B=!0,q-1===0?De<2&&(De+=1):We<2&&(We+=1)),he&&(f?Te:Se(A,K))+re<=ie){let F=je(q,0);F>fn?(fn=F,nt=B&&q-1===0):F===fn&&!(B&&q-1===0)&&(nt=!1)}if(mn&&(b?$:Se(d,K))+re<=ie){let F=je(q,1);F>Wn?(Wn=F,Z=B&&q-1===1):F===Wn&&!(B&&q-1===1)&&(Z=!1)}}let Ne=$-Te;if(Ne>4&&(Ne=4),Ne<-4&&(Ne=-4),o.manaPointsAttraction!==0){let B=n.manaPointsAttraction;f&&(l+=B[je(q,0)*we+Te]??0),b&&(l-=B[je(q,1)*we+$]??0)}if(q===ge)l+=o.supermanaDrainerControl*Ne;else{let B=q-1,ye=B===0?1:-1;l+=ye*(n.manaToOwnerPool[dr[B*121+K]??0]??0),l+=ye*(n.manaToNearestPool[re]??0),l+=o.manaDrainerControl*Ne,re<=2&&(B===0?S:P)<=1&&(L|=B===0?1:2),B===0?re<U&&(U=re):re<T&&(T=re)}}L!==0&&(l+=o.manaStepWinThreat*(((L&1)===0?0:1)-((L&2)===0?0:1)));for(let E=0;E<ae;E+=1){let K=E===0?1:-1,Je=E^1;for(let q=0,Te=E;q<yn;q+=1,Te+=ae){let $=i[Te]??0;if($<0)continue;let re=r[$]??0;if(j(re)!==X)continue;let Ne=de(re);Ne!==0&&(l-=K*((q===Ce?o.faintDrainer:o.faintMon)+o.faintCooldownStep*Ne));let B=a[$]??0;Ne===0&&B<ce&&(l+=K*o.activeMon);let ye=D(re);if(ye!==0){let F=je(ye,E),sn=ln[$]??0;l+=K*((n.carrierCloseToPool[sn]??0)+F*o.carrierPointBonus),ye===ge&&(l+=K*o.supermanaCarrier),E===e.active&&sn<=w?l+=K*o.carrierScoresThisTurn*F:E!==e.active&&sn<=ie&&(l+=K*o.carrierScoresNextTurn*F,C&&(E===0?F>Vn&&(Vn=F):F>Le&&(Le=F)));let Ve=E===0?e.whiteScore:e.blackScore;F>=ke-Ve&&(l+=K*o.winningCarrier)}else N(re)===Pe&&(l+=K*o.bomb);if(Ne===0)if(q===Ce){let F=0,sn=E===0?p:g,Ve=E===0?k:x,en=E===0?v:M,Xo=Ve<en?Ve:en,pn=E===e.active?w:ie,na=n.drainerTrip,to=ye!==0?ln[$]??0:N(re)!==0?be:Ve;ye===0&&N(re)===0&&en<be&&(Ve>=be||(n.drainerTripTwoPoint[en>pn?en-pn:0]??0)-(n.tripStep[en]??0)>(n.drainerTrip[Ve>pn?Ve-pn:0]??0)-(n.tripStep[Ve]??0))&&(na=n.drainerTripTwoPoint,to=en),F-=n.tripStep[to]??0;let ta=to>pn?to-pn:0,oo=1+((ta+ie-1)/ie|0);E===0?oo<me&&(me=oo):oo<Me&&(Me=oo),F+=na[ta]??0,F+=n.drainerCloseToMana[sn]??0,F+=n.drainerCloseToOwnPool[dr[E*121+$]??0]??0,F+=n.drainerCloseToSupermana[Se($,ut)]??0,ye===0&&N(re)===0&&E===e.active&&Xo<=w&&(F+=o.drainerPickupScoresThisTurn),l+=K*F;let oa=Wt(e,E,$),Zo=Vc(e,$,E,oa),As=ye!==0,ms=E!==e.active||w===0?Rr:w>=ui?_r:ci,ra=(As?Bn:0)+ms;Zo===0?l-=K*(n.threatImmediate[ra]??0):Zo<=ie&&(l-=K*(n.threatWalk[ra*li+Zo]??0)),oa&&(l+=K*o.angelGuardingDrainer)}else if(q===Bt){let F=E===0?A:d;F>=0&&(l+=K*(n.angelCloseToDrainer[Se($,F)]??0))}else if(q===Ao){let F=be;for(let sn=0,Ve=Je;sn<yn;sn+=1,Ve+=ae){let en=i[Ve]??0;if(en<0)continue;let Xo=r[en]??0;if(de(Xo)!==0)continue;let pn=Se($,en);pn<F&&(F=pn)}l+=K*(n.spiritCloseToEnemy[F]??0),B>=ce&&(l-=K*o.spiritOnOwnBase)}else{l+=K*(n.monCloseToCenter[La[$]??0]??0);let F=Je===0?A:d,sn=Je===0?f:b;F>=0&&sn&&(l+=K*(n.attackerCloseToEnemyDrainer[Se($,F)]??0))}}}if(o.raceHalfTurn!==0&&(S<P?S:P)<=Dr){let E=e.manaMoves>0?1:0,K=U+(e.active===0?E:0),Je=T+(e.active===1?E:0),q=me<K?me:K,$=(Me<Je?Me:Je)*2+(e.active===1?0:1)-(q*2+(e.active===0?0:1)),re=$>Cn?Cn:$<-Cn?-Cn:$;l+=n.race[re+Cn]??0}if(C){let E=e.active^1,K=E===0?1:-1,Je=E===0?fn:Wn,q=E===0?Vn:Le,Te=E===0?De:We,$=Te>0,re=E===0?nt:Z,Ne=Te>=2||Te===1&&!re,B=Je;B>0&&Ne&&(B+=1);let ye=q;ye>0&&$&&(ye+=1),ye>B&&(B=ye),$&&B<1&&(B=1);let F=E===0?e.whiteScore:e.blackScore;B>0&&F+B>=ke&&(l+=K*t)}return n.learnedPro!==void 0&&(l+=jc(e,n.learnedPro)),l}s(ki,"evaluateWithTables");var In=704,No=1073741824;function Un(e,n){return n?e+No:e}s(Un,"encodeGeneratedMoves");function qt(e){return e>=No?e-No:e}s(qt,"generatedMoveCount");function $t(e){return e>=No}s($t,"generatedMovesHadRawStartOption");function Nr(e,n){return j(e)===X&&fe(e)!==n&&de(e)===0}s(Nr,"isEnemyAwakeMon");function Br(e){let n=131072;return D(e)!==0&&(n+=1<<20),le(e)===Ce&&(n+=1<<19),n}s(Br,"damagingAttackKey");function zc(e,n,t){let o=G(e.cells,t),r=H(e.squares,t),a=j(n),i=a===X,u=D(n),c=N(n),l=o===0?-1:j(o),A=l===X&&(D(o)!==0||N(o)!==0);if(l===X)if(A){if(a!==ue||c!==pe)return 0}else{if(i)return 0;if(a===ne){if(le(o)!==Ce||de(o)!==0)return 0}else if(c!==pe)return 0}else if(l===ne){if(!i||le(n)!==Ce||de(n)!==0)return 0}else if(l===ue&&(N(o)!==pe||!i))return 0;if(r>=ce){if(!i||Ut(r)!==le(n)||jt(r)!==fe(n)||u!==0||c!==0)return 0}else if(r===on){let d=l===ne&&D(o)===ge,f=i&&le(n)===Ce;if(!(u===ge||u===0&&f&&(o===0||d)||f&&d))return 0}return o===0?1:i?u===0&&c===0?l===ue?N(o)===pe?2:0:1:u!==0?l===ue?N(o)===pe?1:0:1:l!==ue||N(o)!==pe?0:1:a===ne?l!==X||A?0:1:l!==X?0:A?c===pe?1:0:2}s(zc,"spiritDestinationOptionCount");function Hc(e,n,t,o,r,a){let i=r,u=!1,c=le(t),l=fe(t),A=D(t),d=N(t),f=e.active,b=e.cells,p=e.squares,g=Ae.list,k=ln[n]??0,x=c===Ce?1024:0,v=n<<3|xe<<17,M=Ae.starts[n]??0,w=Ae.counts[n]??0;if(A!==0){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(U===X||U!==ne&&U!==ue&&!At(L)&&(L!==on||A!==ge)||(u=!0,U===ue&&N(P)!==pe))continue;let T=0;un(L)&&(T+=(1<<21)+je(A,f)*(1<<18)),U===ne?T+=65536+je(D(P),f)*512:U===ue&&(T+=16384),a[i]=T+(k-(ln[S]??0))*2048+4096,o[i]=v|S<<10|Ge<<24,i+=1}return Un(i,u)}if(d!==0){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=P===0?-1:j(P);if(L===ue){if(u=!0,N(P)!==pe)continue;a[i]=x+16384}else{if(L!==-1||!At(p[S]??0))continue;u=!0,a[i]=x}o[i]=v|S<<10|Ge<<24,i+=1}return Un(i,u)}if(c===Ce){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(U===X)continue;if(L>=ce){if(Ut(L)!==Ce||jt(L)!==l)continue}else if(L===on&&P!==0&&(U!==ne||D(P)!==ge))continue;if(u=!0,U===ue&&N(P)!==pe)continue;let T=1024;U===ne?T+=65536+je(D(P),f)*512:U===ue&&(T+=16384),U===ue&&N(P)===pe?(a[i]=T,o[i]=v|S<<10|dn<<24,i+=1,a[i]=T,o[i]=v|S<<10|Nn<<24,i+=1):(a[i]=T,o[i]=v|S<<10|Ge<<24,i+=1)}return Un(i,u)}for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(!(U===X||U===ne)){if(L>=ce){if(Ut(L)!==c||jt(L)!==l)continue}else if(L===on)continue;if(u=!0,U===ue){if(N(P)!==pe)continue;a[i]=16384,o[i]=v|S<<10|dn<<24,i+=1,a[i]=16384,o[i]=v|S<<10|Nn<<24,i+=1}else a[i]=0,o[i]=v|S<<10|Ge<<24,i+=1}}return Un(i,u)}s(Hc,"generateMonMoves");function Qc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=m(On.starts,n),l=m(On.counts,n);for(let A=0;A<l;A+=1){let d=m(On.list,c+A),f=G(e.cells,d);Nr(f,a)&&(Wt(e,a^1,d)||(u=!0,lt(f)&&(r[i]=Br(f),t[i]=Re(Sr,n,d,xe,Ge),i+=1)))}return Un(i,u)}s(Qc,"generateMysticMoves");function qc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=Nt,l=a,A=m(xn.starts,n),d=m(xn.counts,n);for(let f=0;f<d;f+=1){let b=m(xn.list,A+f),p=G(e.cells,b);if(!Nr(p,a)||Wt(e,a^1,b))continue;let g=yo(n,b);if(G(e.cells,g)!==0)continue;let k=H(e.squares,g);if(k===on||k>=ce||(u=!0,!lt(p)))continue;let x=Br(p),v=H(e.squares,b),M=D(p);if(!(!(N(p)===Pe)&&(M!==0&&M!==ge||v===on||v>=ce))){r[i]=x,t[i]=Re(rn,n,b,xe,Ge),i+=1;continue}let S=i,P=m(Ae.starts,b),L=m(Ae.counts,b);for(let U=0;U<L;U+=1){let T=m(Ae.list,P+U),me=G(e.cells,T),Me=me===0?-1:j(me);if(Me!==-1&&Me!==ue)continue;let he=H(e.squares,T);(At(he)||he>=ce&&Ut(he)===c&&jt(he)===l)&&(Me===ue?N(me)===pe?(r[i]=x,t[i]=Re(rn,n,b,T,dn),i+=1,r[i]=x,t[i]=Re(rn,n,b,T,Nn),i+=1):(r[i]=x,t[i]=Re(rn,n,b,T,Pr),i+=1):(r[i]=x,t[i]=Re(rn,n,b,T,Ge),i+=1))}i===S&&(r[i]=x,t[i]=Re(rn,n,b,xe,Ge),i+=1)}return Un(i,u)}s(qc,"generateDemonMoves");function $c(e,n,t,o,r){let a=o,i=!1,u=e.active,c=m(bo.starts,n),l=m(bo.counts,n);for(let A=0;A<l;A+=1){let d=m(bo.list,c+A),f=G(e.cells,d);if(f===0||j(f)===X&&de(f)!==0)continue;i=!0;let b=D(f),p=j(f)===ne,g=H(ln,d),k=(1<<21)+je(b,u)*(1<<18),x=m(Ae.starts,d),v=m(Ae.counts,d);for(let M=0;M<v;M+=1){let w=m(Ae.list,x+M),C=zc(e,f,w);if(C===0)continue;let S=0;b!==0&&un(H(e.squares,w))?S+=8192+k:p&&Yc(e,w,g,u)&&(S+=40960),C===2?(r[a]=S,t[a]=Re(Ln,n,d,w,dn),a+=1,r[a]=S,t[a]=Re(Ln,n,d,w,Nn),a+=1):(r[a]=S,t[a]=Re(Ln,n,d,w,Ge),a+=1)}}return Un(a,i)}s($c,"generateSpiritMoves");function Yc(e,n,t,o){if(H(ln,n)<t)return!0;let r=G(e.cells,n);return j(r)===X&&le(r)===Ce&&fe(r)===o&&de(r)===0}s(Yc,"advancesMana");function Xc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=m(ho.starts,n),l=m(ho.counts,n);for(let A=0;A<l;A+=1){let d=m(ho.list,c+A),f=G(e.cells,d);Nr(f,a)&&(u=!0,lt(f)&&(r[i]=Br(f),t[i]=Re(Er,n,d,xe,Ge),i+=1))}return Un(i,u)}s(Xc,"generateBombMoves");function Zc(e,n,t,o,r){let a=o,i=m(Ae.starts,n),u=m(Ae.counts,n);for(let c=0;c<u;c+=1){let l=m(Ae.list,i+c),A=H(e.squares,l);ht(e,l)&&(r[a]=un(A)?(1<<21)+(1<<18):16,t[a]=Re(vo,n,l,xe,Ge),a+=1)}return a}s(Zc,"generateManaMoves");function Jc(e,n,t,o,r){let a=o;if(H(ln,n)!==1)return a;let i=m(Ae.starts,n),u=m(Ae.counts,n);for(let c=0;c<u;c+=1){let l=m(Ae.list,i+c),A=H(e.squares,l);!un(A)||!ht(e,l)||(r[a]=(1<<21)+(1<<18),t[a]=Re(vo,n,l,xe,Ge),a+=1)}return a}s(Jc,"generateWinningManaMoves");var eu=new Int32Array(In);function Fr(e,n,t=eu){let o=e.active,r=kn(e.monsMoves),a=Oo(e),i=0,u=0;for(let c=0;c<yn;c+=1){let l=m(e.monLocations,ve(c,o));if(l<0)continue;let A=G(e.cells,l);if(j(A)!==X)continue;let d=!1,f=D(A),b=N(A),p=f!==0||b!==0;if(!(!p&&de(A)!==0)){if(r){let g=Hc(e,l,A,n,i,t);i=qt(g),d||=$t(g)}if(p){if(b===Pe){let g=Xc(e,l,n,i,t);i=qt(g),d||=$t(g)}}else if(H(e.squares,l)<ce&&a){if(c===Ft){let k=Qc(e,l,n,i,t);i=qt(k),d||=$t(k)}else if(c===Nt){let k=qc(e,l,n,i,t);i=qt(k),d||=$t(k)}else if(c===Ao){let k=$c(e,l,n,i,t);i=qt(k),d||=$t(k)}}d&&(u+=1)}}if($a(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let A=m(e.manaIndices,l),d=G(e.cells,A);j(d)===ne&&D(d)===c&&(i=Zc(e,A,n,i,t))}}else if(m(e.freeMana,o)!==0&&Dn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=ke){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let A=m(e.manaIndices,l),d=G(e.cells,A);j(d)===ne&&D(d)===c&&(i=Jc(e,A,n,i,t))}}if(i>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${i} moves for ${n.length} slots`);return i}s(Fr,"generateMoves");var Ke=48,Bo=Ke-2,jn=Xe-Ke-1,Fo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),gi=new WeakMap;function Ii(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return Mi(e);let t=gi.get(e);return t===void 0&&(t=Mi(e),gi.set(e,t)),t}s(Ii,"memoizedSearchLimits");function Mi(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,t=n.maxDepth;if(!Number.isSafeInteger(t)||t<0||t>Bo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Bo}`);let o=n.maxNodes;if(!Number.isSafeInteger(o)||o<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:t,maxNodes:o,tuning:r===void 0?Fo:nu(r)})}s(Mi,"normalizeSearchLimits");function nu(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:Ci(n,"lateMoveReduction"),lateMoveIndex:Sn(n,"lateMoveIndex",In),lateMoveDeepIndex:Sn(n,"lateMoveDeepIndex",In),moveCountPruning:Ci(n,"moveCountPruning"),moveCountDepth:Sn(n,"moveCountDepth",Bo),moveCountBase:Sn(n,"moveCountBase",In),moveCountFactor:Sn(n,"moveCountFactor",In),futilityMargin:Sn(n,"futilityMargin",jn),aspirationDelta:Sn(n,"aspirationDelta",jn),aspirationMinDepth:Sn(n,"aspirationMinDepth",Bo),winsNextTurnThreat:Sn(n,"winsNextTurnThreat",jn)})}s(nu,"normalizeSearchTuning");function Ci(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}s(Ci,"normalizedTuningBoolean");function Sn(e,n,t){let o=e[n];if(typeof o!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(o)||o<0||o>t)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${t}`);return o}s(Sn,"normalizedTuningInteger");var Zn=1<<20,Yt=new Int32Array(0);function Xt(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(Xt,"allocateTranspositionPart");var Uo=class{static{s(this,"TranspositionTable")}keyLo=Yt;keyHi=Yt;score=Yt;info=Yt;move=Yt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=Zn-1,!0;if(n())return!1;let t=Xt(Zn);if(n())return!1;let o=Xt(Zn);if(n())return!1;let r=Xt(Zn);if(n())return!1;let a=Xt(Zn);if(n())return!1;let i=Xt(Zn);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=Zn-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}},Si=ae,Ei=ie+1,Pi=wn+1,vi=Ue+1,wi=2,Ur=4,tu=Si*Ei*Pi*vi*wi*Ur*Ur;if(go.length!==Ar.length||go.length<tu)throw new RangeError("fast scalar hash table is too small for the configured state space");function jr(e){let n=m(e.potions,0),t=m(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+Ur*a,a=(e.firstTurn?1:0)+wi*a,a=e.actionsUsed+vi*a,a=e.manaMoves+Pi*a,a=e.monsMoves+Ei*a,e.active+Si*a}s(jr,"scalarIndex");function Gr(e,n,t=0){return e.hashLo^m(go,n)^e.whiteScore*2654435761^e.blackScore*2135587861^m(e.potions,0)^Math.imul(t,668265261)}s(Gr,"stateKeyLo");function Kr(e,n,t=0){return e.hashHi^m(Ar,n)^e.whiteScore*2246822507^e.blackScore*3266489909^m(e.potions,1)^Math.imul(t,374761393)}s(Kr,"stateKeyHi");var ou=16,Bi=1<<ou,ru=Bi-1,au=1<<30,Ti=0,Oi=1,jo=2,iu=3,xi=1<<30,Ri=4194303,su=2047,cu=32768,_i=1<<28,Di=1<<24,Li=1<<23,Gn=Xe*2,Ni=s(()=>!1,"NO_TIMEOUT");function Wr(e,n,t,o,r,a,i,u,c){if(o===0){let M=0,w=-2147483648,C=1,S=-2147483648,P=-2147483648,L=1,U=-2147483648;for(let T=0;T<t;T+=1){let me=m(e,T),Me=m(n,T);if(me===r)Me+=_i;else if(me===a)Me+=Di;else if(me===i)Me+=Li;else{let mn=m(u,c+$e(me)*121+_e(me));Me+=mn>8191?8191:mn}n[T]=Me;let he=m(n,T);if(T===0){P=he,w=he;continue}he>w?(w=he,M=T,U>=P?(S=U,C=L):(S=P,C=T)):(T===1||he>S)&&(S=he,C=T),(T===1||he>U)&&(U=he,L=T)}if(M!==0){let T=m(e,0);e[0]=m(e,M),e[M]=T,n[M]=m(n,0),n[0]=w}if(t>1&&C!==1){let T=m(e,1);e[1]=m(e,C),e[C]=T,n[C]=m(n,1),n[1]=S}return t}let l=$e(o),A=_e(o),d=0,f=0,b=-2147483648,p=1,g=-2147483648,k=-2147483648,x=1,v=-2147483648;for(let M=0;M<t;M+=1){let w=m(e,M);if(pt(w)===ft&&w<o){let P=$e(w),L=_e(w);if(P!==l&&P!==A&&L!==l&&L!==A)continue}let C=m(n,M);if(w===r)C+=_i;else if(w===a)C+=Di;else if(w===i)C+=Li;else{let P=m(u,c+$e(w)*121+_e(w));C+=P>8191?8191:P}d!==M&&(e[d]=w),n[d]=C;let S=m(n,d);d===0?(k=S,b=S):(S>b?(b=S,f=d,v>=k?(g=v,p=x):(g=k,p=d)):(d===1||S>g)&&(g=S,p=d),(d===1||S>v)&&(v=S,x=d)),d+=1}if(d===0)return Wr(e,n,t,0,r,a,i,u,c);if(f!==0){let M=m(e,0);e[0]=m(e,f),e[f]=M,n[f]=m(n,0),n[0]=b}if(d>1&&p!==1){let M=m(e,1);e[1]=m(e,p),e[p]=M,n[p]=m(n,1),n[1]=g}return d}s(Wr,"orderMoves");var Go=class{static{s(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(Ke*2);#a=new Int32Array(ae*121*121);#y=new Int32Array(Ke+1);#s=new Int32Array(Bi*4);#c=0;#k;#A=0;#g;#m=Lo;#u=!1;#h=Fo;#f=0;#p=0;#E=0;#l=!1;#M=!1;#i=0;#C=0;#I=Ni;constructor(){this.#o=new Uo;for(let n=0;n<=Ke;n+=1)this.#e.push(new To),this.#n.push(new Int32Array(In)),this.#t.push(new Int32Array(In))}get root(){return Ie(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Mn){let r=Ii(n),a=bi(o);if(this.#M=!1,this.#u=!1,this.#i=0,this.#C=0,Or(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#m=hi(a),this.#u=a===zt;let i=r.tuning;this.#h=i,this.#f=i.winsNextTurnThreat;let u=!Ha(this.#g,this.root.squares);(a!==this.#k||i.winsNextTurnThreat!==this.#A||u)&&(this.#k=a,this.#A=i.winsNextTurnThreat,this.#g=this.root.squares,this.#c>=au&&(this.#c=0,this.#s.fill(0)),this.#c+=1),this.#p=0,this.#E=r.maxNodes,this.#l=!1,this.#I=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let c=0,l=0,A=0;for(let d=1;d<=r.maxDepth;d+=1){if(d===2){if(this.#p>=this.#E||!this.#o.prepare(this.#I)){this.#l=!0;break}this.#R()}let f=-Gn,b=Gn;i.aspirationDelta>0&&A>0&&d>=i.aspirationMinDepth&&(f=l-i.aspirationDelta,b=l+i.aspirationDelta);let p=this.#v(d,c,f,b,c),g=0;for(;!this.#d()&&p.provenWin!==!0&&p.move!==0&&(p.score<=f||p.score>=b)&&(f>-Gn||b<Gn);){g+=1;let k=i.aspirationDelta*(1<<g);p.score<=f&&(f=g>=2?-Gn:p.score-k),p.score>=b&&(b=g>=2?Gn:p.score+k),p=this.#v(d,p.move,f,b,c)}if(p.move===0)break;if(this.#d()){(A===0||this.#m.learnedPro!==void 0&&p.verifiedChallenger===!0&&!this.#M)&&(c=p.move,l=p.score);break}if(c=p.move,l=p.score,A=d,!p.selective&&l>=Xe-Ke)break}return{move:c,score:l,depth:A,nodes:this.#p,supported:!this.#M}}finally{this.#o.deactivate(),this.#m=Lo,this.#u=!1,this.#h=Fo,this.#f=0,this.#I=Ni}}#R(){this.#o.generation+=1,this.#o.generation>Ri&&this.#o.clear()}#v(n,t,o,r,a){let i=Ie(this.#e,0),u=Ie(this.#n,0),c=Fr(i,u,Ie(this.#t,0));if(c===0)return{move:0,score:0,selective:!1};Wr(u,Ie(this.#t,0),c,0,t,m(this.#r,0),m(this.#r,1),this.#a,i.active*121*121);let l=Ie(this.#t,0),A=o,d=0,f=-Gn,b=!1,p=!1;for(let g=0;g<c;g+=1){g>=2&&this.#x(u,l,g,c);let k=m(u,g),x=this.#C,v=this.#w(i,k,0),M,w=this.#i,C,S=g===0;if(g===0)M=this.#b(i,v,0,n-1,A,r),C=this.#i!==w;else if(M=this.#b(i,v,0,n-1,A,A+1),C=this.#i!==w,M>A&&!this.#d()){if(!C&&this.#C===x&&M>=Xe-Ke)return{move:k,score:M,selective:!1,provenWin:!0};w=this.#i,M=this.#b(i,v,0,n-1,A,r),S=!0,C=this.#i!==w}if(this.#d()||(M>f&&(f=M,d=k,b=C,p=S&&M>A&&a!==0&&m(u,0)===a&&k!==a,M>A&&(A=M)),A>=r))break}return d===0&&(d=m(u,0),f=0,b=!0),{move:d,score:f,selective:b,verifiedChallenger:p}}#w(n,t,o){let r=Ie(this.#e,o+1);r.copyFrom(n),this.#y[o]=t;let a=Ya(r,t);return r.active!==n.active&&(this.#C+=1),a===wo&&(this.#M=!0,this.#l=!0),a}#b(n,t,o,r,a,i){let u=Ie(this.#e,o+1);return t===wo?0:t!==-1?t===n.active?Xe-o:-(Xe-o):u.active===n.active?this.#T(r,o+1,a,i):-this.#T(r,o+1,-i,-a)}#T(n,t,o,r){if(!this.#P())return 0;let a=Ie(this.#e,t);if(t>=Ke-2)return this.#S(a);if(n<=0)return this.#S(a);let i=o,u=this.#_(a,t),c=jr(a),l=Gr(a,c,u),A=Kr(a,c,u),d=this.#o,f=(l^A*3)&d.mask,b=0,p=m(d.info,f),g=m(d.keyLo,f)===l&&m(d.keyHi,f)===A&&(p>>>8&Ri)===d.generation;if(g){b=m(d.move,f);let Z=p>>2&63;if(Z>=n){let De=m(d.score,f)/2,We=p&3;if((p&xi)!==0){if(this.#u&&Z===n&&We===jo&&De<=i)return this.#i+=1,De}else if(We===Ti||We===Oi&&De>=r||We===jo&&De<=i)return De}}let k=this.#h,x=Ie(this.#n,t),v=Fr(a,x,Ie(this.#t,t));if(v===0)return this.#S(a,l^Math.imul(u,668265261),A^Math.imul(u,374761393));let M=Ie(this.#t,t);v=Wr(x,M,v,u,b,m(this.#r,t*2),m(this.#r,t*2+1),this.#a,a.active*121*121);let w=v;if(k.moveCountPruning&&n<=k.moveCountDepth){let Z=k.moveCountBase+k.moveCountFactor*n;Z<w&&(w=Z)}let C=n<=2;if(C&&!this.#P()||this.#d())return 0;let S=!1,P=!1,L=0,U=!1,T=-Gn,me=0,Me=this.#i;for(let Z=0;Z<v;Z+=1){Z>=2&&this.#x(x,M,Z,v);let De=m(x,Z),We=m(M,Z)>=cu;if(!We&&me!==0){let E=Z>=w;if(!E&&C&&(S||(L=this.#O(a,l^Math.imul(u,668265261),A^Math.imul(u,374761393))+k.futilityMargin*n,P=L<=o,S=!0),E=P,P&&(U=!0)),E){this.#i+=1;break}}let Vn=this.#w(a,De,t),Le;if(Z===0)Le=this.#b(a,Vn,t,n-1,i,r);else{let E=0;k.lateMoveReduction&&!We&&n>=3&&Z>=k.lateMoveIndex&&(E=Z>=k.lateMoveDeepIndex?2:1,E>=n&&(E=n-1)),Le=this.#b(a,Vn,t,n-1-E,i,i+1),!this.#d()&&Le>i&&(E>0||Le<r)&&(Le=this.#b(a,Vn,t,n-1,i,r))}if(this.#d())return 0;if(Le>T&&(T=Le,me=De),Le>i&&(i=Le),i>=r){this.#D(a,De,t,n,We);break}}if(me===0)return this.#S(a);let mn=this.#i!==Me?iu:T>=r?Oi:T<=o?jo:Ti,fn=T,Wn=0;if(this.#u&&U&&T<=o){let Z=T>L?T:L;Z<Xe-Ke&&Z>-Xe+Ke&&(mn=jo,fn=Z,Wn=xi)}let nt=n;if(fn<Xe-Ke&&fn>-Xe+Ke){let Z=p>>2&63;(!g||nt>=Z)&&(p===0&&m(d.info,f)===0&&(d.entries+=1),d.keyLo[f]=l,d.keyHi[f]=A,d.score[f]=fn*2,d.info[f]=Wn|d.generation<<8|nt<<2|mn,d.move[f]=me)}return T}#_(n,t){if(t===0)return 0;let o=m(this.#y,t-1);return pt(o)===ft&&Ie(this.#e,t-1).active===n.active?o:0}#d(){return this.#l}#P(){return this.#l?!1:this.#p>=this.#E?(this.#l=!0,!1):(this.#p+=1,(this.#p&su)===0&&this.#I()?(this.#l=!0,!1):!0)}#O(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=jr(n);r=Gr(n,l),a=Kr(n,l)}let i=((r^a*3)&ru)<<2,u=this.#s,c;return m(u,i+2)===this.#c&&m(u,i)===r&&m(u,i+1)===a?c=m(u,i+3)/2:(c=ki(n,this.#m,this.#f),c>jn?c=jn:c<-jn&&(c=-jn),u[i]=r,u[i+1]=a,u[i+2]=this.#c,u[i+3]=c*2),n.active===0?c:-c}#S(n,t,o){return this.#P()?this.#O(n,t,o):0}#D(n,t,o,r,a){if(a)return;let i=o*2;m(this.#r,i)!==t&&(this.#r[i+1]=m(this.#r,i),this.#r[i]=t);let u=n.active*121*121+$e(t)*121+_e(t),c=m(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#x(n,t,o,r){let a=o,i=m(t,o);for(let c=o+1;c<r;c+=1){let l=m(t,c);l>i&&(i=l,a=c)}if(a===o)return;let u=m(n,o);n[o]=m(n,a),n[a]=u,t[a]=m(t,o),t[o]=i}};var uu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),lu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),du=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),Au=Object.freeze({fast:Object.freeze({budgetMs:50,weights:Mn,limits:Object.freeze({maxDepth:40,maxNodes:39936,tuning:lu})}),normal:Object.freeze({budgetMs:150,weights:zt,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:uu})}),pro:Object.freeze({budgetMs:650,weights:Do,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:du})})});function mu(){return globalThis.performance.now()}s(mu,"systemClock");function Fi(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}s(Fi,"readClock");function fu(){return globalThis.WeakRef}s(fu,"weakRefConstructor");var Vr=class{static{s(this,"FastSearcherPool")}#e;run(n){let t=fu(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new Go}catch(r){if(r instanceof RangeError)return Tt;throw r}this.#e=void 0;try{return n(o)}catch(r){if(Ot(r))return Tt;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},pu=new Vr;function zr(e,n,t=mu){let o=Au[n],r=Fi(t)+o.budgetMs,a=!1,i=s(()=>a?!0:(a=Fi(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||i())return{kind:"fallback"};let u;try{u=new To}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!ei(u,e,o.limits.maxDepth)||i())return{kind:"fallback"};let c=pu.run(l=>{if(!i()&&(l.root.copyFrom(u),!i()))return l.search(o.limits,i,o.weights)});return c===void 0||Ot(c)||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:ni(c.move)}}s(zr,"selectPackedInputs");function Ui(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}s(Ui,"inputTag");function bu(e,n){let t=Ui(e)-Ui(n);return t!==0?t:e.kind==="location"&&n.kind==="location"?e.location.i-n.location.i||e.location.j-n.location.j:e.kind==="modifier"&&n.kind==="modifier"?tr[e.modifier]-tr[n.modifier]:0}s(bu,"compareInputs");function hu(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:n}));case"next-input-options":return e.nextInputs.map(({input:n})=>n)}}s(hu,"nextInputs");function Hr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}s(Hr,"applyInputs");function ji(e){let n=e.fork(),t=[],o=s(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,cr):n.inspectInputGrammar(t,cr);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&Hr(n,t)!==void 0;if(t.length===ot)return!1;let a=hu(r)?.sort(bu);if(a===void 0||a.length===0)return!1;for(let i of a){if(t.push(i),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}s(ji,"deterministicLegalFallbackInputs");function Gi(e,n,t){let o=e.fen(),r=t===void 0?zr(e,n):zr(e,n,t),a=r.kind==="selected"?r.inputs:ji(e),i=Hr(e,a);if(i===void 0&&r.kind==="selected"&&(a=ji(e),i=Hr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:i,inputFen:st(a)}}s(Gi,"suggestMove");function Zt(e){return e===y.White?"w":"b"}s(Zt,"colorFen");function Ze(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case I.Demon:return"e";case I.Drainer:return"d";case I.Angel:return"a";case I.Spirit:return"s";case I.Mystic:return"y"}})();return`${e.color===y.White?n.toUpperCase():n}${e.cooldown}`}s(Ze,"monFen");function yu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=y.White,o=I.Demon;break;case 101:t=y.Black,o=I.Demon;break;case 68:t=y.White,o=I.Drainer;break;case 100:t=y.Black,o=I.Drainer;break;case 65:t=y.White,o=I.Angel;break;case 97:t=y.Black,o=I.Angel;break;case 83:t=y.White,o=I.Spirit;break;case 115:t=y.Black,o=I.Spirit;break;case 89:t=y.White,o=I.Mystic;break;case 121:t=y.Black,o=I.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Hn(o,t,r-48)}s(yu,"parseMonFenAt");function Jn(e){return e.kind==="supermana"?"U":e.color===y.White?"M":"m"}s(Jn,"manaFen");function Ki(e){switch(e){case 77:return rt(y.White);case 109:return rt(y.Black);case 85:return En;default:return}}s(Ki,"parseManaCode");function Wi(e){switch(e){case O.Potion:return"P";case O.Bomb:return"B";case O.BombOrPotion:return"Q"}}s(Wi,"consumableFen");function Vi(e){switch(e){case 80:return O.Potion;case 66:return O.Bomb;case 81:return O.BombOrPotion;default:return}}s(Vi,"parseConsumableCode");function kt(e){switch(e.kind){case"mon":return`${Ze(e.mon)}x`;case"mana":return`xx${Jn(e.mana)}`;case"mon-with-mana":return`${Ze(e.mon)}${Jn(e.mana)}`;case"mon-with-consumable":return`${Ze(e.mon)}${Wi(e.consumable)}`;case"consumable":return`xx${Wi(e.consumable)}`}}s(kt,"itemFen");function zi(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=Ki(o);if(u!==void 0)return cn(u);let c=Vi(o);return c===void 0?void 0:It(c)}let r=yu(e,n);if(r===void 0)return;let a=Ki(o);if(a!==void 0)return at(r,a);let i=Vi(o);return i!==void 0?Ct(r,i):o===120?He(r):void 0}s(zi,"parseItemFenAt");function ku(e){switch(e.kind){case"mon-move":return`mm ${kt(e.item)} ${W(e.from)} ${W(e.to)}`;case"mana-move":return`mma ${Jn(e.mana)} ${W(e.from)} ${W(e.to)}`;case"mana-scored":return`ms ${Jn(e.mana)} ${W(e.at)}`;case"mystic-action":return`ma ${Ze(e.mystic)} ${W(e.from)} ${W(e.to)}`;case"demon-action":return`da ${Ze(e.demon)} ${W(e.from)} ${W(e.to)}`;case"demon-additional-step":return`das ${Ze(e.demon)} ${W(e.from)} ${W(e.to)}`;case"spirit-target-move":return`stm ${kt(e.item)} ${W(e.from)} ${W(e.to)} ${W(e.by)}`;case"pickup-bomb":return`pb ${Ze(e.by)} ${W(e.at)}`;case"pickup-potion":return`pp ${kt(e.by)} ${W(e.at)}`;case"use-potion":return`up ${W(e.from)} ${W(e.to)}`;case"pickup-mana":return`pm ${Jn(e.mana)} ${Ze(e.by)} ${W(e.at)}`;case"mon-fainted":return`mf ${Ze(e.mon)} ${W(e.from)} ${W(e.to)}`;case"mana-dropped":return`md ${Jn(e.mana)} ${W(e.at)}`;case"supermana-back-to-base":return`sb ${W(e.from)} ${W(e.to)}`;case"bomb-attack":return`ba ${Ze(e.by)} ${W(e.from)} ${W(e.to)}`;case"mon-awake":return`maw ${Ze(e.mon)} ${W(e.at)}`;case"bomb-explosion":return`be ${W(e.at)}`;case"next-turn":return`nt ${Zt(e.color)}`;case"game-over":return`go ${Zt(e.winner)}`;case"takeback":return"z"}}s(ku,"eventFen");function Hi(e){return e.map(ku).join(" ")}s(Hi,"eventArrayFen");function Qi(e){return e===void 0?void 0:{i:e.i,j:e.j}}s(Qi,"detachedLocation");function Qr(e){let n=new Array(e.length);for(let t=0;t<e.length;t+=1){let o=e[t];o!==void 0&&(n[t]={i:o.i,j:o.j})}return n}s(Qr,"detachedLocations");function et(e){let n=e;return n===y.White?0:n===y.Black?1:void 0}s(et,"boardColorIndex");var gt=class{constructor(n=hn,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??Ta(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(i=>i===void 0?void 0:zn(i)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{s(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Kn(t,n)}fork(){let n=new Kn(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(bn(n))return this.storage.itemSlots[se(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return qn(n),lr(n,this.variant)}allMonsBases(){return Rt}supermanaBase(){return xt}allMonsLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return Oa(n.kind,n.color)}faintedMonsLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=et(n);if(t!==void 0)return Qi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=et(n);if(t!==void 0)return Qi(this.getCategoryDerived().awakeAngelLocations[t])}itemsEqual(n){for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=n.storage.itemSlots[t];if(o===void 0||r===void 0){if(o!==r)return!1}else if(!da(o,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=sr[t];o!==void 0&&r!==void 0&&n.push([r,o])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],t=[],o=[],r=[],a=[],i=[],u,c;for(let A=0;A<121;A+=1){let d=this.storage.itemSlots[A];if(d!==void 0){let f=sr[A];if(f!==void 0){let b=Q(d);if(b!==void 0){let p=et(b.color);if(p===void 0)continue;(p===0?n:t).push(f),d.kind==="mon"&&Ee(b)?(p===0?a:i).push(f):b.kind===I.Angel&&!Ee(b)&&(p===0&&u===void 0?u=f:p===1&&c===void 0&&(c=f))}else if(d.kind==="mana"&&d.mana.kind==="regular"){let p=et(d.mana.color);p!==void 0&&(p===0?o:r).push(f)}}}}let l={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,i],awakeAngelLocations:[u,c]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}},Kn=class extends gt{static{s(this,"MutableBoard")}#e;delete(n){qn(n),this.storage.itemSlots[se(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){qn(n),this.storage.itemSlots[se(n)]=zn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new gt(this.variant,void 0,this.storage),this.#e}};var qi=ke+1,gu=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function Mu(e){let n="",t=0;for(let o=0;o<11;o+=1){o>0&&(n+="/");let r=t+11,a=0;for(;t<r;){let i=e.itemAtIndex(t);if(t+=1,i===void 0){a+=1;continue}a>0&&(n+=$i(a),a=0),n+=kt(i)}a>0&&(n+=$i(a))}return n}s(Mu,"boardFen");function Cu(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let i=0;i<11;i+=1){let u=0,c=!1;for(;a<t&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(c||a+2>=t)return;let A=e.charCodeAt(a+1)-48,d=e.charCodeAt(a+2)-48;if(A<0||A>9||d<0||d>9)return;let f=A*10+d;if(f<1||u+f>11)return;u+=f,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=zi(e,a);if(l===void 0)return;r[i*11+u]=l,u+=1,a+=3,c=!1}if(u!==11)return;if(i<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Kn(o,r,void 0,!0)}s(Cu,"parseBoardFenRange");function Yi(e){let n=`${e.whiteScore} ${e.blackScore} ${Zt(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${Mu(e.board)}`,t=e.board.variant;return t===hn?n:`${n} ${Pa(t)}`}s(Yi,"gameFen");function Xi(e){let n=0,t=s(x=>{let v=n,M=0,w=!1;for(;n<e.length;){let C=e.charCodeAt(n);if(C===32)break;if(C<48||C>57)return-1;if(n===v)w=C===48;else if(w)return-1;if(M=M*10+(C-48),!Number.isSafeInteger(M))return-1;n+=1}if(n===v)return-1;if(x){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return M},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),i=a===119?y.White:a===98?y.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let u=t(!0),c=t(!0),l=t(!0),A=t(!0),d=t(!0),f=t(!0);if(o<0||r<0||u<0||c<0||l<0||A<0||d<0||f<0||o>qi||r>qi||u>Ue||c>wn||l>ie||f<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let p=n,g=hn;if(n<e.length){n+=1;let x=t(!1),v=wa(x);if(v===void 0||v===hn)return;g=v}let k=Cu(e,b,p,g);if(k!==void 0)return{board:k,whiteScore:o,blackScore:r,activeColor:i,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:A,blackPotionsCount:d,turnNumber:f}}s(Xi,"parseGameFen");function $i(e){return gu[e]??""}s($i,"emptyRunFen");function Zi(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}s(Zi,"copyRulesCounters");function Ko(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}s(Ko,"addCounter");function qr(e,n,t,o){if(e.actionsUsedCount<Ue)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===y.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}s(qr,"consumeAction");function $r(e,n,t,o){switch(n.kind){case"mon-move":return{valid:Ko(e,"monsMovesCount",1,o)};case"mana-move":return{valid:Ko(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===y.White?"whiteScore":"blackScore";return{valid:Ko(e,r,ua(n.mana,e.activeColor),o)}}case"mystic-action":return qr(e,n.from,n.to,o);case"demon-action":{let a=t.find(i=>i.kind==="demon-additional-step")?.to??n.to;return qr(e,a,a,o)}case"spirit-target-move":return qr(e,n.by,n.to,o);case"pickup-potion":{let r=Q(n.by);if(r===void 0)return{valid:!0};let a=r.color===y.White?"whitePotionsCount":"blackPotionsCount";return{valid:Ko(e,a,1,o)}}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":return{valid:!0}}}s($r,"projectEventCounters");function Yr(e,n){let t=Zi(e);for(let r of n)if(!$r(t,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let o={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Wo(o,n).turnAdvanced}s(Yr,"canApplyRulesEvents");function Iu(e,n,t,o){let r=$r(e,n,t,!1);switch(r.valid&&r.potionUse!==void 0&&o.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,cn(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let i=Q(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,He(i))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(i=>i.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,He(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,He(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,Ct(n.by,O.Bomb));break;case"pickup-potion":{if(Q(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,at(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,He(sa(n.mon)));break;case"mana-dropped":e.board.set(n.at,cn(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?at(a.mon,En):cn(En));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,He(n.by));break;case"bomb-explosion":{let a=e.board.get(n.at),i=a===void 0?void 0:Q(a);(i===void 0||!Ee(i)||!Pt(e.board.base(i),n.at))&&e.board.delete(n.at);break}case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}s(Iu,"applyEvent");function Su(e,n){e.activeColor=Pn(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let t of e.board.faintedMonsLocations(e.activeColor)){let o=e.board.get(t),r=o===void 0?void 0:Q(o);if(r===void 0)continue;let a=ca(r);Ee(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,He(a))}}s(Su,"advanceTurn");function Wo(e,n){let t=[];for(let a of n)Iu(e,a,n,t);let o=Io(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):Va(e)&&(Su(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}s(Wo,"applyRulesEvents");var Jt=Symbol("cache-miss"),ns=Symbol("cached-undefined"),Vo=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Eu(e){return e===void 0?void 0:[e[0].map(Qn),e[1].map(it)]}s(Eu,"copyStageResult");function Ji(e){return e===void 0?ns:[e[0].map(Qn),e[1].map(it)]}s(Ji,"storeStageResult");function es(e){return e===ns?void 0:Eu(e)}s(es,"copyStoredStageResult");function zo(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}s(zo,"setBounded");var Ho=class{static{s(this,"RulesQueryCache")}#e;#n;#t;#o;#r;invalidate(){this.#e=void 0,this.#n=void 0,this.#t=void 0,this.#o=void 0,this.#r=void 0}getStartSuggestion(n){let t=this.#e?.[n];return t===void 0?void 0:rr(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=rr(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){zo(this.#n??=new Map,n,t,Vo.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(it)}setSecondInputOptions(n,t){zo(this.#t??=new Map,n,t.map(it),Vo.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Jt:es(t)}setSecondStage(n,t){zo(this.#o??=new Map,n,Ji(t),Vo.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Jt:es(t)}setThirdStage(n,t){zo(this.#r??=new Map,n,Ji(t),Vo.thirdStage)}};function eo(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Qn)}))}s(eo,"copyTrackingEntries");var Qo=class e{static{s(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return eo(this.#n)}get movesVerified(){return this.#t}get verboseTrackingEnabled(){return this.#o}get eventApplicationTrackingEnabled(){return this.#r||this.#o}copy(){let n=new e(this.#o);return n.#e=[...this.#e],n.#n=eo(this.#n),n.#t=this.#t,n.#r=this.#r,n}fork(){let n=new e(!1);return n.#t=this.#t,n.#r=!1,n}resetForLoadedFen(){this.#a()}resetForBoardReplacement(){this.#a()}#a(){this.#e=[],this.#n=[],this.#t=!1}replace(n){n.takebackFens!==void 0&&(this.#e=[...n.takebackFens]),n.trackingEntries!==void 0&&(this.#n=eo(n.trackingEntries)),n.movesVerified!==void 0&&(this.#t=n.movesVerified),n.verboseTrackingEnabled!==void 0&&(this.#o=n.verboseTrackingEnabled,n.verboseTrackingEnabled||(this.#n=[]))}setTakebackTracking(n){this.#r=n,n||(this.#e=[])}setVerboseTracking(n){this.#o=n,n||(this.#n=[])}canTakeback(n,t){return this.#r&&this.#e.length>1&&n===t}prepareTakeback(n,t){if(!this.canTakeback(n,t))return;let o=this.#e[this.#e.length-2];if(o!==void 0)return{previousFen:o,takebackFens:this.#e.slice(0,-1),trackingEntries:eo(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=eo(n.trackingEntries)}beginEventApplication(n,t){if(!this.#r||this.#e.length!==0)return;let o=n();this.#e.push(o),this.#o&&this.#n.length===0&&this.#n.push({fen:o,color:t,events:[]})}completeEventApplication(n){let t,o=s(()=>t??=n.snapshotFen(),"snapshotFen");this.#r&&(n.winner!==void 0?this.#e=[]:n.turnAdvanced?this.#e=[o()]:this.#e.push(o())),this.#o&&this.#n.push({fen:o(),color:n.color,events:n.events.map(Qn)})}};function ts(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let i=t.mon;if(i.color!==e.activeColor||Ee(i))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u),A;switch(c?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":A=!1;break;case"mana":A=i.kind===I.Drainer;break;case"consumable":case void 0:A=!0;break}if(!A)return!1;switch(l.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===I.Drainer&&(c===void 0||c.kind==="mana"&&c.mana.kind==="supermana");case"mon-base":return l.monKind===i.kind&&l.color===i.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(i.kind){case I.Angel:case I.Drainer:break;case I.Mystic:{let u=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(so(n),_.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||ur(u,c))return!1;let A=Q(l);return A!==void 0&&i.color!==A.color&&!Ee(A)}));break}case I.Demon:{let u=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(co(n),_.DemonAction,o,c=>{let l=e.board.get(c),A=ba(n,c),d=e.board.squareAt(A);if(l===void 0||ur(u,c)||e.board.get(A)!==void 0||d.kind==="supermana-base"||d.kind==="mon-base")return!1;let f=Q(l);return f!==void 0&&i.color!==f.color&&!Ee(f)}));break}case I.Spirit:a.push(...e.nextInputsFromLocations(uo(n),_.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:la(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Qe(n),_.ManaMove,o,i=>br(e.board,i)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.MonMove,o,i=>{let u=e.board.get(i),c=e.board.squareAt(i);switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Yn(c)?!0:c.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let i=t.mon;if(i.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u);switch(c?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Yn(l)}})),t.consumable===O.Bomb&&a.push(...e.nextInputsFromLocations(io(n),_.BombAttack,o,u=>{let c=e.board.get(u),l=c===void 0?void 0:Q(c);return l!==void 0&&i.color!==l.color&&!Ee(l)}));break}case"consumable":break}return a}s(ts,"generateSecondInputOptions");function os(e,n,t,o,r){let a=[],i=[],u=e.board.squareAt(r),c=e.board.get(r);switch(n){case _.MonMove:{let l=Q(t);if(l===void 0)return;if(i.push({kind:"mon-move",item:t,from:o,to:r}),c!==void 0)switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let A=vn(t);A!==void 0&&i.push({kind:"mana-dropped",mana:A,at:o}),i.push({kind:"pickup-mana",mana:c.mana,by:l,at:r});break}case"consumable":switch(c.consumable){case O.Bomb:case O.Potion:return;case O.BombOrPotion:ar(t)!==void 0||vn(t)!==void 0?i.push({kind:"pickup-potion",by:t,at:r}):(a.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,t)),a.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,t)));break}break}if(u.kind==="mana-pool"){let A=vn(t);A!==void 0&&i.push({kind:"mana-scored",mana:A,at:r})}break}case _.ManaMove:{if(t.kind!=="mana")return;let l=t.mana;if(i.push({kind:"mana-move",mana:l,from:o,to:r}),c!==void 0){if(c.kind!=="mon")return;i.push({kind:"pickup-mana",mana:l,by:c.mon,at:r})}switch(u.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case _.MysticAction:{if(t.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),c!==void 0){let l=Q(c);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:c.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:i.push({kind:"bomb-explosion",at:r});break;case O.Potion:case O.BombOrPotion:return}}break}case _.DemonAction:{if(t.kind!=="mon")return;let l=t.mon;i.push({kind:"demon-action",demon:l,from:o,to:r});let A=!1,d=!1;if(c!==void 0){let f=Q(c);if(f===void 0)return;if(i.push({kind:"mon-fainted",mon:f,from:r,to:e.board.base(f)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?(A=!0,i.push({kind:"mana-dropped",mana:c.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:d=!0,i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)});break;case O.Potion:case O.BombOrPotion:return}}if(!d&&(u.kind==="supermana-base"||u.kind==="mon-base")&&(A=!0),A)for(let f of Qe(r)){let b=e.board.get(f),p=e.board.squareAt(f);b!==void 0&&b.kind!=="consumable"||(Yn(p)?a.push(Fe({kind:"location",location:f},_.DemonAdditionalStep)):p.kind==="mon-base"&&p.monKind===l.kind&&p.color===l.color&&a.push(Fe({kind:"location",location:f},_.DemonAdditionalStep)))}break}case _.SpiritTargetCapture:{if(c===void 0)return;let l=Q(c),A=vn(c);a.push(...e.nextInputsFromLocations(Qe(r),_.SpiritTargetMove,void 0,d=>{let f=e.board.get(d),b=e.board.squareAt(d);if(!Ka(c,f))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let p=f?.kind==="mana"&&f.mana.kind==="supermana";return A?.kind==="supermana"||A===void 0&&l?.kind===I.Drainer&&(f===void 0||p)||l?.kind===I.Drainer&&p}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&A===void 0&&ar(c)===void 0}}));break}case _.BombAttack:{let l=Q(t);if(l===void 0)return;if(i.push({kind:"bomb-attack",by:l,from:o,to:r}),c!==void 0){let A=Q(c);if(A===void 0)return;if(i.push({kind:"mon-fainted",mon:A,from:r,to:e.board.base(A)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:c.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:i.push({kind:"bomb-explosion",at:r});break;case O.Potion:case O.BombOrPotion:return}}break}case _.DemonAdditionalStep:case _.SpiritTargetMove:case _.SelectConsumable:break}return[i,a]}s(os,"compileSecondInput");function rs(e,n,t,o,r){let a=e.get(r),i=[],u=[];switch(n.kind){case _.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let c=n.input.location,l=e.get(c),A=e.squareAt(c);if(u.push({kind:"spirit-target-move",item:a,from:r,to:c,by:o}),l!==void 0)switch(a.kind){case"mon":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,a)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,a));break}break}break;case"mana":if(l.kind!=="mon")return;u.push({kind:"pickup-mana",mana:a.mana,by:l.mon,at:c});break;case"mon-with-mana":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"mana-dropped",mana:a.mana,at:r}),u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:u.push({kind:"pickup-potion",by:a,at:c});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==O.BombOrPotion)return;u.push({kind:"pickup-potion",by:a,at:c});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,l)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:u.push({kind:"pickup-potion",by:l,at:c});break}break}break}if(A.kind==="mana-pool"){let d=vn(a);d!==void 0&&u.push({kind:"mana-scored",mana:d,at:c})}break}case _.DemonAdditionalStep:{if(n.input.kind!=="location")return;let c=Q(t);if(c===void 0)return;let l=n.input.location;u.push({kind:"demon-additional-step",demon:c,from:r,to:l});let A=e.get(l);if(A?.kind==="consumable")switch(A.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,t)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,t));break}break}case _.SelectConsumable:{if(n.input.kind!=="modifier")return;let c=Q(t);if(c===void 0)return;switch(n.input.modifier){case J.SelectBomb:u.push({kind:"pickup-bomb",by:c,at:r});break;case J.SelectPotion:u.push({kind:"pickup-potion",by:t,at:r});break}break}case _.MonMove:case _.ManaMove:case _.MysticAction:case _.DemonAction:case _.SpiritTargetCapture:case _.BombAttack:return}return[u,i]}s(rs,"compileThirdInput");function as(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(i=>St(i.input,e))?.actorMonItem,a=r===void 0?void 0:Q(r);if(!(r===void 0||a===void 0))switch(e.modifier){case J.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case J.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}s(as,"compileFourthInput");function is(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=s(i=>{let u=t([{kind:"location",location:i}]);if(u.kind!=="next-input-options"||u.nextInputs.length===0)return;let c=se(i);r[c]||(r[c]=!0,o.push(i))},"addWhenValid");for(let i of e.board.allMonsLocations(e.activeColor))a(i);if(Wa(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let i of e.board.allFreeRegularManaLocations(e.activeColor))a(i);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}s(is,"suggestedInputToStartWith");function ss(e,n,t,o,r,a){let i=n[0];if(i?.kind!=="location")return{kind:"invalid-input"};let u=i.location,c=e.board().get(u);if(c===void 0)return{kind:"invalid-input"};let l=n[1];if(l!==void 0&&l.kind!=="location")return{kind:"invalid-input"};let A=a&&e.requiresCounterCapacityFiltering(),d=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let P=o&&!A?Ma(d):d,L=e.applicableInputOptions(n,P,r,A,o);return L.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:L}}let f=l.location,b=d.find(P=>St(P.input,l));if(b===void 0)return{kind:"invalid-input"};let p=n[2],g=e.processSecondInput(b.kind,c,u,f,t),k=g?.[0]??[],x=g?.[1]??[];if(p===void 0){if(x.length!==0){let P=e.applicableInputOptions(n,x,r,A,o);return P.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:P}}return k.length===0?{kind:"invalid-input"}:e.resolveEvents(k,t)}let v=x.find(P=>St(P.input,p));if(v===void 0)return{kind:"invalid-input"};let M=n[3],w=e.processThirdInput(v,c,u,f,t);k.push(...w?.[0]??[]);let C=w?.[1]??[];if(M===void 0){if(C.length!==0){let P=e.applicableInputOptions(n,C,r,A,o);return P.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:P}}return k.length===0?{kind:"invalid-input"}:e.resolveEvents(k,t)}let S=as(M,v,C);return S===void 0?{kind:"invalid-input"}:(k.push(S),e.resolveEvents(k,t))}s(ss,"dispatchStagedInput");var an=class e{static{s(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=hn,o){let r=o===void 0?new Kn(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:y.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Qo(n),this.#t=new Ho,this.#o={board:s(()=>this.board,"board"),requiresCounterCapacityFiltering:s(()=>this.#c(),"requiresCounterCapacityFiltering"),secondInputOptions:s((...a)=>this.#g(...a),"secondInputOptions"),processSecondInput:s((...a)=>this.#m(...a),"processSecondInput"),processThirdInput:s((...a)=>this.#u(...a),"processThirdInput"),applicableInputOptions:s((...a)=>this.#k(...a),"applicableInputOptions"),resolveEvents:s((...a)=>this.#h(...a),"resolveEvents")}}get board(){return this.#e.board.readonlyView()}get whiteScore(){return this.#e.whiteScore}get blackScore(){return this.#e.blackScore}get activeColor(){return this.#e.activeColor}get actionsUsedCount(){return this.#e.actionsUsedCount}get manaMovesCount(){return this.#e.manaMovesCount}get monsMovesCount(){return this.#e.monsMovesCount}get whitePotionsCount(){return this.#e.whitePotionsCount}get blackPotionsCount(){return this.#e.blackPotionsCount}get turnNumber(){return this.#e.turnNumber}get takebackFens(){return this.#n.takebackFens}get isMovesVerified(){return this.#n.movesVerified}get withVerboseTracking(){return this.#n.verboseTrackingEnabled}get verboseTrackingEntities(){return this.#n.trackingEntries}replaceHistory(n){this.#n.replace(n)}#r(n){this.#e.whiteScore=n.whiteScore,this.#e.blackScore=n.blackScore,this.#e.activeColor=n.activeColor,this.#e.actionsUsedCount=n.actionsUsedCount,this.#e.manaMovesCount=n.manaMovesCount,this.#e.monsMovesCount=n.monsMovesCount,this.#e.whitePotionsCount=n.whitePotionsCount,this.#e.blackPotionsCount=n.blackPotionsCount,this.#e.turnNumber=n.turnNumber}static#a(n,t){return new e(n,t.variant,t)}static newSimulationState(n){let t=e.#a(!1,n.board);return t.#r(n),t.#n.setTakebackTracking(!1),t}static fromFen(n,t=!1){let o=Xi(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return Yi(this)}copy(){let n=e.#a(this.withVerboseTracking,this.board);return n.#r(this),n.#n=this.#n.copy(),n}fork(){let n=e.#a(!1,this.board);return n.#r(this),n.#n=this.#n.fork(),n}variant(){return this.board.variant}replaceBoardItems(n){let t=Array.from({length:121},()=>{});for(let[r,a]of n)t[se(r)]=a;let o=gt.fromItems(t,this.variant());this.#e.board=o,this.#n.resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){this.#n.setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){this.#t.invalidate()}setVerboseTracking(n){this.#n.setVerboseTracking(n)}#y(n){let t=n.board.fork();this.#e.board=t,this.#r(n),this.invalidateProcessInputCache()}canTakeback(n){return this.#n.canTakeback(this.activeColor,n)}processInput(n,t,o){return this.processInputWithStartOptions(n,t,o,void 0)}processInputWithStartOptions(n,t,o,r){return this.#s(n,t,o,r??ga)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>ot||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let u=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),c=this.#t.getStartSuggestion(u);if(c!==void 0)return c;let l=is(this,r,A=>this.#s(A,!0,!0,r,a));return this.#t.setStartSuggestion(u,l),l}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let u=this.#n.prepareTakeback(this.activeColor,this.activeColor);if(u===void 0)return{kind:"invalid-input"};let c=e.fromFen(u.previousFen,!1);return c===void 0?{kind:"invalid-input"}:t?{kind:"events",events:[{kind:"takeback"}]}:(this.#y(c),this.#n.commitTakeback(u),{kind:"events",events:[{kind:"takeback"}]})}return ss(this.#o,n,t,o,r,a)}#c(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#k(n,t,o,r,a){if(!r)return t;let i=s(c=>this.#A([...n,c.input],o),"applicable");if(!a)return t.filter(i);let u=t.find(i);return u===void 0?[]:[u]}#A(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${Aa(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Yr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(u=>this.#A([...n,{kind:"location",location:u}],t));case"next-input-options":return a.nextInputs.some(u=>this.#A([...n,u.input],t))}})();return this.#t.setCompletionViability(o,i),i}#g(n,t,o,r){let a=String(se(n)),i=this.#t.getSecondInputOptions(a);if(i!==void 0)return i;let u=ts(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#m(n,t,o,r,a){let i=`${n}|${ro(t)}|${se(o)}|${se(r)}`,u=this.#t.lookupSecondStage(i);if(u!==Jt)return u;let c=os(this,n,t,o,r);return a&&this.#t.setSecondStage(i,c),c}#u(n,t,o,r,a){let i=`${ir(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":ro(n.actorMonItem)}|${ro(t)}|${se(o)}|${se(r)}`,u=this.#t.lookupThirdStage(i);if(u!==Jt)return u;let c=rs(this.board,n,t,o,r);return a&&this.#t.setThirdStage(i,c),c}#h(n,t){if(t)return{kind:"events",events:n};let o=this.applyAndAddResultingEvents(n);return o===void 0?{kind:"invalid-input"}:{kind:"events",events:o}}applyAndAddResultingEvents(n){return this.#f(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#f(n,!1);return o===void 0?void 0:{game:t,events:o}}#f(n,t){if(!Yr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return Wo(this.#e,n).events;let o=s(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=Wo(this.#e,n);return this.#n.completeEventApplication({snapshotFen:o,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events}nextInputsFromLocations(n,t,o,r){return Ca(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Be.MonMove,ie-this.monsMovesCount),n.set(Be.Action,0),n.set(Be.Potion,0),n.set(Be.ManaMove,0),this.turnNumber===1||(n.set(Be.Action,Ue-this.actionsUsedCount),n.set(Be.Potion,this.playerPotionsCount()),n.set(Be.ManaMove,wn-this.manaMovesCount)),n}winnerColor(){return Io(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(Pn(this.activeColor)).length>n.board.faintedMonsLocations(Pn(n.activeColor)).length}isFirstTurn(){return mt(this)}playerPotionsCount(){return So(this)}playerCanMoveMon(){return Ua(this)}playerCanMoveMana(){return ja(this)}playerCanUseAction(){return Ga(this)}};function qo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!bn(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}s(qo,"toEnginePosition");function te(e){return{row:e.i,column:e.j}}s(te,"fromEnginePosition");function An(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}s(An,"fromEngineMon");function no(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}s(no,"fromEngineMana");function Mt(e){switch(e.kind){case"mon":return{kind:"mon",mon:An(e.mon)};case"mana":return{kind:"mana",mana:no(e.mana)};case"mon-with-mana":return{kind:"mon",mon:An(e.mon),carrying:{kind:"mana",mana:no(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:An(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}s(Mt,"fromEngineItem");function cs(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}s(cs,"fromEngineSquare");function Xr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:qo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(Xr,"toEngineInput");function Zr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:te(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(Zr,"fromEngineInput");function Pu(e){let n=Zr(e.input),t=e.actorMonItem===void 0?{}:{actor:Mt(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...t}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...t}}}s(Pu,"fromEngineInputOption");function $o(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Mt(e.item),from:te(e.from),to:te(e.to)};case"mana-move":return{kind:e.kind,mana:no(e.mana),from:te(e.from),to:te(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:no(e.mana),at:te(e.at)};case"mystic-action":return{kind:e.kind,mystic:An(e.mystic),from:te(e.from),to:te(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:An(e.demon),from:te(e.from),to:te(e.to)};case"spirit-target-move":return{kind:e.kind,item:Mt(e.item),from:te(e.from),to:te(e.to),by:te(e.by)};case"pickup-bomb":return{kind:e.kind,by:An(e.by),at:te(e.at)};case"pickup-potion":return{kind:e.kind,by:Mt(e.by),at:te(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:te(e.from),to:te(e.to)};case"pickup-mana":return{kind:e.kind,mana:no(e.mana),by:An(e.by),at:te(e.at)};case"mon-fainted":return{kind:e.kind,mon:An(e.mon),from:te(e.from),to:te(e.to)};case"bomb-attack":return{kind:e.kind,by:An(e.by),from:te(e.from),to:te(e.to)};case"mon-awake":return{kind:e.kind,mon:An(e.mon),at:te(e.at)};case"bomb-explosion":return{kind:e.kind,at:te(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}s($o,"fromEngineEvent");function Jr(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(te)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(Pu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map($o)}}}s(Jr,"fromEngineOutput");function us(e){return{monMoves:e.get(Be.MonMove)??0,manaMoves:e.get(Be.ManaMove)??0,actions:e.get(Be.Action)??0,potions:e.get(Be.Potion)??0}}s(us,"availableMoveCountsFromEngine");function vu(e){if(e!=="")return Et(e)}s(vu,"parseReplayMove");function Yo(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let i=e.activeColor===y.White,l=(i?n:t)[i?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let A=vu(l);if(A===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let d=e.processInput(A,!1,!1);if(d.kind!=="events"||d.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let f={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,f)===!1)return{status:"stopped",...f}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}s(Yo,"replayInterleavedMoves");var ea=class e{static{s(this,"Game")}#e;constructor(n={}){let{variant:t=R.Classic}=n;if(!Tu(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new an(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=an.fromFen(n,!0);if(t?.fen()===n)return e.#n(t)}get variant(){return this.#e.variant()}get activeColor(){return this.#e.activeColor}get turnNumber(){return this.#e.turnNumber}get scores(){return{[y.White]:this.#e.whiteScore,[y.Black]:this.#e.blackScore}}get potions(){return{[y.White]:this.#e.whitePotionsCount,[y.Black]:this.#e.blackPotionsCount}}get winner(){return this.#e.winnerColor()}get historyVerified(){return this.#e.isMovesVerified}get takebackFens(){return[...this.#e.takebackFens]}get trackingEntries(){return this.#e.verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map($o),eventsFen:Hi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(Xr);return this.#t(t,st(t))}play(n){let t=n.map(Xr);return this.#o(t,st(t))}playFen(n){let t=Et(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,st(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Jr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Jr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(qo(n));return t===void 0?void 0:Mt(t)}squareAt(n){return cs(this.#e.board.squareAt(qo(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(ls(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(ls(t.i,t.j),{row:t.i,column:t.j});return[...n.values()].sort((t,o)=>t.row-o.row||t.column-o.column)}canTakeback(n){if(!wu(n))throw new TypeError(`unsupported color: ${String(n)}`);return this.#e.canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){let t=this.#e.verboseTrackingEntities;if(t.length<=1)return;let o=t.slice(0,-1),r=o[o.length-1],a=an.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let u=i<0?[]:n.slice(0,i+1);if(!u.some(c=>{let l=an.fromFen(c,!1);return l?.fen()!==c||l.variant()!==a.variant()}))return a.replaceHistory({takebackFens:u,trackingEntries:o,verboseTrackingEnabled:!0,movesVerified:this.#e.isMovesVerified}),e.#n(a)}verifyHistory(n){let t=new an(!0,this.#e.variant());return Yo(t,n.white,n.black).status!=="complete"||t.fen()!==this.#e.fen()?!1:(this.#e.replaceHistory({takebackFens:t.takebackFens,trackingEntries:t.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return this.#e.isLaterThan(n.#e)}availableMoveCounts(){return us(this.#e.availableMoveKinds())}suggestMove(n){if(!Ou(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Gi(this.#e,n);if(t.output.kind!=="events")return;let o=Et(t.inputFen);if(o!==void 0)return{inputs:o.map(Zr),inputFen:t.inputFen,events:t.output.events.map($o)}}};function wu(e){return e===y.White||e===y.Black}s(wu,"isColor");function Tu(e){return Object.values(R).includes(e)}s(Tu,"isGameVariant");function Ou(e){return e==="fast"||e==="normal"||e==="pro"}s(Ou,"isAutomovePreference");function ls(e,n){return`${e},${n}`}s(ls,"positionKey");function xu(e){let n=ds(e.white.fen),t=ds(e.black.fen);if(n===void 0||t===void 0)return n===void 0&&t===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?y.Black:y.White};if(n.variant()!==t.variant())return{kind:"invalid"};let o=n.fen(),r=t.fen();if(n.winnerColor()===void 0&&t.winnerColor()===void 0)return{kind:"ongoing"};let a=new an(!1,n.variant()),i;return Yo(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let A=u.winnerColor();if(A===void 0)return!0;let d=A===y.White?c===e.white.moves.length:l===e.black.moves.length,f=A===y.White?o:r;return i=d&&f===u.fen()?{kind:"winner",winner:A}:{kind:"invalid"},!1}),i??{kind:"invalid"}}s(xu,"resolveMatch");function ds(e){let n=an.fromFen(e,!1);return n?.fen()===e?n:void 0}s(ds,"submittedGame");export{y as Color,O as Consumable,ea as Game,R as GameVariant,J as Modifier,I as MonKind,xu as resolveMatch};
|