mons-rules 0.4.7 → 0.4.9
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 Qi=Object.defineProperty;var i=(e,n)=>Qi(e,"name",{value:n,configurable:!0});var h=Object.freeze({White:"white",Black:"black"}),E=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"}),A=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),X=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var jo=Object.freeze({[h.White]:0,[h.Black]:1});function He(e){return jo[e]}i(He,"colorId");var ze=Object.freeze({[M.Demon]:0,[M.Drainer]:1,[M.Angel]:2,[M.Spirit]:3,[M.Mystic]:4}),Oe=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),$o=Object.freeze({[X.SelectPotion]:0,[X.SelectBomb]:1}),O=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"}),Qn=4,Mn=Object.freeze({kind:"supermana"});function Sn(e){return e===h.Black?h.White:h.Black}i(Sn,"otherColor");function Vn(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})}i(Vn,"createMon");function Go(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}i(Go,"monEquals");function Ie(e){return e.cooldown>0}i(Ie,"isMonFainted");function Gr(e){return Vn(e.kind,e.color,2)}i(Gr,"faintMon");function Kr(e){return e.cooldown>0?Vn(e.kind,e.color,e.cooldown-1):Le(e)}i(Kr,"decreaseMonCooldown");function Yn(e){return Object.freeze({kind:"regular",color:e})}i(Yn,"regularMana");function Ur(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}i(Ur,"manaEquals");function qo(e,n){return e||!n?2:1}i(qo,"manaScoreForOwnership");function jr(e,n){return qo(e.kind==="supermana",e.kind==="regular"&&e.color===n)}i(jr,"manaScore");function Fe(e){return Object.freeze({kind:"mon",mon:Le(e)})}i(Fe,"monItem");function Ze(e){return Object.freeze({kind:"mana",mana:Xn(e)})}i(Ze,"manaItem");function Zn(e,n){return Object.freeze({kind:"mon-with-mana",mon:Le(e),mana:Xn(n)})}i(Zn,"monWithManaItem");function pt(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Le(e),consumable:n})}i(pt,"monWithConsumableItem");function bt(e){return Object.freeze({kind:"consumable",consumable:e})}i(bt,"consumableItem");function Le(e){return Object.isFrozen(e)?e:Vn(e.kind,e.color,e.cooldown)}i(Le,"immutableMon");function Xn(e){return e.kind==="supermana"?Mn:Object.isFrozen(e)?e:Yn(e.color)}i(Xn,"immutableMana");function Dn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Fe(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:Ze(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:Zn(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:pt(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:bt(e.consumable)}}i(Dn,"immutableItem");function W(e){return{i:e.i,j:e.j}}i(W,"copyLocation");function Yi(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}}}i(Yi,"copyInput");function Jn(e){let n=Yi(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Dn(e.actorMonItem)}}i(Jn,"copyNextInput");function Un(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Dn(e.item),from:W(e.from),to:W(e.to)};case"mana-move":return{kind:"mana-move",mana:Xn(e.mana),from:W(e.from),to:W(e.to)};case"mana-scored":return{kind:"mana-scored",mana:Xn(e.mana),at:W(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Le(e.mystic),from:W(e.from),to:W(e.to)};case"demon-action":return{kind:"demon-action",demon:Le(e.demon),from:W(e.from),to:W(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Le(e.demon),from:W(e.from),to:W(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Dn(e.item),from:W(e.from),to:W(e.to),by:W(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Le(e.by),at:W(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Dn(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:Xn(e.mana),by:Le(e.by),at:W(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Le(e.mon),from:W(e.from),to:W(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:Xn(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:Le(e.by),from:W(e.from),to:W(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Le(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"}}}i(Un,"copyEvent");function Ho(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(Jn)};case"events":return{kind:"events",events:e.events.map(Un)}}}i(Ho,"copyOutput");function $(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}i($,"itemMon");function $r(e){let n=$(e);return n===void 0||!Ie(n)}i($r,"isSpiritTargetAllowed");function In(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}i(In,"itemMana");function zo(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}i(zo,"itemConsumable");function qr(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Go(e.mon,n.mon);case"mana":return n.kind==="mana"&&Ur(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Go(e.mon,n.mon)&&Ur(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Go(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}i(qr,"itemEquals");function Ko(e){return`${e.kind}:${e.color}:${e.cooldown}`}i(Ko,"monKey");function Wr(e){return e.kind==="supermana"?"s":`r:${e.color}`}i(Wr,"manaKey");function Xt(e){switch(e.kind){case"mon":return`m:${Ko(e.mon)}`;case"mana":return`a:${Wr(e.mana)}`;case"mon-with-mana":return`mm:${Ko(e.mon)}:${Wr(e.mana)}`;case"mon-with-consumable":return`mc:${Ko(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}i(Xt,"itemKey");function Xo(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}i(Xo,"inputKey");function Hr(e){return e.map(Xo).join(";")}i(Hr,"inputChainKey");function yt(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}}i(yt,"inputEquals");function B(e){return`${e.i},${e.j}`}i(B,"locationFen");var Qt=48,Zi=57,Ji=44,es=59,ns=108,ts=109,os=122,rs=112,as=98;function is(e){switch(e){case X.SelectPotion:return"p";case X.SelectBomb:return"b"}}i(is,"modifierFen");function ss(e){switch(e.kind){case"takeback":return"z";case"location":return`l${B(e.location)}`;case"modifier":return`m${is(e.modifier)}`}}i(ss,"inputFen");function zr(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<Qt||o>Zi))return o===Qt+1&&n+1<t&&e.charCodeAt(n+1)===Qt?10:o-Qt}i(zr,"parseCoordinate");function Xr(e,n){return e+(n===10?2:1)}i(Xr,"coordinateEnd");function cs(e,n,t){let o=zr(e,n,t);if(o===void 0)return;let r=Xr(n,o);if(r>=t||e.charCodeAt(r)!==Ji)return;let a=r+1,s=zr(e,a,t);if(!(s===void 0||Xr(a,s)!==t))return{i:o,j:s}}i(cs,"parseLocation");function us(e,n,t){switch(e.charCodeAt(n)){case ns:{let o=cs(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case ts:return t!==n+2?void 0:e.charCodeAt(n+1)===rs?{kind:"modifier",modifier:X.SelectPotion}:e.charCodeAt(n+1)===as?{kind:"modifier",modifier:X.SelectBomb}:void 0;case os:return t===n+1?{kind:"takeback"}:void 0;default:return}}i(us,"parseInputFenRange");function et(e){return e.map(ss).join(";")}i(et,"inputArrayFen");function ht(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)!==es)continue;if(n.length===Qn)return;let r=us(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}i(ht,"parseInputArrayFen");var Qr=Math.trunc(5.5),ls=10;function Z(e,n){return{i:e,j:n}}i(Z,"location");function kt(e,n){return e.i===n.i&&e.j===n.j}i(kt,"locationEquals");function un(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}i(un,"isValidLocation");function Wn(e){if(!un(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ls}`)}i(Wn,"assertValidLocation");function oe(e){return Wn(e),e.i*11+e.j}i(oe,"locationIndex");function nt(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return Z(Math.trunc(e/11),e%11)}i(nt,"fromLocationIndex");function Yr(e,n){return Z(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}i(Yr,"locationBetween");function Zr(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}i(Zr,"locationDistance");function Jr(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=Z(o,r);un(a)&&!kt(a,e)&&t.push(a)}return t}i(Jr,"nearbyLocationsFor");function ea(e,n){let t=[];for(let[o,r]of n){let a=Z(e.i+o,e.j+r);un(a)&&t.push(a)}return t}i(ea,"directionalReachabilityFor");function ds(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=Z(e.i+t,e.j+o);un(r)&&n.push(r)}return n}i(ds,"spiritReachabilityFor");function Mt(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(nt(t)).map(o=>Object.freeze(o)))))}i(Mt,"buildCache");var ms=Mt(e=>Jr(e,1)),fs=Mt(e=>Jr(e,3)),ps=Mt(e=>ea(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),bs=Mt(e=>ea(e,[[-2,0],[2,0],[0,2],[0,-2]])),ys=Mt(ds);function St(e,n){return un(n)?e[oe(n)]??[]:[]}i(St,"cachedLocations");function Be(e){return St(ms,e)}i(Be,"nearbyLocations");function Yt(e){return St(fs,e)}i(Yt,"bombReachableLocations");function Zt(e){return St(ps,e)}i(Zt,"mysticReachableLocations");function Jt(e){return St(bs,e)}i(Jt,"demonReachableLocations");function eo(e){return St(ys,e)}i(eo,"spiritReachableLocations");var Qo=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(nt(n))));var na=Object.freeze({includeManaStartsWithPotionAction:!1}),Yo=Object.freeze({includeManaStartsWithPotionAction:!0});function xe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}i(xe,"nextInput");function ta(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}i(ta,"firstOptionFromEachKindGroup");function Zo(e,n){return e!==void 0&&Zr(e,n)===1}i(Zo,"isLocationGuardedByAngelLocation");function oa(e,n,t,o){if(t!==void 0){for(let a of e)if(kt(a,t))return o(t)?[xe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(xe({kind:"location",location:a},n));return r}i(oa,"nextInputsFromLocations");var It=new RangeError("fast workspace allocation failed");function At(e){return e===It}i(At,"isFastWorkspaceAllocationFailure");function Re(e){throw e instanceof RangeError?It:e}i(Re,"rethrowFastWorkspaceAllocation");var ln=E.Classic,Ae=5,ee=5,An=1,_e=1,Gn=Object.freeze([E.Classic,E.SwappedManaRows,E.OffsetArcManaRows,E.CenterSpokeManaRows,E.AlternatingManaRows,E.InnerWedgeManaRows,E.OuterWedgeManaRows,E.BentCenterManaRows,E.OuterEdgeManaRows,E.SplitFlankManaRows,E.ForwardBridgeManaRows,E.CornerChainManaRows]),ia=Object.freeze({[E.Classic]:0,[E.SwappedManaRows]:1,[E.OffsetArcManaRows]:2,[E.CenterSpokeManaRows]:3,[E.AlternatingManaRows]:4,[E.InnerWedgeManaRows]:5,[E.OuterWedgeManaRows]:6,[E.BentCenterManaRows]:7,[E.OuterEdgeManaRows]:8,[E.SplitFlankManaRows]:9,[E.ForwardBridgeManaRows]:10,[E.CornerChainManaRows]:11}),hs=new Map(Gn.map(e=>[ia[e],e]));function sa(e){return ia[e]}i(sa,"gameVariantId");function Q(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(Z(n,t))))}i(Q,"locations");function De(e,n){return Object.freeze({[h.Black]:e,[h.White]:n})}i(De,"manaLayout");var ks=Object.freeze({[E.Classic]:De(Q([3,4],[3,6],[4,3],[4,5],[4,7]),Q([7,4],[7,6],[6,3],[6,5],[6,7])),[E.SwappedManaRows]:De(Q([3,3],[3,5],[3,7],[4,4],[4,6]),Q([7,3],[7,5],[7,7],[6,4],[6,6])),[E.OffsetArcManaRows]:De(Q([3,4],[3,6],[4,2],[4,5],[4,8]),Q([6,2],[6,5],[6,8],[7,4],[7,6])),[E.CenterSpokeManaRows]:De(Q([3,5],[4,2],[4,4],[4,6],[4,8]),Q([6,2],[6,4],[6,6],[6,8],[7,5])),[E.AlternatingManaRows]:De(Q([4,1],[4,3],[4,5],[4,7],[4,9]),Q([6,1],[6,3],[6,5],[6,7],[6,9])),[E.InnerWedgeManaRows]:De(Q([3,4],[3,6],[4,4],[4,5],[4,6]),Q([6,4],[6,5],[6,6],[7,4],[7,6])),[E.OuterWedgeManaRows]:De(Q([3,4],[3,5],[3,6],[4,3],[4,7]),Q([6,3],[6,7],[7,4],[7,5],[7,6])),[E.BentCenterManaRows]:De(Q([3,5],[4,4],[4,5],[4,6],[5,3]),Q([5,7],[6,4],[6,5],[6,6],[7,5])),[E.OuterEdgeManaRows]:De(Q([4,0],[4,1],[4,9],[4,10],[5,1]),Q([5,9],[6,0],[6,1],[6,9],[6,10])),[E.SplitFlankManaRows]:De(Q([3,4],[3,6],[4,2],[4,3],[5,2]),Q([5,8],[6,7],[6,8],[7,4],[7,6])),[E.ForwardBridgeManaRows]:De(Q([3,4],[3,6],[4,3],[4,5],[5,4]),Q([5,6],[6,5],[6,7],[7,4],[7,6])),[E.CornerChainManaRows]:De(Q([3,5],[3,6],[4,6],[4,7],[5,7]),Q([5,3],[6,3],[6,4],[7,4],[7,5]))}),ca=Object.freeze({kind:"regular"}),ra=Object.freeze({kind:"consumable-base"}),Ms=Object.freeze({kind:"supermana-base"}),Ct=Object.freeze(Z(5,5)),gt=Q([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function ua(e){return Number.isSafeInteger(e)?hs.get(e):void 0}i(ua,"gameVariantFromId");function aa(e,n){return ks[e][n]}i(aa,"manaBaseLocations");function Ss(e){let n=Array.from({length:121}).fill(ca),t=i((o,r)=>{n[oe(o)]=Object.freeze(r)},"put");t(Z(0,0),{kind:"mana-pool",color:h.Black}),t(Z(0,10),{kind:"mana-pool",color:h.Black}),t(Z(10,0),{kind:"mana-pool",color:h.White}),t(Z(10,10),{kind:"mana-pool",color:h.White}),t(Z(0,3),{kind:"mon-base",monKind:M.Mystic,color:h.Black}),t(Z(0,4),{kind:"mon-base",monKind:M.Spirit,color:h.Black}),t(Z(0,5),{kind:"mon-base",monKind:M.Drainer,color:h.Black}),t(Z(0,6),{kind:"mon-base",monKind:M.Angel,color:h.Black}),t(Z(0,7),{kind:"mon-base",monKind:M.Demon,color:h.Black}),t(Z(10,3),{kind:"mon-base",monKind:M.Demon,color:h.White}),t(Z(10,4),{kind:"mon-base",monKind:M.Angel,color:h.White}),t(Z(10,5),{kind:"mon-base",monKind:M.Drainer,color:h.White}),t(Z(10,6),{kind:"mon-base",monKind:M.Spirit,color:h.White}),t(Z(10,7),{kind:"mon-base",monKind:M.Mystic,color:h.White});for(let o of aa(e,h.Black))t(o,{kind:"mana-base",color:h.Black});for(let o of aa(e,h.White))t(o,{kind:"mana-base",color:h.White});return t(Z(5,0),ra),t(Z(5,10),ra),t(Ct,Ms),Object.freeze(n)}i(Ss,"buildSquares");var Is=new Map(Gn.map(e=>[e,Ss(e)]));function no(e){let n=Is.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}i(no,"squaresForVariant");function Jo(e,n){return Wn(e),no(n)[oe(e)]??ca}i(Jo,"squareAtForVariant");function As(e){return Jo(e,ln)}i(As,"squareAt");function Cs(e){switch(e.kind){case"mon-base":return Fe(Vn(e.monKind,e.color,0));case"mana-base":return Ze(Yn(e.color));case"supermana-base":return Ze(Mn);case"consumable-base":return bt(A.BombOrPotion);case"regular":case"mana-pool":return}}i(Cs,"initialItemForSquare");function gs(e){return Object.freeze(no(e).map(Cs))}i(gs,"buildInitialItems");var Es=new Map(Gn.map(e=>[e,gs(e)]));function la(e){let n=Es.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}i(la,"initialItemsForVariant");function da(e,n){for(let t of gt){let o=As(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")}i(da,"monBase");var Ce=Object.keys(jo).length,dn=Object.keys(ze).length,Et=Ce*dn,J=1,fe=2,H=3,vt=1,Tt=2,be=3,ge=1,fa=2,Ee=3,wt=ze[M.Demon],he=ze[M.Drainer],Ot=ze[M.Angel],to=ze[M.Spirit],oo=ze[M.Mystic],vs=0,Ts=1,Je=2,ws=3,pa=5,ce=7,tt=oe(Ct);function G(e){return e&3}i(G,"cellOccupancy");function re(e){return e>>2&7}i(re,"cellMonKind");function me(e){return e>>5&1}i(me,"cellMonColor");function ae(e){return e>>6&3}i(ae,"cellCooldown");function x(e){return e>>8&3}i(x,"cellMana");function N(e){return e>>10&3}i(N,"cellConsumable");function ot(e){let n=N(e);return n===0||n===ge}i(ot,"damagingAttackCanComplete");function rt(e,n,t,o,r){return H|e<<2|n<<5|t<<6|o<<8|r<<10}i(rt,"makeMonCell");function Cn(e){return J|e<<8}i(Cn,"makeManaCell");function ba(e){return fe|e<<10}i(ba,"makeConsumableCell");function Ve(e,n){return qo(e===be,e-1===n)}i(Ve,"manaScoreValue");function ie(e,n){return e*Ce+n}i(ie,"monId");function at(e){return e!==Je&&e<ce}i(at,"squareIsRegularForMovement");function en(e){return e>=pa&&e<ce}i(en,"squareIsPool");function ro(e){return Math.trunc((e-ce)/Ce)}i(ro,"squareMonBaseKind");function ao(e){return(e-ce)%Ce}i(ao,"squareMonBaseColor");function w(e,n){return e[n]??0}i(w,"u8");function g(e,n){return e[n]??0}i(g,"u16");function d(e,n){return e[n]??0}i(d,"i32");function ke(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}i(ke,"at");function io(e,n,t){return rt(ze[e.kind],He(e.color),e.cooldown,n,t)}i(io,"fastMonCellFromMon");function Os(e){let n=new Uint8Array(121),t=no(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]=Ts;break;case"supermana-base":n[o]=Je;break;case"mana-base":n[o]=ws+He(r.color);break;case"mana-pool":n[o]=pa+He(r.color);break;case"mon-base":n[o]=ce+ie(ze[r.monKind],He(r.color));break}}return n}i(Os,"buildSquares");var xs=new Map(Gn.map(e=>[e,Os(e)]));function so(e){let n=xs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Re(t)}}i(so,"fastSquaresForVariant");var co=(()=>{let e=new Int32Array(Et).fill(-1),n=so(ke(Gn,0));for(let t of gt){let o=oe(t),r=w(n,o);r>=ce&&(e[r-ce]=o)}return e})();function xt(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(nt(r)).map(oe).sort((s,u)=>s-u);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}i(xt,"buildOffsetTable");var ue=xt(Be),gn=xt(Zt),En=xt(Jt),uo=xt(eo),lo=xt(Yt),Rs=(()=>{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),s=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-s))}}return e})();function Me(e,n){return w(Rs,e*121+n)}i(Me,"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)}i(_s,"midpointCompute");var Ns=(()=>{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 mo(e,n){return w(Ns,e*121+n)}i(mo,"midpoint");var ma=(()=>{let e=[],n=so(ke(Gn,0));for(let t=0;t<121;t+=1)en(w(n,t))&&e.push(t);return new Int32Array(e)})(),ya=(()=>{let e=new Uint8Array(121*Ce);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<Ce;a+=1){let s=a===0?10:0,u=Math.abs(s-t);e[a*121+n]=u>r?u:r}}return e})(),ha=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(Qr-Math.trunc(n/11));return e})(),nn=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<ma.length;o+=1){let r=Me(n,d(ma,o));r<t&&(t=r)}e[n]=t}return e})();function Ps(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}i(Ps,"xorshift");function vn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}i(vn,"randomTable");var Tn=Ps(49734321),ka=3,fo=1+Et*ka,Ls=vn(Tn,121*fo),Fs=vn(Tn,121*fo),Bs=vn(Tn,484),Ds=vn(Tn,484),Vs=vn(Tn,484),Us=vn(Tn,484),Ma=2048,po=vn(Tn,Ma),er=vn(Tn,Ma);function Sa(e){return G(e)!==H?0:1+ie(re(e),me(e))*ka+ae(e)}i(Sa,"monSlot");function bo(e,n){return n===0?0:d(Ls,e*fo+Sa(n))^d(Bs,e*4+x(n))^d(Vs,e*4+N(n))}i(bo,"cellHashLo");function yo(e,n){return n===0?0:d(Fs,e*fo+Sa(n))^d(Ds,e*4+x(n))^d(Us,e*4+N(n))}i(yo,"cellHashHi");function nr(e,n){return e>=Ae?h.White:n>=Ae?h.Black:void 0}i(nr,"winnerForScores");function ho(e){return nr(e.whiteScore,e.blackScore)}i(ho,"winnerForState");function it(e){return e.turnNumber===1}i(it,"isFirstTurnState");function ko(e){return e.activeColor===h.White?e.whitePotionsCount:e.blackPotionsCount}i(ko,"currentPlayerPotions");function mn(e){return e<ee}i(mn,"canMoveMonForCounts");function Ia(e){return mn(e.monsMovesCount)}i(Ia,"canPlayerMoveMon");function wn(e,n){return!e&&n<An}i(wn,"canMoveManaForCounts");function Aa(e){return wn(it(e),e.manaMovesCount)}i(Aa,"canPlayerMoveMana");function Mo(e,n,t){return!e&&(t>0||n<_e)}i(Mo,"canUseActionForCounts");function Ca(e){return Mo(it(e),e.actionsUsedCount,ko(e))}i(Ca,"canPlayerUseAction");function ga(e,n){if(n===void 0)return!0;let t=$(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===M.Drainer&&!Ie(n.mon):e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"mana":return t?.kind===M.Drainer&&!Ie(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"consumable":return n.consumable===A.BombOrPotion&&t!==void 0}}i(ga,"spiritDestinationItemAllowed");function tr(e,n,t,o,r,a,s){if(!wn(e,t))return!1;let u=mn(n);return!u&&!Mo(e,o,r)||!a||s&&!u&&o>=_e&&r>0}i(tr,"shouldSuggestRegularManaStartsFromScalars");function Ea(e,n,t){return tr(it(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,ko(e),n,t)}i(Ea,"shouldSuggestRegularManaStarts");function or(e,n,t,o){return e?!mn(n):wn(e,t)?!mn(n)&&!o:!0}i(or,"shouldAdvanceTurnForCounts");function Kn(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}}i(Kn,"regularSquareForMovement");function rr(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Kn(o)&&t.mon.kind===M.Drainer:t!==void 0?!1:Kn(o)}i(rr,"regularManaMoveDestinationAllowed");function Ws(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Be(n))if(rr(e.board,t))return!0;return!1}i(Ws,"hasMovableFreeRegularMana");function va(e){let n=it(e),o=!(!n&&wn(n,e.manaMovesCount)&&!mn(e.monsMovesCount))||Ws(e);return or(n,e.monsMovesCount,e.manaMovesCount,o)}i(va,"shouldAdvanceTurn");var tn=0,Io=1,cr=2,Xe=3,On=4,ur=5,Se=127,on=0,fn=1,$n=2,lr=3,dr=-2,Ta=16;function ye(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}i(ye,"encodeMove");function st(e){return e&7}i(st,"moveType");function Qe(e){return e>>3&127}i(Qe,"moveFrom");function Ne(e){return e>>10&127}i(Ne,"moveTo");function ct(e){return e>>17&127}i(ct,"moveAux");function Rt(e){return e>>24&3}i(Rt,"moveModifier");function ar(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}i(ar,"validateArrayLength");var ir=class{static{i(this,"MutableFastPosition")}cells=new Uint16Array(121);squares=new Uint8Array(121);monLocations=new Int32Array(Et).fill(-1);freeMana=new Int32Array(Ce);manaIndices=new Int32Array(Ta);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=new Int32Array(Ce);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.cells.set(t.cells),this.squares=t.squares;let o=this.monLocations,r=t.monLocations;for(let u=0;u<Et;u+=1)o[u]=d(r,u);this.freeMana[0]=d(t.freeMana,0),this.freeMana[1]=d(t.freeMana,1);let a=this.manaIndices,s=t.manaIndices;for(let u=0;u<Ta;u+=1)a[u]=d(s,u);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.potions[0]=d(t.potions,0),this.potions[1]=d(t.potions,1),this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){ar(n.cells,121,"cells"),ar(n.squares,121,"squares"),ar(n.potions,Ce,"potions");let t;try{t=new Uint8Array(n.squares)}catch(f){Re(f)}let o=0;for(let f=0;f<121;f+=1){let p=g(n.cells,f);if(!(p===0||G(p)!==J)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,s=n.active,u=n.monsMoves,c=n.manaMoves,l=n.actionsUsed,m=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=s,this.monsMoves=u,this.manaMoves=c,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=m,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^=bo(o,r),t^=yo(o,r);let a=G(r);if(a===H)this.monLocations[ie(re(r),me(r))]=o;else if(a===J){let s=x(r);(s===1||s===2)&&(this.freeMana[s-1]=d(this.freeMana,s-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},Ao=ir;function _t(e,n,t){let o=d(e.monLocations,ie(Ot,n));if(o<0)return!1;let r=g(e.cells,o);return G(r)===H&&re(r)===Ot&&me(r)===n&&ae(r)===0&&Me(o,t)===1}i(_t,"awakeAngelGuards");function Gs(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(d(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=d(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}i(Gs,"removeManaIndex");function Ks(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&&d(e.manaIndices,o-1)>n;)e.manaIndices[o]=d(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}i(Ks,"insertManaIndex");function K(e,n,t){let o=g(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=bo(n,o),e.hashHi^=yo(n,o);let r=G(o);if(r===H){let a=ie(re(o),me(o));d(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===J){let a=x(o);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)-1),Gs(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=bo(n,t),e.hashHi^=yo(n,t);let r=G(t);if(r===H)e.monLocations[ie(re(t),me(t))]=n;else if(r===J){let a=x(t);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)+1),Ks(e,n)}}}}i(K,"setCell");function So(e){return rt(re(e),me(e),ae(e),0,0)}i(So,"plainMonCell");function jn(e,n,t){return rt(re(e),me(e),ae(e),n,t)}i(jn,"carryingMonCell");function wa(e,n){e.potions[n]=d(e.potions,n)+1}i(wa,"addPotion");function sr(e,n,t,o){if(x(n)===0&&N(n)===0&&o===fn){K(e,t,jn(n,0,ge));return}K(e,t,n),wa(e,me(n))}i(sr,"collectConsumableAt");function js(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}i(js,"addScore");function mr(e){if(e.actionsUsed<_e){e.actionsUsed+=1;return}e.potions[e.active]=d(e.potions,e.active)-1}i(mr,"consumeAction");function Oa(e,n){let t=re(n),o=me(n),r=d(co,ie(t,o));K(e,r,rt(t,o,2,0,0))}i(Oa,"faintMonAt");function $s(e){let n=g(e.cells,tt);G(n)===H&&x(n)===0&&N(n)===0?K(e,tt,jn(n,be,0)):K(e,tt,Cn(be))}i($s,"supermanaBackToBase");function qs(e,n,t){let o=x(n);if(o===be?$s(e):o!==0&&K(e,t,Cn(o)),N(n)===ge){let r=d(co,ie(re(n),me(n)));t!==r&&K(e,t,0)}}i(qs,"releaseFaintedCarry");function fr(e,n,t){Oa(e,n),qs(e,n,t)}i(fr,"faintTargetAndReleaseCarry");function pr(e,n,t){js(e,Ve(t,e.active));let o=g(e.cells,n);G(o)===H?K(e,n,So(o)):K(e,n,0)}i(pr,"scoreCarriedManaAt");function Hs(e,n){let t=Qe(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o),s=x(r);if(e.monsMoves+=1,K(e,t,0),K(e,o,r),a!==0){let u=G(a);u===J?(s!==0&&K(e,t,Cn(s)),K(e,o,jn(r,x(a),0))):u===fe&&N(a)===Ee&&sr(e,r,o,Rt(n))}s!==0&&en(w(e.squares,o))&&pr(e,o,s)}i(Hs,"applyMonMove");function zs(e,n){let t=Qe(n),o=Ne(n),r=x(g(e.cells,t)),a=g(e.cells,o);e.manaMoves+=1,K(e,t,0),K(e,o,Cn(r)),a!==0&&K(e,o,jn(a,r,0)),en(w(e.squares,o))&&pr(e,o,r)}i(zs,"applyManaMove");function Xs(e,n){let t=Ne(n),o=g(e.cells,t);mr(e),K(e,t,0),fr(e,o,t)}i(Xs,"applyMysticAction");function Qs(e,n){let t=Qe(n),o=Ne(n),r=Rt(n),a=r===lr?Se:ct(n),s=g(e.cells,t),u=g(e.cells,o),c=d(co,ie(re(s),me(s))),l=N(u)!==ge||a===Se||a===c;return K(e,t,0),a===Se?K(e,o,So(s)):K(e,o,0),mr(e),u!==0&&(fr(e,u,o),N(u)===ge&&Oa(e,s)),a!==Se&&(r===fn?K(e,a,jn(s,0,ge)):(K(e,a,So(s)),r===$n&&wa(e,me(s)))),l}i(Qs,"applyDemonAction");function Ys(e,n){let t=Qe(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o);K(e,o,0),K(e,t,So(r)),fr(e,a,o)}i(Ys,"applyBombAttack");function Zs(e,n){let t=Ne(n),o=ct(n),r=Rt(n),a=g(e.cells,t),s=g(e.cells,o),u=x(a);if(mr(e),K(e,t,0),K(e,o,a),s!==0){let c=G(a);if(c===H){let l=G(s);l===J?(u!==0&&K(e,t,Cn(u)),K(e,o,jn(a,x(s),0))):l===fe&&sr(e,a,o,r)}else c===J?K(e,o,jn(s,u,0)):c===fe&&sr(e,s,o,r)}u!==0&&en(w(e.squares,o))&&pr(e,o,u)}i(Zs,"applySpiritAction");function br(e){let n=nr(e.whiteScore,e.blackScore);return n===void 0?-1:He(n)}i(br,"positionWinner");function xa(e){return Mo(e.firstTurn,e.actionsUsed,d(e.potions,e.active))}i(xa,"canUseAction");function Ra(e,n){return d(e.freeMana,e.active)===0?!1:tr(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,d(e.potions,e.active),n!==0,!0)}i(Ra,"manaStartsAllowed");function ut(e,n){if(!at(w(e.squares,n)))return!1;let t=g(e.cells,n);return t===0||G(t)===H&&re(t)===he&&x(t)===0&&N(t)===0}i(ut,"manaMoveAllowed");function Js(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=d(e.manaIndices,t),r=g(e.cells,o);if(G(r)!==J||x(r)!==n)continue;let a=d(ue.starts,o),s=d(ue.counts,o);for(let u=0;u<s;u+=1){let c=d(ue.list,a+u);if(ut(e,c))return!0}}return!1}i(Js,"hasMovableFreeRegularMana");function ec(e){let t=!(!e.firstTurn&&wn(e.firstTurn,e.manaMoves)&&!mn(e.monsMoves))||d(e.freeMana,e.active)!==0&&Js(e);return or(e.firstTurn,e.monsMoves,e.manaMoves,t)}i(ec,"shouldAdvanceTurn");function nc(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<dn;t+=1){let o=d(e.monLocations,ie(t,n));if(o<0)continue;let r=g(e.cells,o),a=ae(r);a===0||x(r)!==0||N(r)!==0||K(e,o,rt(re(r),me(r),a-1,x(r),N(r)))}}i(nc,"advanceTurn");function _a(e,n){let t=e,o=st(n),r=!0;switch(o){case tn:Hs(t,n);break;case Io:zs(t,n);break;case cr:Xs(t,n);break;case Xe:r=Qs(t,n);break;case On:Zs(t,n);break;case ur:Ys(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=br(t);return a===-1&&ec(t)&&nc(t),r?a:dr}i(_a,"applyFastMove");function Na(e){switch(e){case A.Bomb:return ge;case A.Potion:return fa;case A.BombOrPotion:return Ee}}i(Na,"consumableCode");function Pa(e){return e.kind==="supermana"?be:He(e.color)===0?vt:Tt}i(Pa,"manaCode");var La=2147483647;function Fa(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>La-t||n.blackPotionsCount>La-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(In(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let s=$(a);if(s===void 0)continue;let u=ie(ze[s.kind],He(s.color));if(o[u]!==0)return!1;o[u]=1}try{tc(e,n)}catch(a){if(At(a))return!1;throw a}return!0}i(Fa,"tryLoadPosition");function tc(e,n){let t;try{t=new Uint16Array(121)}catch(r){Re(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]=io(a.mon,0,0);break;case"mana":t[r]=Cn(Pa(a.mana));break;case"mon-with-mana":t[r]=io(a.mon,Pa(a.mana),0);break;case"mon-with-consumable":t[r]=io(a.mon,0,Na(a.consumable));break;case"consumable":t[r]=ba(Na(a.consumable));break}}e.reset({cells:t,squares:so(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:He(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}i(tc,"loadPosition");function Co(e){return{kind:"location",location:nt(e)}}i(Co,"locationInput");function oc(e){return{kind:"modifier",modifier:e===fn?X.SelectBomb:X.SelectPotion}}i(oc,"modifierInput");function Ba(e){let n=st(e),t=[Co(Qe(e)),Co(Ne(e))];n===On?t.push(Co(ct(e))):n===Xe&&ct(e)!==Se&&t.push(Co(ct(e)));let o=Rt(e);return(o===fn||o===$n)&&(n===tn||n===Xe||n===On)&&t.push(oc(o)),t}i(Ba,"moveToInputs");var go=1e6,rc=-2147483648,ac=2147483647,ic=["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 yr(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 ic){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-go||r>go)throw new RangeError(`weights.${o} must be a safe integer from -${go} through ${go}`);t[o]=r}return Object.freeze(t)}i(yr,"normalizeEvalWeights");var Rn=yr({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}),pe=99,ve=Math.max(pe+1,11),Da=3,Ue=Ae+2,Eo=ee+1,hr=0,Ka=1,kr=2,xn=3,ja=3,$a=Eo,bn=6,Va=bn*2+1,Nt=6,Mr=2,Ua=12;function pn(e){let n=_n(ve);for(let t=0;t<ve;t+=1)n[t]=Math.trunc(e/(t+1));return n}i(pn,"distanceTable");function sc(e){let n=_n(ve),t=e.manaToNearestPool;for(let o=0;o<ve;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}i(sc,"manaStepQueueTable");function cc(e){let n=_n(Ue*Ue),t=new Set,o=i((r,a,s)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let u=r*Ue+a,c=a*Ue+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]=s,n[c]=-s},"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<Ue;r+=1)for(let a=0;a<Ue;a+=1)if(e.scoreUnit+d(n,(r+1)*Ue+a)-d(n,r*Ue+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}i(cc,"scoreShapeTable");function qa(e){let n=_n(ve);for(let t=0;t<ve;t+=1){let o=1+Math.ceil(t/ee);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}i(qa,"drainerTripTable");function uc(e){let n=qa(e);for(let t=0;t<ve;t+=1)n[t]=Xa(d(n,t),e.tripTwoPointScale,"two-point trip");return n}i(uc,"twoPointTripTable");function lc(e){let n=_n(Va);for(let t=0;t<Va;t+=1)n[t]=(t-bn)*e;return n}i(lc,"raceTable");function dc(e){let n=_n(ve);for(let t=0;t<ve;t+=1){let o=t>Ua?Ua:t;n[t]=o*e}return n}i(dc,"tripStepTable");function mc(e){let n=_n(Da*ve);for(let t=0;t<Da;t+=1){let o=t*ve;for(let r=0;r<ve;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}i(mc,"manaPointsAttractionTable");function Ha(e,n){return n===hr?100:n===kr?e.threatMoverScaleSpare:e.threatMoverScaleFew}i(Ha,"moverScale");function za(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)}i(za,"scaledSafeInteger");function Xa(e,n,t){let o=za(e,n,t);if(o<rc||o>ac)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}i(Xa,"scaledInt32");function fc(e){let n=_n(2*xn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1)n[t*xn+r]=Xa(e.drainerThreatImmediate*o,Ha(e,r),"immediate threat")}return n}i(fc,"threatImmediateTable");function pc(e){let n=bc(2*xn*Eo);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1){let a=Ha(e,r),s=(t*xn+r)*Eo;for(let u=0;u<Eo;u+=1)n[s+u]=za(Math.trunc(e.drainerThreatWalk*o*(ee+1-u)/ee),a,"walking threat")}}return n}i(pc,"threatWalkTable");function _n(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(_n,"createInt32Table");function bc(e){try{return new Float64Array(e)}catch(n){Re(n)}}i(bc,"createFloat64Table");function yc(e,n){let t=bn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=Ae-Mr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+d(n,o*Ue+r)-d(n,(o-1)*Ue+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}i(yc,"assertRaceStaysMonotone");function Qa(e){let n=cc(e);return yc(e,n),{weights:e,manaPointsAttraction:mc(e.manaPointsAttraction),manaToOwnerPool:pn(e.manaToOwnerPool),manaToNearestPool:sc(e),scoreShape:n,drainerTrip:qa(e),drainerTripTwoPoint:uc(e),race:lc(e.raceHalfTurn),tripStep:dc(e.tripGradient),carrierCloseToPool:pn(e.carrierCloseToPool),drainerCloseToMana:pn(e.drainerCloseToMana),drainerCloseToOwnPool:pn(e.drainerCloseToOwnPool),drainerCloseToSupermana:pn(e.drainerCloseToSupermana),angelCloseToDrainer:pn(e.angelCloseToDrainer),spiritCloseToEnemy:pn(e.spiritCloseToEnemy),monCloseToCenter:pn(e.monCloseToCenter),attackerCloseToEnemyDrainer:pn(e.attackerCloseToEnemyDrainer),threatImmediate:fc(e),threatWalk:pc(e)}}i(Qa,"createEvalTables");var vo=Qa(Rn),Wa=new WeakMap;function Ya(e){if(e===Rn)return Rn;if(!Object.isFrozen(e))return yr(e);let n=Wa.get(e);return n===void 0&&(n=yr(e),Wa.set(e,n)),n}i(Ya,"memoizedNormalizedEvalWeights");var Ga=new WeakMap;function Za(e){if(e===Rn)return vo;let n=Ga.get(e);return n===void 0&&(n=Qa(e),Ga.set(e,n)),n}i(Za,"memoizedEvalTables");var yn=1e6;function Ja(e,n){return w(ya,n*121+e)}i(Ja,"ownPoolDistance");var ei=Int32Array.of(0,10,110,120);function hc(e,n){for(let t=0;t<ei.length;t+=1){let o=d(ei,t);if(Me(n,o)===1&&ut(e,o))return!0}return!1}i(hc,"hasAdjacentScoringPool");function ni(e,n,t,o){return d(n,t>o?t-o:0)-d(e.tripStep,t)}i(ni,"tripValue");function kc(e){return w(ha,e)}i(kc,"centerDistance");var Sr=new WeakMap,Pt,lt;function Mc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(Mc,"sameSquareContent");function Sc(e){try{let n=new Uint8Array(14641).fill(pe),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let s=0;s<121;s+=1){let u=d(gn.starts,s),c=d(gn.counts,s);for(let f=0;f<121;f+=1){let p=pe;for(let b=0;b<c;b+=1){let y=d(gn.list,u+b);if(w(e,y)>=ce)continue;let C=Me(f,y);C<p&&(p=C)}n[s*121+f]=p}t[s]=r.length;let l=d(En.starts,s),m=d(En.counts,s);for(let f=0;f<m;f+=1){let p=d(En.list,l+f);if(w(e,p)>=ce)continue;let b=mo(s,p),y=w(e,b);y===Je||y>=ce||(r.push(p),a.push(b))}o[s]=r.length-d(t,s)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Re(n)}}i(Sc,"buildAttackTables");function Ic(e){if(e===Pt&<!==void 0)return lt;let n=Sr.get(e);if(n!==void 0)return Pt=e,lt=n,n;if(lt!==void 0&&Mc(Pt,e)){let o=lt;return Sr.set(e,o),Pt=e,o}let t=Sc(e);return Sr.set(e,t),Pt=e,lt=t,t}i(Ic,"attackTablesFor");function Ac(e,n,t,o){if(!ot(g(e.cells,n)))return pe;let r=t^1,a=pe,s=Ic(e.squares);for(let u=0;u<dn;u+=1){let c=d(e.monLocations,ie(u,r));if(c<0)continue;let l=g(e.cells,c);if(G(l)!==H)continue;if(N(l)===ge){let p=Me(c,n)-3,b=p<0?0:p;if(b===0)return 0;b<a&&(a=b);continue}if(ae(l)!==0||N(l)!==0||o||x(l)!==0)continue;if(u===oo){let p=w(s.mysticSteps,n*121+c);if(p===0)return 0;p<a&&(a=p);continue}if(u!==wt)continue;let m=d(s.demonStarts,n),f=d(s.demonCounts,n);for(let p=0;p<f;p+=1){let b=d(s.demonBetween,m+p);if(b!==c&&g(e.cells,b)!==0)continue;let y=Me(c,d(s.demonOrigins,m+p));if(y===0)return 0;y<a&&(a=y)}}return a}i(Ac,"estimatedAttackSteps");function ti(e,n,t=0){let o=n.weights,r=(e.whiteScore-e.blackScore)*o.scoreUnit+d(n.scoreShape,e.whiteScore*Ue+e.blackScore)+(d(e.potions,0)-d(e.potions,1))*o.potion,a=d(e.monLocations,ie(he,0)),s=d(e.monLocations,ie(he,1)),u=a>=0&&ae(g(e.cells,a))===0,c=s>=0&&ae(g(e.cells,s))===0,l=pe,m=pe,f=pe,p=pe,b=pe,y=pe,C=ee-e.monsMoves,I=t!==0,_=Ae-e.whiteScore,P=Ae-e.blackScore,F=0,D=Nt,L=Nt,V=Nt,U=Nt,le=!1,Ge=!1;if(I){if(a>=0){let S=g(e.cells,a);le=ae(S)<=1&&x(S)===0&&N(S)===0}if(s>=0){let S=g(e.cells,s);Ge=ae(S)<=1&&x(S)===0&&N(S)===0}}let Te=0,sn=0,cn=!1,Pe=!1,Fn=0,de=0,we=0,Ke=0;for(let S=0;S<e.manaCount;S+=1){let v=d(e.manaIndices,S),je=g(e.cells,v);if(G(je)!==J)continue;let j=x(je),z=u?Me(a,v):pe,ne=c?Me(s,v):pe;z<l&&(l=z),ne<m&&(m=ne);let se=w(nn,v);if(u){let T=z+se;j===vt&&T<f?f=T:j!==vt&&T<b&&(b=T)}if(c){let T=ne+se;j===Tt&&T<p?p=T:j!==Tt&&T<y&&(y=T)}if(I){let T=!1;if(j!==be&&se<=1&&hc(e,v)&&(T=!0,j-1===0?Fn<2&&(Fn+=1):de<2&&(de+=1)),le&&(u?z:Me(a,v))+se<=ee){let te=Ve(j,0);te>Te?(Te=te,cn=T&&j-1===0):te===Te&&!(T&&j-1===0)&&(cn=!1)}if(Ge&&(c?ne:Me(s,v))+se<=ee){let te=Ve(j,1);te>sn?(sn=te,Pe=T&&j-1===1):te===sn&&!(T&&j-1===1)&&(Pe=!1)}}let $e=ne-z;if($e>4&&($e=4),$e<-4&&($e=-4),o.manaPointsAttraction!==0){let T=n.manaPointsAttraction;u&&(r+=d(T,Ve(j,0)*ve+z)),c&&(r-=d(T,Ve(j,1)*ve+ne))}if(j===be)r+=o.supermanaDrainerControl*$e;else{let T=j-1,R=T===0?1:-1;r+=R*d(n.manaToOwnerPool,Ja(v,T)),r+=R*d(n.manaToNearestPool,se),r+=o.manaDrainerControl*$e,se<=2&&(T===0?_:P)<=1&&(F|=T===0?1:2),T===0?se<D&&(D=se):se<L&&(L=se)}}F!==0&&(r+=o.manaStepWinThreat*(((F&1)===0?0:1)-((F&2)===0?0:1)));for(let S=0;S<Ce;S+=1){let v=S===0?1:-1,je=S^1;for(let j=0;j<dn;j+=1){let z=d(e.monLocations,ie(j,S));if(z<0)continue;let ne=g(e.cells,z);if(G(ne)!==H)continue;let se=ae(ne);se!==0&&(r-=v*((j===he?o.faintDrainer:o.faintMon)+o.faintCooldownStep*se));let $e=w(e.squares,z);se===0&&$e<ce&&(r+=v*o.activeMon);let T=x(ne);if(T!==0){let R=Ve(T,S),te=w(nn,z);r+=v*(d(n.carrierCloseToPool,te)+R*o.carrierPointBonus),T===be&&(r+=v*o.supermanaCarrier),S===e.active&&te<=C?r+=v*o.carrierScoresThisTurn*R:S!==e.active&&te<=ee&&(r+=v*o.carrierScoresNextTurn*R,I&&(S===0?R>we&&(we=R):R>Ke&&(Ke=R)));let qe=S===0?e.whiteScore:e.blackScore;R>=Ae-qe&&(r+=v*o.winningCarrier)}else N(ne)===ge&&(r+=v*o.bomb);if(se===0)if(j===he){let R=0,te=S===0?l:m,qe=S===0?f:p,Bn=S===0?b:y,$t=qe<Bn?qe:Bn,qt=S===e.active?C:ee,Fr=n.drainerTrip,Ht=T!==0?w(nn,z):N(ne)!==0?pe:qe;T===0&&N(ne)===0&&Bn<pe&&(qe>=pe||ni(n,n.drainerTripTwoPoint,Bn,qt)>ni(n,n.drainerTrip,qe,qt))&&(Fr=n.drainerTripTwoPoint,Ht=Bn),R-=d(n.tripStep,Ht);let Br=Ht>qt?Ht-qt:0,zt=1+((Br+ee-1)/ee|0);S===0?zt<V&&(V=zt):zt<U&&(U=zt),R+=d(Fr,Br),R+=d(n.drainerCloseToMana,te),R+=d(n.drainerCloseToOwnPool,Ja(z,S)),R+=d(n.drainerCloseToSupermana,Me(z,tt)),T===0&&N(ne)===0&&S===e.active&&$t<=C&&(R+=o.drainerPickupScoresThisTurn),r+=v*R;let Dr=_t(e,S,z),Wo=Ac(e,z,S,Dr),zi=T!==0,Xi=S!==e.active||C===0?hr:C>=ja?kr:Ka,Vr=(zi?xn:0)+Xi;Wo===0?r-=v*d(n.threatImmediate,Vr):Wo<=ee&&(r-=v*(n.threatWalk[Vr*$a+Wo]??0)),Dr&&(r+=v*o.angelGuardingDrainer)}else if(j===Ot){let R=S===0?a:s;R>=0&&(r+=v*d(n.angelCloseToDrainer,Me(z,R)))}else if(j===to){let R=pe;for(let te=0;te<dn;te+=1){let qe=d(e.monLocations,ie(te,je));if(qe<0)continue;let Bn=g(e.cells,qe);if(ae(Bn)!==0)continue;let $t=Me(z,qe);$t<R&&(R=$t)}r+=v*d(n.spiritCloseToEnemy,R),$e>=ce&&(r-=v*o.spiritOnOwnBase)}else{r+=v*d(n.monCloseToCenter,kc(z));let R=je===0?a:s,te=je===0?u:c;R>=0&&te&&(r+=v*d(n.attackerCloseToEnemyDrainer,Me(z,R)))}}}if(o.raceHalfTurn!==0&&(_<P?_:P)<=Mr){let S=e.manaMoves>0?1:0,v=D+(e.active===0?S:0),je=L+(e.active===1?S:0),j=V<v?V:v,ne=(U<je?U:je)*2+(e.active===1?0:1)-(j*2+(e.active===0?0:1)),se=ne>bn?bn:ne<-bn?-bn:ne;r+=d(n.race,se+bn)}if(I){let S=e.active^1,v=S===0?1:-1,je=S===0?Te:sn,j=S===0?we:Ke,z=S===0?Fn:de,ne=z>0,se=S===0?cn:Pe,$e=z>=2||z===1&&!se,T=je;T>0&&$e&&(T+=1);let R=j;R>0&&ne&&(R+=1),R>T&&(T=R),ne&&T<1&&(T=1);let te=S===0?e.whiteScore:e.blackScore;T>0&&te+T>=Ae&&(r+=v*t)}return r}i(ti,"evaluateWithTables");var hn=704,To=1073741824;function Bt(e,n){return n?e+To:e}i(Bt,"encodeGeneratedMoves");function Lt(e){return e>=To?e-To:e}i(Lt,"generatedMoveCount");function Ft(e){return e>=To}i(Ft,"generatedMovesHadRawStartOption");function Ir(e,n){return G(e)===H&&me(e)!==n&&ae(e)===0}i(Ir,"isEnemyAwakeMon");function Ar(e){let n=131072;return x(e)!==0&&(n+=1<<20),re(e)===he&&(n+=1<<19),n}i(Ar,"damagingAttackKey");function Cc(e,n,t){let o=g(e.cells,t),r=w(e.squares,t),a=G(n),s=a===H,u=x(n),c=N(n),l=o===0?-1:G(o),m=l===H&&(x(o)!==0||N(o)!==0);if(l===H)if(m){if(a!==fe||c!==Ee)return 0}else{if(s)return 0;if(a===J){if(re(o)!==he||ae(o)!==0)return 0}else if(c!==Ee)return 0}else if(l===J){if(!s||re(n)!==he||ae(n)!==0)return 0}else if(l===fe&&(N(o)!==Ee||!s))return 0;if(r>=ce){if(!s||ro(r)!==re(n)||ao(r)!==me(n)||u!==0||c!==0)return 0}else if(r===Je){let f=l===J&&x(o)===be,p=s&&re(n)===he;if(!(u===be||u===0&&p&&(o===0||f)||p&&f))return 0}return o===0?1:s?u===0&&c===0?l===fe?N(o)===Ee?2:0:1:u!==0?l===fe?N(o)===Ee?1:0:1:l!==fe||N(o)!==Ee?0:1:a===J?l!==H||m?0:1:l!==H?0:m?c===Ee?1:0:2}i(Cc,"spiritDestinationOptionCount");function gc(e,n,t,o,r,a){let s=r,u=!1,c=re(t),l=me(t),m=x(t),f=N(t),p=e.active,b=w(nn,n),y=c===he?1024:0,C=d(ue.starts,n),I=d(ue.counts,n);for(let _=0;_<I;_+=1){let P=d(ue.list,C+_),F=g(e.cells,P),D=w(e.squares,P),L=F===0?-1:G(F),V;if(m!==0)L===H?V=!1:L===J||L===fe?V=!0:V=at(D)||D===Je&&m===be;else if(f!==0)L===fe?V=!0:L===-1?V=at(D):V=!1;else{let le;L===H?le=!1:L===J?le=c===he:le=!0,le?D>=ce?V=ro(D)===c&&ao(D)===l:D===Je?V=c===he&&(F===0||L===J&&x(F)===be):V=!0:V=!1}if(!V||(u=!0,L===fe&&N(F)!==Ee))continue;let U=0;m!==0&&en(D)&&(U+=(1<<21)+Ve(m,p)*(1<<18)),F!==0&&(L===J?U+=65536+Ve(x(F),p)*512:L===fe&&(U+=16384)),m!==0?U+=(b-w(nn,P))*2048+4096:U+=y,L===fe&&N(F)===Ee&&m===0&&f===0?(a[s]=U,o[s]=ye(tn,n,P,Se,fn),s+=1,a[s]=U,o[s]=ye(tn,n,P,Se,$n),s+=1):(a[s]=U,o[s]=ye(tn,n,P,Se,on),s+=1)}return Bt(s,u)}i(gc,"generateMonMoves");function Ec(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(gn.starts,n),l=d(gn.counts,n);for(let m=0;m<l;m+=1){let f=d(gn.list,c+m),p=g(e.cells,f);Ir(p,a)&&(_t(e,a^1,f)||(u=!0,ot(p)&&(r[s]=Ar(p),t[s]=ye(cr,n,f,Se,on),s+=1)))}return Bt(s,u)}i(Ec,"generateMysticMoves");function vc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=wt,l=a,m=d(En.starts,n),f=d(En.counts,n);for(let p=0;p<f;p+=1){let b=d(En.list,m+p),y=g(e.cells,b);if(!Ir(y,a)||_t(e,a^1,b))continue;let C=mo(n,b);if(g(e.cells,C)!==0)continue;let I=w(e.squares,C);if(I===Je||I>=ce||(u=!0,!ot(y)))continue;let _=Ar(y),P=w(e.squares,b),F=x(y);if(!(!(N(y)===ge)&&(F!==0&&F!==be||P===Je||P>=ce))){r[s]=_,t[s]=ye(Xe,n,b,Se,on),s+=1;continue}let V=s,U=d(ue.starts,b),le=d(ue.counts,b);for(let Ge=0;Ge<le;Ge+=1){let Te=d(ue.list,U+Ge),sn=g(e.cells,Te),cn=sn===0?-1:G(sn);if(cn!==-1&&cn!==fe)continue;let Pe=w(e.squares,Te);(at(Pe)||Pe>=ce&&ro(Pe)===c&&ao(Pe)===l)&&(cn===fe?N(sn)===Ee?(r[s]=_,t[s]=ye(Xe,n,b,Te,fn),s+=1,r[s]=_,t[s]=ye(Xe,n,b,Te,$n),s+=1):(r[s]=_,t[s]=ye(Xe,n,b,Te,lr),s+=1):(r[s]=_,t[s]=ye(Xe,n,b,Te,on),s+=1))}s===V&&(r[s]=_,t[s]=ye(Xe,n,b,Se,on),s+=1)}return Bt(s,u)}i(vc,"generateDemonMoves");function Tc(e,n,t,o,r){let a=o,s=!1,u=e.active,c=d(uo.starts,n),l=d(uo.counts,n);for(let m=0;m<l;m+=1){let f=d(uo.list,c+m),p=g(e.cells,f);if(p===0||G(p)===H&&ae(p)!==0)continue;s=!0;let b=x(p),y=G(p)===J,C=w(nn,f),I=(1<<21)+Ve(b,u)*(1<<18),_=d(ue.starts,f),P=d(ue.counts,f);for(let F=0;F<P;F+=1){let D=d(ue.list,_+F),L=Cc(e,p,D);if(L===0)continue;let V=0;b!==0&&en(w(e.squares,D))?V+=8192+I:y&&wc(e,D,C,u)&&(V+=40960),L===2?(r[a]=V,t[a]=ye(On,n,f,D,fn),a+=1,r[a]=V,t[a]=ye(On,n,f,D,$n),a+=1):(r[a]=V,t[a]=ye(On,n,f,D,on),a+=1)}}return Bt(a,s)}i(Tc,"generateSpiritMoves");function wc(e,n,t,o){if(w(nn,n)<t)return!0;let r=g(e.cells,n);return G(r)===H&&re(r)===he&&me(r)===o&&ae(r)===0}i(wc,"advancesMana");function Oc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(lo.starts,n),l=d(lo.counts,n);for(let m=0;m<l;m+=1){let f=d(lo.list,c+m),p=g(e.cells,f);Ir(p,a)&&(u=!0,ot(p)&&(r[s]=Ar(p),t[s]=ye(ur,n,f,Se,on),s+=1))}return Bt(s,u)}i(Oc,"generateBombMoves");function xc(e,n,t,o,r){let a=o,s=d(ue.starts,n),u=d(ue.counts,n);for(let c=0;c<u;c+=1){let l=d(ue.list,s+c),m=w(e.squares,l);ut(e,l)&&(r[a]=en(m)?(1<<21)+(1<<18):16,t[a]=ye(Io,n,l,Se,on),a+=1)}return a}i(xc,"generateManaMoves");function Rc(e,n,t,o,r){let a=o;if(w(nn,n)!==1)return a;let s=d(ue.starts,n),u=d(ue.counts,n);for(let c=0;c<u;c+=1){let l=d(ue.list,s+c),m=w(e.squares,l);!en(m)||!ut(e,l)||(r[a]=(1<<21)+(1<<18),t[a]=ye(Io,n,l,Se,on),a+=1)}return a}i(Rc,"generateWinningManaMoves");var _c=new Int32Array(hn);function Cr(e,n,t=_c){let o=e.active,r=mn(e.monsMoves),a=xa(e),s=0,u=0;for(let c=0;c<dn;c+=1){let l=d(e.monLocations,ie(c,o));if(l<0)continue;let m=g(e.cells,l);if(G(m)!==H)continue;let f=!1,p=x(m),b=N(m),y=p!==0||b!==0;if(!(!y&&ae(m)!==0)){if(r){let C=gc(e,l,m,n,s,t);s=Lt(C),f||=Ft(C)}if(y){if(b===ge){let C=Oc(e,l,n,s,t);s=Lt(C),f||=Ft(C)}}else if(w(e.squares,l)<ce&&a){if(c===oo){let I=Ec(e,l,n,s,t);s=Lt(I),f||=Ft(I)}else if(c===wt){let I=vc(e,l,n,s,t);s=Lt(I),f||=Ft(I)}else if(c===to){let I=Tc(e,l,n,s,t);s=Lt(I),f||=Ft(I)}}f&&(u+=1)}}if(Ra(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=xc(e,m,n,s,t))}}else if(d(e.freeMana,o)!==0&&wn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=Ae){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=Rc(e,m,n,s,t))}}if(s>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${s} moves for ${n.length} slots`);return s}i(Cr,"generateMoves");var rn=48,wo=rn-2,Nn=yn-rn-1,Oo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),oi=new WeakMap;function ii(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return ri(e);let t=oi.get(e);return t===void 0&&(t=ri(e),oi.set(e,t)),t}i(ii,"memoizedSearchLimits");function ri(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>wo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${wo}`);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?Oo:Nc(r)})}i(ri,"normalizeSearchLimits");function Nc(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:ai(n,"lateMoveReduction"),lateMoveIndex:kn(n,"lateMoveIndex",hn),lateMoveDeepIndex:kn(n,"lateMoveDeepIndex",hn),moveCountPruning:ai(n,"moveCountPruning"),moveCountDepth:kn(n,"moveCountDepth",wo),moveCountBase:kn(n,"moveCountBase",hn),moveCountFactor:kn(n,"moveCountFactor",hn),futilityMargin:kn(n,"futilityMargin",Nn),aspirationDelta:kn(n,"aspirationDelta",Nn),aspirationMinDepth:kn(n,"aspirationMinDepth",wo),winsNextTurnThreat:kn(n,"winsNextTurnThreat",Nn)})}i(Nc,"normalizeSearchTuning");function ai(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}i(ai,"normalizedTuningBoolean");function kn(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}i(kn,"normalizedTuningInteger");var qn=1<<20,Dt=new Int32Array(0);function Vt(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(Vt,"allocateTranspositionPart");var xo=class{static{i(this,"TranspositionTable")}keyLo=Dt;keyHi=Dt;score=Dt;info=Dt;move=Dt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=qn-1,!0;if(n())return!1;let t=Vt(qn);if(n())return!1;let o=Vt(qn);if(n())return!1;let r=Vt(qn);if(n())return!1;let a=Vt(qn);if(n())return!1;let s=Vt(qn);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=s,this.entries=0,this.generation=1,this.mask=qn-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 Pc=16,Ut=1<<Pc,Lc=Ut-1,Fc=1<<30,si=0,ci=1,ui=2,Bc=3,li=4194303,Dc=2047,Vc=32768,Uc=1<<28,Wc=1<<24,Gc=1<<23,Pn=yn*2,di=i(()=>!1,"NO_TIMEOUT"),bi=Ce,yi=ee+1,hi=An+1,ki=_e+1,Mi=2,gr=4,Kc=bi*yi*hi*ki*Mi*gr*gr;if(po.length!==er.length||po.length<Kc)throw new RangeError("fast scalar hash table is too small for the configured state space");function jc(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(jc,"sameSquares");var Ro=class{static{i(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(rn*2);#a=new Int32Array(Ce*121*121);#y=new Int32Array(rn+1);#s=new Int32Array(Ut);#h=new Int32Array(Ut);#b=new Int32Array(Ut);#d=new Float64Array(Ut);#c=0;#k;#M=0;#S;#m=vo;#C=Oo;#g=0;#f=0;#E=0;#u=!1;#v=!1;#i=0;#I=di;constructor(){this.#o=new xo;for(let n=0;n<=rn;n+=1)this.#e.push(new Ao),this.#n.push(new Int32Array(hn)),this.#t.push(new Int32Array(hn))}get root(){return ke(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Rn){let r=ii(n),a=Ya(o);if(this.#v=!1,this.#i=0,br(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#m=Za(a);let s=r.tuning;this.#C=s,this.#g=s.winsNextTurnThreat;let u=!jc(this.#S,this.root.squares);(a!==this.#k||s.winsNextTurnThreat!==this.#M||u)&&(this.#k=a,this.#M=s.winsNextTurnThreat,this.#S=this.root.squares,this.#c>=Fc&&(this.#c=0,this.#b.fill(0)),this.#c+=1),this.#f=0,this.#E=r.maxNodes,this.#u=!1,this.#I=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let c=0,l=0,m=0;for(let f=1;f<=r.maxDepth;f+=1){if(f===2){if(this.#f>=this.#E||!this.#o.prepare(this.#I)){this.#u=!0;break}this.#N()}let p=-Pn,b=Pn;s.aspirationDelta>0&&m>0&&f>=s.aspirationMinDepth&&(p=l-s.aspirationDelta,b=l+s.aspirationDelta);let y=this.#w(f,c,p,b),C=0;for(;!this.#l()&&y.move!==0&&(y.score<=p||y.score>=b)&&(p>-Pn||b<Pn);){C+=1;let I=s.aspirationDelta*(1<<C);y.score<=p&&(p=C>=2?-Pn:y.score-I),y.score>=b&&(b=C>=2?Pn:y.score+I),y=this.#w(f,y.move,p,b)}if(y.move===0)break;if(this.#l()){m===0&&(c=y.move,l=y.score);break}if(c=y.move,l=y.score,m=f,!y.selective&&l>=yn-rn)break}return{move:c,score:l,depth:m,nodes:this.#f,supported:!this.#v}}finally{this.#o.deactivate(),this.#m=vo,this.#C=Oo,this.#g=0,this.#I=di}}#N(){this.#o.generation+=1,this.#o.generation>li&&this.#o.clear()}#w(n,t,o,r){let a=ke(this.#e,0),s=ke(this.#n,0),u=Cr(a,s,ke(this.#t,0));if(u===0)return{move:0,score:0,selective:!1};this.#R(a,s,u,0,t);let c=ke(this.#t,0),l=o,m=0,f=-Pn,p=!1;for(let b=0;b<u;b+=1){this.#_(s,c,b,u);let y=d(s,b),C,I=this.#i,_;if(b===0?(C=this.#p(a,y,0,n-1,l,r),_=this.#i!==I):(C=this.#p(a,y,0,n-1,l,l+1),_=this.#i!==I,C>l&&!this.#l()&&(I=this.#i,C=this.#p(a,y,0,n-1,l,r),_=this.#i!==I)),this.#l()||(C>f&&(f=C,m=y,p=_,C>l&&(l=C)),l>=r))break}return m===0&&(m=d(s,0),f=0,p=!0),{move:m,score:f,selective:p}}#p(n,t,o,r,a,s){let u=ke(this.#e,o+1);u.copyFrom(n),this.#y[o]=t;let c=_a(u,t);return c===dr?(this.#v=!0,this.#u=!0,0):c!==-1?c===n.active?yn-o:-(yn-o):u.active===n.active?this.#O(r,o+1,a,s):-this.#O(r,o+1,-s,-a)}#O(n,t,o,r){if(!this.#T())return 0;let a=ke(this.#e,t);if(t>=rn-2)return this.#A(a);if(n<=0)return this.#A(a);let s=o,u=this.#P(a,t),c=mi(a),l=fi(a,c,u),m=pi(a,c,u),f=this.#o,p=(l^m*3)&f.mask,b=0,y=d(f.info,p),C=d(f.keyLo,p)===l&&d(f.keyHi,p)===m&&(y>>>8&li)===f.generation;if(C&&(b=d(f.move,p),(y>>2&63)>=n)){let we=d(f.score,p),Ke=y&3;if(Ke===si||Ke===ci&&we>=r||Ke===ui&&we<=s)return we}let I=this.#C,_=ke(this.#n,t),P=Cr(a,_,ke(this.#t,t));if(P===0)return this.#A(a,l,m);u!==0&&(P=this.#L(_,P,u,t)),this.#R(a,_,P,t,b);let F=ke(this.#t,t),D=P;if(I.moveCountPruning&&n<=I.moveCountDepth){let de=I.moveCountBase+I.moveCountFactor*n;de<D&&(D=de)}let L=n<=2;if(L&&!this.#T()||this.#l())return 0;let V=!1,U=!1,le=-Pn,Ge=0,Te=this.#i;for(let de=0;de<P;de+=1){this.#_(_,F,de,P);let we=d(_,de),Ke=d(F,de)>=Vc;if(!Ke&&Ge!==0){let v=de>=D;if(!v&&L&&(V||(U=this.#x(a,l,m)+I.futilityMargin*n<=o,V=!0),v=U),v){this.#i+=1;break}}let S;if(de===0)S=this.#p(a,we,t,n-1,s,r);else{let v=0;I.lateMoveReduction&&!Ke&&n>=3&&de>=I.lateMoveIndex&&(v=de>=I.lateMoveDeepIndex?2:1,v>=n&&(v=n-1)),S=this.#p(a,we,t,n-1-v,s,s+1),!this.#l()&&S>s&&(v>0||S<r)&&(S=this.#p(a,we,t,n-1,s,r))}if(this.#l())return 0;if(S>le&&(le=S,Ge=we),S>s&&(s=S),s>=r){this.#F(a,we,t,n,Ke);break}}if(Ge===0)return this.#A(a);let cn=this.#i!==Te?Bc:le>=r?ci:le<=o?ui:si,Pe=le,Fn=n;if(Pe<yn-rn&&Pe>-yn+rn){let de=y>>2&63;(!C||Fn>=de)&&(y===0&&d(f.info,p)===0&&(f.entries+=1),f.keyLo[p]=l,f.keyHi[p]=m,f.score[p]=Pe,f.info[p]=f.generation<<8|Fn<<2|cn,f.move[p]=Ge)}return le}#P(n,t){if(t===0)return 0;let o=d(this.#y,t-1);return st(o)===tn&&ke(this.#e,t-1).active===n.active?o:0}#L(n,t,o,r){let a=Qe(o),s=Ne(o),u=ke(this.#t,r),c=0;for(let l=0;l<t;l+=1){let m=d(n,l);if(st(m)===tn&&m<o){let f=Qe(m),p=Ne(m);if(f!==a&&f!==s&&p!==a&&p!==s)continue}n[c]=m,u[c]=d(u,l),c+=1}return c===0?t:c}#l(){return this.#u}#T(){return this.#u?!1:this.#f>=this.#E?(this.#u=!0,!1):(this.#f+=1,(this.#f&Dc)===0&&this.#I()?(this.#u=!0,!1):!0)}#x(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=mi(n);r=fi(n,l),a=pi(n,l)}let s=(r^a*3)&Lc,u;d(this.#b,s)===this.#c&&d(this.#s,s)===r&&d(this.#h,s)===a?u=this.#d[s]??0:(u=ti(n,this.#m,this.#g),this.#s[s]=r,this.#h[s]=a,this.#d[s]=u,this.#b[s]=this.#c);let c=n.active===0?u:-u;return c>Nn?Nn:c<-Nn?-Nn:c}#A(n,t,o){return this.#T()?this.#x(n,t,o):0}#F(n,t,o,r,a){if(a)return;let s=o*2;d(this.#r,s)!==t&&(this.#r[s+1]=d(this.#r,s),this.#r[s]=t);let u=n.active*121*121+Qe(t)*121+Ne(t),c=d(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#R(n,t,o,r,a){let s=ke(this.#t,r),u=d(this.#r,r*2),c=d(this.#r,r*2+1),l=n.active*121*121;for(let m=0;m<o;m+=1){let f=d(t,m),p=d(s,m);if(f===a)p+=Uc;else if(f===u)p+=Wc;else if(f===c)p+=Gc;else{let b=d(this.#a,l+Qe(f)*121+Ne(f));p+=b>8191?8191:b}s[m]=p}}#_(n,t,o,r){let a=o,s=d(t,o);for(let c=o+1;c<r;c+=1){let l=d(t,c);l>s&&(s=l,a=c)}if(a===o)return;let u=d(n,o);n[o]=d(n,a),n[a]=u,t[a]=d(t,o),t[o]=s}};function mi(e){let n=d(e.potions,0),t=d(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+gr*a,a=(e.firstTurn?1:0)+Mi*a,a=e.actionsUsed+ki*a,a=e.manaMoves+hi*a,a=e.monsMoves+yi*a,e.active+bi*a}i(mi,"scalarIndex");function fi(e,n,t=0){return e.hashLo^d(po,n)^e.whiteScore*2654435761^e.blackScore*2135587861^d(e.potions,0)^Math.imul(t,668265261)}i(fi,"stateKeyLo");function pi(e,n,t=0){return e.hashHi^d(er,n)^e.whiteScore*2246822507^e.blackScore*3266489909^d(e.potions,1)^Math.imul(t,374761393)}i(pi,"stateKeyHi");var $c=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),qc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),Hc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),zc=Object.freeze({fast:Object.freeze({budgetMs:50,limits:Object.freeze({maxDepth:40,maxNodes:38400,tuning:qc})}),normal:Object.freeze({budgetMs:150,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:$c})}),pro:Object.freeze({budgetMs:650,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:Hc})})});function Xc(){return globalThis.performance.now()}i(Xc,"systemClock");function Si(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}i(Si,"readClock");function Qc(){return globalThis.WeakRef}i(Qc,"weakRefConstructor");var Er=class{static{i(this,"FastSearcherPool")}#e;run(n){let t=Qc(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new Ro}catch(r){if(r instanceof RangeError)return It;throw r}this.#e=void 0;try{return n(o)}catch(r){if(At(r))return It;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},Yc=new Er;function vr(e,n,t=Xc){let o=zc[n],r=Si(t)+o.budgetMs,a=!1,s=i(()=>a?!0:(a=Si(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||s())return{kind:"fallback"};let u;try{u=new Ao}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!Fa(u,e,o.limits.maxDepth)||s())return{kind:"fallback"};let c=Yc.run(l=>{if(!s()&&(l.root.copyFrom(u),!s()))return l.search(o.limits,s,Rn)});return c===void 0||At(c)||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:Ba(c.move)}}i(vr,"selectPackedInputs");function Ii(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}i(Ii,"inputTag");function Zc(e,n){let t=Ii(e)-Ii(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"?$o[e.modifier]-$o[n.modifier]:0}i(Zc,"compareInputs");function Jc(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)}}i(Jc,"nextInputs");function Tr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}i(Tr,"applyInputs");function Ai(e){let n=e.fork(),t=[],o=i(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,Yo):n.inspectInputGrammar(t,Yo);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&Tr(n,t)!==void 0;if(t.length===Qn)return!1;let a=Jc(r)?.sort(Zc);if(a===void 0||a.length===0)return!1;for(let s of a){if(t.push(s),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}i(Ai,"deterministicLegalFallbackInputs");function Ci(e,n,t){let o=e.fen(),r=t===void 0?vr(e,n):vr(e,n,t),a=r.kind==="selected"?r.inputs:Ai(e),s=Tr(e,a);if(s===void 0&&r.kind==="selected"&&(a=Ai(e),s=Tr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return s===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:s,inputFen:et(a)}}i(Ci,"suggestMove");function Wt(e){return e===h.White?"w":"b"}i(Wt,"colorFen");function We(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===h.White?n.toUpperCase():n}${e.cooldown}`}i(We,"monFen");function eu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=h.White,o=M.Demon;break;case 101:t=h.Black,o=M.Demon;break;case 68:t=h.White,o=M.Drainer;break;case 100:t=h.Black,o=M.Drainer;break;case 65:t=h.White,o=M.Angel;break;case 97:t=h.Black,o=M.Angel;break;case 83:t=h.White,o=M.Spirit;break;case 115:t=h.Black,o=M.Spirit;break;case 89:t=h.White,o=M.Mystic;break;case 121:t=h.Black,o=M.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Vn(o,t,r-48)}i(eu,"parseMonFenAt");function Hn(e){return e.kind==="supermana"?"U":e.color===h.White?"M":"m"}i(Hn,"manaFen");function gi(e){switch(e){case 77:return Yn(h.White);case 109:return Yn(h.Black);case 85:return Mn;default:return}}i(gi,"parseManaCode");function Ei(e){switch(e){case A.Potion:return"P";case A.Bomb:return"B";case A.BombOrPotion:return"Q"}}i(Ei,"consumableFen");function vi(e){switch(e){case 80:return A.Potion;case 66:return A.Bomb;case 81:return A.BombOrPotion;default:return}}i(vi,"parseConsumableCode");function dt(e){switch(e.kind){case"mon":return`${We(e.mon)}x`;case"mana":return`xx${Hn(e.mana)}`;case"mon-with-mana":return`${We(e.mon)}${Hn(e.mana)}`;case"mon-with-consumable":return`${We(e.mon)}${Ei(e.consumable)}`;case"consumable":return`xx${Ei(e.consumable)}`}}i(dt,"itemFen");function Ti(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=gi(o);if(u!==void 0)return Ze(u);let c=vi(o);return c===void 0?void 0:bt(c)}let r=eu(e,n);if(r===void 0)return;let a=gi(o);if(a!==void 0)return Zn(r,a);let s=vi(o);return s!==void 0?pt(r,s):o===120?Fe(r):void 0}i(Ti,"parseItemFenAt");function nu(e){switch(e.kind){case"mon-move":return`mm ${dt(e.item)} ${B(e.from)} ${B(e.to)}`;case"mana-move":return`mma ${Hn(e.mana)} ${B(e.from)} ${B(e.to)}`;case"mana-scored":return`ms ${Hn(e.mana)} ${B(e.at)}`;case"mystic-action":return`ma ${We(e.mystic)} ${B(e.from)} ${B(e.to)}`;case"demon-action":return`da ${We(e.demon)} ${B(e.from)} ${B(e.to)}`;case"demon-additional-step":return`das ${We(e.demon)} ${B(e.from)} ${B(e.to)}`;case"spirit-target-move":return`stm ${dt(e.item)} ${B(e.from)} ${B(e.to)} ${B(e.by)}`;case"pickup-bomb":return`pb ${We(e.by)} ${B(e.at)}`;case"pickup-potion":return`pp ${dt(e.by)} ${B(e.at)}`;case"use-potion":return`up ${B(e.from)} ${B(e.to)}`;case"pickup-mana":return`pm ${Hn(e.mana)} ${We(e.by)} ${B(e.at)}`;case"mon-fainted":return`mf ${We(e.mon)} ${B(e.from)} ${B(e.to)}`;case"mana-dropped":return`md ${Hn(e.mana)} ${B(e.at)}`;case"supermana-back-to-base":return`sb ${B(e.from)} ${B(e.to)}`;case"bomb-attack":return`ba ${We(e.by)} ${B(e.from)} ${B(e.to)}`;case"mon-awake":return`maw ${We(e.mon)} ${B(e.at)}`;case"bomb-explosion":return`be ${B(e.at)}`;case"next-turn":return`nt ${Wt(e.color)}`;case"game-over":return`go ${Wt(e.winner)}`;case"takeback":return"z"}}i(nu,"eventFen");function wi(e){return e.map(nu).join(" ")}i(wi,"eventArrayFen");function Oi(e){return e===void 0?void 0:{i:e.i,j:e.j}}i(Oi,"detachedLocation");function wr(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}i(wr,"detachedLocations");function zn(e){let n=e;return n===h.White?0:n===h.Black?1:void 0}i(zn,"boardColorIndex");var mt=class{constructor(n=ln,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??la(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(s=>s===void 0?void 0:Dn(s)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{i(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Ln(t,n)}fork(){let n=new Ln(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(un(n))return this.storage.itemSlots[oe(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return Wn(n),Jo(n,this.variant)}allMonsBases(){return gt}supermanaBase(){return Ct}allMonsLocations(n){let t=zn(n);return t===void 0?[]:wr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=zn(n);return t===void 0?[]:wr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return da(n.kind,n.color)}faintedMonsLocations(n){let t=zn(n);return t===void 0?[]:wr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=zn(n);if(t!==void 0)return Oi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=zn(n);if(t!==void 0)return Oi(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(!qr(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=Qo[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=[],s=[],u,c;for(let m=0;m<121;m+=1){let f=this.storage.itemSlots[m];if(f!==void 0){let p=Qo[m];if(p!==void 0){let b=$(f);if(b!==void 0){let y=zn(b.color);if(y===void 0)continue;(y===0?n:t).push(p),f.kind==="mon"&&Ie(b)?(y===0?a:s).push(p):b.kind===M.Angel&&!Ie(b)&&(y===0&&u===void 0?u=p:y===1&&c===void 0&&(c=p))}else if(f.kind==="mana"&&f.mana.kind==="regular"){let y=zn(f.mana.color);y!==void 0&&(y===0?o:r).push(p)}}}}let l={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,s],awakeAngelLocations:[u,c]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}},Ln=class extends mt{static{i(this,"MutableBoard")}#e;delete(n){Wn(n),this.storage.itemSlots[oe(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){Wn(n),this.storage.itemSlots[oe(n)]=Dn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new mt(this.variant,void 0,this.storage),this.#e}};var xi=Ae+1,tu=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function ou(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 s=e.itemAtIndex(t);if(t+=1,s===void 0){a+=1;continue}a>0&&(n+=Ri(a),a=0),n+=dt(s)}a>0&&(n+=Ri(a))}return n}i(ou,"boardFen");function ru(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let s=0;s<11;s+=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 m=e.charCodeAt(a+1)-48,f=e.charCodeAt(a+2)-48;if(m<0||m>9||f<0||f>9)return;let p=m*10+f;if(p<1||u+p>11)return;u+=p,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=Ti(e,a);if(l===void 0)return;r[s*11+u]=l,u+=1,a+=3,c=!1}if(u!==11)return;if(s<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Ln(o,r,void 0,!0)}i(ru,"parseBoardFenRange");function _i(e){let n=`${e.whiteScore} ${e.blackScore} ${Wt(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${ou(e.board)}`,t=e.board.variant;return t===ln?n:`${n} ${sa(t)}`}i(_i,"gameFen");function Ni(e){let n=0,t=i(_=>{let P=n,F=0,D=!1;for(;n<e.length;){let L=e.charCodeAt(n);if(L===32)break;if(L<48||L>57)return-1;if(n===P)D=L===48;else if(D)return-1;if(F=F*10+(L-48),!Number.isSafeInteger(F))return-1;n+=1}if(n===P)return-1;if(_){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return F},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),s=a===119?h.White:a===98?h.Black:void 0;if(s===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let u=t(!0),c=t(!0),l=t(!0),m=t(!0),f=t(!0),p=t(!0);if(o<0||r<0||u<0||c<0||l<0||m<0||f<0||p<0||o>xi||r>xi||u>_e||c>An||l>ee||p<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,C=ln;if(n<e.length){n+=1;let _=t(!1),P=ua(_);if(P===void 0||P===ln)return;C=P}let I=ru(e,b,y,C);if(I!==void 0)return{board:I,whiteScore:o,blackScore:r,activeColor:s,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:m,blackPotionsCount:f,turnNumber:p}}i(Ni,"parseGameFen");function Ri(e){return tu[e]??""}i(Ri,"emptyRunFen");function Pi(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}}i(Pi,"copyRulesCounters");function _o(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}i(_o,"addCounter");function Or(e,n,t,o){if(e.actionsUsedCount<_e)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===h.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}i(Or,"consumeAction");function xr(e,n,t,o){switch(n.kind){case"mon-move":return{valid:_o(e,"monsMovesCount",1,o)};case"mana-move":return{valid:_o(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===h.White?"whiteScore":"blackScore";return{valid:_o(e,r,jr(n.mana,e.activeColor),o)}}case"mystic-action":return Or(e,n.from,n.to,o);case"demon-action":{let a=t.find(s=>s.kind==="demon-additional-step")?.to??n.to;return Or(e,a,a,o)}case"spirit-target-move":return Or(e,n.by,n.to,o);case"pickup-potion":{let r=$(n.by);if(r===void 0)return{valid:!0};let a=r.color===h.White?"whitePotionsCount":"blackPotionsCount";return{valid:_o(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}}}i(xr,"projectEventCounters");function Rr(e,n){let t=Pi(e);for(let r of n)if(!xr(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!No(o,n).turnAdvanced}i(Rr,"canApplyRulesEvents");function au(e,n,t,o){let r=xr(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,Ze(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let s=$(a);s===void 0?e.board.delete(n.at):e.board.set(n.at,Fe(s))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(s=>s.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,Fe(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Fe(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,pt(n.by,A.Bomb));break;case"pickup-potion":{if($(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,Zn(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Fe(Gr(n.mon)));break;case"mana-dropped":e.board.set(n.at,Ze(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?Zn(a.mon,Mn):Ze(Mn));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Fe(n.by));break;case"bomb-explosion":{let a=e.board.get(n.at),s=a===void 0?void 0:$(a);(s===void 0||!Ie(s)||!kt(e.board.base(s),n.at))&&e.board.delete(n.at);break}case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}i(au,"applyEvent");function iu(e,n){e.activeColor=Sn(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:$(o);if(r===void 0)continue;let a=Kr(r);Ie(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,Fe(a))}}i(iu,"advanceTurn");function No(e,n){let t=[];for(let a of n)au(e,a,n,t);let o=ho(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):va(e)&&(iu(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}i(No,"applyRulesEvents");var Gt=Symbol("cache-miss"),Bi=Symbol("cached-undefined"),Po=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function su(e){return e===void 0?void 0:[e[0].map(Un),e[1].map(Jn)]}i(su,"copyStageResult");function Li(e){return e===void 0?Bi:[e[0].map(Un),e[1].map(Jn)]}i(Li,"storeStageResult");function Fi(e){return e===Bi?void 0:su(e)}i(Fi,"copyStoredStageResult");function Lo(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}i(Lo,"setBounded");var Fo=class{static{i(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:Ho(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=Ho(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){Lo(this.#n??=new Map,n,t,Po.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(Jn)}setSecondInputOptions(n,t){Lo(this.#t??=new Map,n,t.map(Jn),Po.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Gt:Fi(t)}setSecondStage(n,t){Lo(this.#o??=new Map,n,Li(t),Po.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Gt:Fi(t)}setThirdStage(n,t){Lo(this.#r??=new Map,n,Li(t),Po.thirdStage)}};function Kt(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Un)}))}i(Kt,"copyTrackingEntries");var Bo=class e{static{i(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return Kt(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=Kt(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=Kt(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:Kt(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=Kt(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=i(()=>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(Un)})}};function Di(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let s=t.mon;if(s.color!==e.activeColor||Ie(s))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Be(n),O.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u),m;switch(c?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":m=!1;break;case"mana":m=s.kind===M.Drainer;break;case"consumable":case void 0:m=!0;break}if(!m)return!1;switch(l.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return s.kind===M.Drainer&&(c===void 0||c.kind==="mana"&&c.mana.kind==="supermana");case"mon-base":return l.monKind===s.kind&&l.color===s.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(s.kind){case M.Angel:case M.Drainer:break;case M.Mystic:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Zt(n),O.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||Zo(u,c))return!1;let m=$(l);return m!==void 0&&s.color!==m.color&&!Ie(m)}));break}case M.Demon:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Jt(n),O.DemonAction,o,c=>{let l=e.board.get(c),m=Yr(n,c),f=e.board.squareAt(m);if(l===void 0||Zo(u,c)||e.board.get(m)!==void 0||f.kind==="supermana-base"||f.kind==="mon-base")return!1;let p=$(l);return p!==void 0&&s.color!==p.color&&!Ie(p)}));break}case M.Spirit:a.push(...e.nextInputsFromLocations(eo(n),O.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:$r(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Be(n),O.ManaMove,o,s=>rr(e.board,s)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Be(n),O.MonMove,o,s=>{let u=e.board.get(s),c=e.board.squareAt(s);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 Kn(c)?!0:c.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let s=t.mon;if(s.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Be(n),O.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 Kn(l)}})),t.consumable===A.Bomb&&a.push(...e.nextInputsFromLocations(Yt(n),O.BombAttack,o,u=>{let c=e.board.get(u),l=c===void 0?void 0:$(c);return l!==void 0&&s.color!==l.color&&!Ie(l)}));break}case"consumable":break}return a}i(Di,"generateSecondInputOptions");function Vi(e,n,t,o,r){let a=[],s=[],u=e.board.squareAt(r),c=e.board.get(r);switch(n){case O.MonMove:{let l=$(t);if(l===void 0)return;if(s.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 m=In(t);m!==void 0&&s.push({kind:"mana-dropped",mana:m,at:o}),s.push({kind:"pickup-mana",mana:c.mana,by:l,at:r});break}case"consumable":switch(c.consumable){case A.Bomb:case A.Potion:return;case A.BombOrPotion:zo(t)!==void 0||In(t)!==void 0?s.push({kind:"pickup-potion",by:t,at:r}):(a.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),a.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t)));break}break}if(u.kind==="mana-pool"){let m=In(t);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:r})}break}case O.ManaMove:{if(t.kind!=="mana")return;let l=t.mana;if(s.push({kind:"mana-move",mana:l,from:o,to:r}),c!==void 0){if(c.kind!=="mon")return;s.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":s.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case O.MysticAction:{if(t.kind!=="mon")return;if(s.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),c!==void 0){let l=$(c);if(l===void 0)return;if(s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAction:{if(t.kind!=="mon")return;let l=t.mon;s.push({kind:"demon-action",demon:l,from:o,to:r});let m=!1,f=!1;if(c!==void 0){let p=$(c);if(p===void 0)return;if(s.push({kind:"mon-fainted",mon:p,from:r,to:e.board.base(p)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?(m=!0,s.push({kind:"mana-dropped",mana:c.mana,at:r})):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:f=!0,s.push({kind:"bomb-explosion",at:r}),s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)});break;case A.Potion:case A.BombOrPotion:return}}if(!f&&(u.kind==="supermana-base"||u.kind==="mon-base")&&(m=!0),m)for(let p of Be(r)){let b=e.board.get(p),y=e.board.squareAt(p);b!==void 0&&b.kind!=="consumable"||(Kn(y)?a.push(xe({kind:"location",location:p},O.DemonAdditionalStep)):y.kind==="mon-base"&&y.monKind===l.kind&&y.color===l.color&&a.push(xe({kind:"location",location:p},O.DemonAdditionalStep)))}break}case O.SpiritTargetCapture:{if(c===void 0)return;let l=$(c),m=In(c);a.push(...e.nextInputsFromLocations(Be(r),O.SpiritTargetMove,void 0,f=>{let p=e.board.get(f),b=e.board.squareAt(f);if(!ga(c,p))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let y=p?.kind==="mana"&&p.mana.kind==="supermana";return m?.kind==="supermana"||m===void 0&&l?.kind===M.Drainer&&(p===void 0||y)||l?.kind===M.Drainer&&y}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&m===void 0&&zo(c)===void 0}}));break}case O.BombAttack:{let l=$(t);if(l===void 0)return;if(s.push({kind:"bomb-attack",by:l,from:o,to:r}),c!==void 0){let m=$(c);if(m===void 0)return;if(s.push({kind:"mon-fainted",mon:m,from:r,to:e.board.base(m)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAdditionalStep:case O.SpiritTargetMove:case O.SelectConsumable:break}return[s,a]}i(Vi,"compileSecondInput");function Ui(e,n,t,o,r){let a=e.get(r),s=[],u=[];switch(n.kind){case O.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let c=n.input.location,l=e.get(c),m=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 A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,a)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.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 A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:a,at:c});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==A.BombOrPotion)return;u.push({kind:"pickup-potion",by:a,at:c});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,l)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:l,at:c});break}break}break}if(m.kind==="mana-pool"){let f=In(a);f!==void 0&&u.push({kind:"mana-scored",mana:f,at:c})}break}case O.DemonAdditionalStep:{if(n.input.kind!=="location")return;let c=$(t);if(c===void 0)return;let l=n.input.location;u.push({kind:"demon-additional-step",demon:c,from:r,to:l});let m=e.get(l);if(m?.kind==="consumable")switch(m.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t));break}break}case O.SelectConsumable:{if(n.input.kind!=="modifier")return;let c=$(t);if(c===void 0)return;switch(n.input.modifier){case X.SelectBomb:u.push({kind:"pickup-bomb",by:c,at:r});break;case X.SelectPotion:u.push({kind:"pickup-potion",by:t,at:r});break}break}case O.MonMove:case O.ManaMove:case O.MysticAction:case O.DemonAction:case O.SpiritTargetCapture:case O.BombAttack:return}return[u,s]}i(Ui,"compileThirdInput");function Wi(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(s=>yt(s.input,e))?.actorMonItem,a=r===void 0?void 0:$(r);if(!(r===void 0||a===void 0))switch(e.modifier){case X.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case X.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}i(Wi,"compileFourthInput");function Gi(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=i(s=>{let u=t([{kind:"location",location:s}]);if(u.kind!=="next-input-options"||u.nextInputs.length===0)return;let c=oe(s);r[c]||(r[c]=!0,o.push(s))},"addWhenValid");for(let s of e.board.allMonsLocations(e.activeColor))a(s);if(Ea(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let s of e.board.allFreeRegularManaLocations(e.activeColor))a(s);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}i(Gi,"suggestedInputToStartWith");function Ki(e,n,t,o,r,a){let s=n[0];if(s?.kind!=="location")return{kind:"invalid-input"};let u=s.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 m=a&&e.requiresCounterCapacityFiltering(),f=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let U=o&&!m?ta(f):f,le=e.applicableInputOptions(n,U,r,m,o);return le.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:le}}let p=l.location,b=f.find(U=>yt(U.input,l));if(b===void 0)return{kind:"invalid-input"};let y=n[2],C=e.processSecondInput(b.kind,c,u,p,t),I=C?.[0]??[],_=C?.[1]??[];if(y===void 0){if(_.length!==0){let U=e.applicableInputOptions(n,_,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let P=_.find(U=>yt(U.input,y));if(P===void 0)return{kind:"invalid-input"};let F=n[3],D=e.processThirdInput(P,c,u,p,t);I.push(...D?.[0]??[]);let L=D?.[1]??[];if(F===void 0){if(L.length!==0){let U=e.applicableInputOptions(n,L,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let V=Wi(F,P,L);return V===void 0?{kind:"invalid-input"}:(I.push(V),e.resolveEvents(I,t))}i(Ki,"dispatchStagedInput");var Ye=class e{static{i(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=ln,o){let r=o===void 0?new Ln(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:h.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Bo(n),this.#t=new Fo,this.#o={board:i(()=>this.board,"board"),requiresCounterCapacityFiltering:i(()=>this.#h(),"requiresCounterCapacityFiltering"),secondInputOptions:i((...a)=>this.#c(...a),"secondInputOptions"),processSecondInput:i((...a)=>this.#k(...a),"processSecondInput"),processThirdInput:i((...a)=>this.#M(...a),"processThirdInput"),applicableInputOptions:i((...a)=>this.#b(...a),"applicableInputOptions"),resolveEvents:i((...a)=>this.#S(...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=Ni(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[oe(r)]=a;let o=mt.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??na)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>Qn||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=Gi(this,r,m=>this.#s(m,!0,!0,r,a));return this.#t.setStartSuggestion(u,l),l}let s=n[0];if(n.length===1&&s?.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 Ki(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}#b(n,t,o,r,a){if(!r)return t;let s=i(c=>this.#d([...n,c.input],o),"applicable");if(!a)return t.filter(s);let u=t.find(s);return u===void 0?[]:[u]}#d(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${Hr(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),s=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Rr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(u=>this.#d([...n,{kind:"location",location:u}],t));case"next-input-options":return a.nextInputs.some(u=>this.#d([...n,u.input],t))}})();return this.#t.setCompletionViability(o,s),s}#c(n,t,o,r){let a=String(oe(n)),s=this.#t.getSecondInputOptions(a);if(s!==void 0)return s;let u=Di(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#k(n,t,o,r,a){let s=`${n}|${Xt(t)}|${oe(o)}|${oe(r)}`,u=this.#t.lookupSecondStage(s);if(u!==Gt)return u;let c=Vi(this,n,t,o,r);return a&&this.#t.setSecondStage(s,c),c}#M(n,t,o,r,a){let s=`${Xo(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":Xt(n.actorMonItem)}|${Xt(t)}|${oe(o)}|${oe(r)}`,u=this.#t.lookupThirdStage(s);if(u!==Gt)return u;let c=Ui(this.board,n,t,o,r);return a&&this.#t.setThirdStage(s,c),c}#S(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.#m(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#m(n,!1);return o===void 0?void 0:{game:t,events:o}}#m(n,t){if(!Rr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return No(this.#e,n).events;let o=i(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=No(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 oa(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Oe.MonMove,ee-this.monsMovesCount),n.set(Oe.Action,0),n.set(Oe.Potion,0),n.set(Oe.ManaMove,0),this.turnNumber===1||(n.set(Oe.Action,_e-this.actionsUsedCount),n.set(Oe.Potion,this.playerPotionsCount()),n.set(Oe.ManaMove,An-this.manaMovesCount)),n}winnerColor(){return ho(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(Sn(this.activeColor)).length>n.board.faintedMonsLocations(Sn(n.activeColor)).length}isFirstTurn(){return it(this)}playerPotionsCount(){return ko(this)}playerCanMoveMon(){return Ia(this)}playerCanMoveMana(){return Aa(this)}playerCanUseAction(){return Ca(this)}};function Do(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!un(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}i(Do,"toEnginePosition");function Y(e){return{row:e.i,column:e.j}}i(Y,"fromEnginePosition");function an(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}i(an,"fromEngineMon");function jt(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}i(jt,"fromEngineMana");function ft(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}}}i(ft,"fromEngineItem");function ji(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}}}i(ji,"fromEngineSquare");function _r(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Do(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(_r,"toEngineInput");function Nr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:Y(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Nr,"fromEngineInput");function cu(e){let n=Nr(e.input),t=e.actorMonItem===void 0?{}:{actor:ft(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}}}i(cu,"fromEngineInputOption");function Vo(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to)};case"mana-move":return{kind:e.kind,mana:jt(e.mana),from:Y(e.from),to:Y(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:jt(e.mana),at:Y(e.at)};case"mystic-action":return{kind:e.kind,mystic:an(e.mystic),from:Y(e.from),to:Y(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:an(e.demon),from:Y(e.from),to:Y(e.to)};case"spirit-target-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to),by:Y(e.by)};case"pickup-bomb":return{kind:e.kind,by:an(e.by),at:Y(e.at)};case"pickup-potion":return{kind:e.kind,by:ft(e.by),at:Y(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:Y(e.from),to:Y(e.to)};case"pickup-mana":return{kind:e.kind,mana:jt(e.mana),by:an(e.by),at:Y(e.at)};case"mon-fainted":return{kind:e.kind,mon:an(e.mon),from:Y(e.from),to:Y(e.to)};case"bomb-attack":return{kind:e.kind,by:an(e.by),from:Y(e.from),to:Y(e.to)};case"mon-awake":return{kind:e.kind,mon:an(e.mon),at:Y(e.at)};case"bomb-explosion":return{kind:e.kind,at:Y(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}}}i(Vo,"fromEngineEvent");function Pr(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(Y)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(cu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Vo)}}}i(Pr,"fromEngineOutput");function $i(e){return{monMoves:e.get(Oe.MonMove)??0,manaMoves:e.get(Oe.ManaMove)??0,actions:e.get(Oe.Action)??0,potions:e.get(Oe.Potion)??0}}i($i,"availableMoveCountsFromEngine");function uu(e){if(e!=="")return ht(e)}i(uu,"parseReplayMove");function Uo(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let s=e.activeColor===h.White,l=(s?n:t)[s?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=uu(l);if(m===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let f=e.processInput(m,!1,!1);if(f.kind!=="events"||f.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};s?r+=1:a+=1;let p={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,p)===!1)return{status:"stopped",...p}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}i(Uo,"replayInterleavedMoves");var Lr=class e{static{i(this,"Game")}#e;constructor(n={}){let{variant:t=E.Classic}=n;if(!du(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new Ye(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=Ye.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{[h.White]:this.#e.whiteScore,[h.Black]:this.#e.blackScore}}get potions(){return{[h.White]:this.#e.whitePotionsCount,[h.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(Vo),eventsFen:wi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(_r);return this.#t(t,et(t))}play(n){let t=n.map(_r);return this.#o(t,et(t))}playFen(n){let t=ht(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,et(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Pr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Pr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(Do(n));return t===void 0?void 0:ft(t)}squareAt(n){return ji(this.#e.board.squareAt(Do(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(qi(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(qi(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(!lu(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=Ye.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let s=n.lastIndexOf(a.fen());if(n.length>0&&s<0)return;let u=s<0?[]:n.slice(0,s+1);if(!u.some(c=>{let l=Ye.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 Ye(!0,this.#e.variant());return Uo(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 $i(this.#e.availableMoveKinds())}suggestMove(n){if(!mu(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Ci(this.#e,n);if(t.output.kind!=="events")return;let o=ht(t.inputFen);if(o!==void 0)return{inputs:o.map(Nr),inputFen:t.inputFen,events:t.output.events.map(Vo)}}};function lu(e){return e===h.White||e===h.Black}i(lu,"isColor");function du(e){return Object.values(E).includes(e)}i(du,"isGameVariant");function mu(e){return e==="fast"||e==="normal"||e==="pro"}i(mu,"isAutomovePreference");function qi(e,n){return`${e},${n}`}i(qi,"positionKey");function fu(e){let n=Hi(e.white.fen),t=Hi(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?h.Black:h.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 Ye(!1,n.variant()),s;return Uo(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let m=u.winnerColor();if(m===void 0)return!0;let f=m===h.White?c===e.white.moves.length:l===e.black.moves.length,p=m===h.White?o:r;return s=f&&p===u.fen()?{kind:"winner",winner:m}:{kind:"invalid"},!1}),s??{kind:"invalid"}}i(fu,"resolveMatch");function Hi(e){let n=Ye.fromFen(e,!1);return n?.fen()===e?n:void 0}i(Hi,"submittedGame");export{h as Color,A as Consumable,Lr as Game,E as GameVariant,X as Modifier,M as MonKind,fu as resolveMatch};
|
|
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="AAJAAOwB6P98ANT/PAAoAAwA7AAAAtj/wP8AAmz+AAL8/gACAAJ8AOj/EADgAQACAALkAKQBAAIAAqwAMAF4AAwAAAJU/gD+4AAAAgAC+P+gAbT/ZAAIAAACAAIA/gACAAJ4AQD+AAKg/tAABAAAAgD+AP4sAcz+FACgAAD+mP6M/1D/AAIA/jT+PAAAAgACPP+U/2wAoP9sAAD+AP4A/oQAfP7s/wABpP9o/sj/HAC4/gACAAIAAgD+AP4E/gT/9P/U//D/gP4M/wD+AP4A/gD+7P8UADQAAADU/wD+AP4A/gACAP68/wQABAAMAPj/aAD0/yAAAAAAAAQABAAAAPj/wP9U/rD+fP8AAoz/5P9MACgA+P+s/1z/EABUAYwAAALE/oT/NAAoABAAhAAI/zAANABEAKAA+AAQANT/hAAY/6T/WAAwAEQAkAAAAlwAFAEA/gACAP7I/5z/AP/U/wD+0P8E/xz+AP4AAgD+cP48/wAABAEkAJAAAAIAAgD+AAIA/gACLAGAAbT/MAAAAowBAAIA/gACAP4AApwBBP/g/2AAAAIAAgACAP4AAgD+AAIA/ij/AP4A/gD+AP4A/gD+AAIA/owBAP7I/6z+AP4A/igB3P+U/gACdP90AAACKP8A/mz+3P8IAAAAAAAAAAAAAAAAAPD/VP+4/8D/HAAEAAAABAAIAPj/AADg/7j/3P4EAKwAFAD0/xwABACw/wAACAD4//z/bAH8/9AAIAD4/wgA5P9oABAA/P+4AQAC+P4AAlgB1P+0/0z/zAFgAAgAAAIA/lD/AAIAAnwBJP6IALAAMAA4AIgAAP4A/gD+AAIA/hz/RACIARAABADk/xj/wP4AAgACAAIAAgACSAE0AOj//P+Y/wD+AP4A/gACAAIAArAA5P/o/7j//P4A/gD+AP4A/gD+AP4U/oT/4P8A/vz/bP5Q/pwBsP6E/8T/fAA8ABD/xAAMAAAAGAD4//z/CAAAAPz/vP9U/xAAGAAQACQBmP/c/1AA9P8AAPD/AADAAAACiAAAAvz/aP8A/+j+9ABgAbQAQAAAAgACtAEEAGT/KP4A/sj/AAIAAqT/AP4AAqAB1AD8/gD+TP8A/oz/pAEA/hz+AP4A/gD+CP8A/gD+AP4AAgACVP8A/jz/8P4AAgACAAIAAgD+AAIAAvj/XP/k/gD+AAIAAgACAALY/tj+WAH8//D/EACI/zD+AAIA/gD+AP4A/uD/8P/E/7T/2AAAAvj/AP4A/gD+RP7k/oD/5P90/wQAOACI/gD+AP4A/nj/AP4Q/nD/9P8AAPz/FAD0/zgAZAHY/wD+wP+0//z/1P8UAMQAoP98AcT/iP8c//j/4P+EAKD+AALA/pD/AAKE/9ABYADQ/xQAAP7E/wACAP9Q/2gBAP4AAgAC1P/AANT/9P6Q/gD+AP4AAgACAAIAAgACoABw/6j+KP5k/wD+AP4A/gD+AAIAAkwA1AEU/wACjAEAAkD/AP4o/wACYAAAAgACPAAAAgACAAIAAgD+AAKA//z/IACoAfQBAAIAAgD+AP4AAoj+AP7w/wgAvADc/mD/VAAA/gD+eP8AAiT+VP/s/xAA5P/s/ywAxP4AAgD+AP4c/wACZwCHAeD/YQDe/zgAHgAPALkAAAJ4/83/AAJR/qQBM//+AX0BPQC9//f/pwEAAaQBjQAlATIBiAGlAGQBdwAKABkBP/4u/i8AAAIAAp7/SgGx/0cA4P++AQACwP4AAgACjgEA/gACyv68APz/AAIA/gD+YQHT/hMAEgAA/nL+Qf81/18BAP8n/rz/AAIAAhn///8oAKH/vgC7/gD+Yf7FANX+gf9sANn/zP7Y/yIAHv8AAgACAAEA/gD+dv5L/wwAFQDt/2D/yf8A/gD+AP4A/kwAjwBkABoAvf8A/2P+AP4AAnb+uf8LAA4AGQA+AM4Ad/+Y/87/+/8GAAUA///0/5//P/6E/h3/PwGa/9D/VgA7AO//hf9F/4z/+gBDAH0Bk/51//3/AQD//0UA3P7x/0EAvf+lAGgAw/+//4MAZP99/z4ANABPAGYAAAIDAMQAe/4AAgD+r/9C/wH/8/8r/pL/d/8V/+7+lQGU/lT/Uf/0/0MANADsAAAC3gEA/wACLP4AAmEB2AAHAEMAAAITAQ8Blf4AAgP+7wG1Aev+GQB6AAACAAIAAgD/AAIA/gACAP/e/gD+AP4A/gD/AP8A/gABAP6pAQD/Vv+B/qL+AP8LAQoA6f4AAp7/cwAAAt7/AP/I/uD/DAAAAAAAAAAAAAAA///n/2n/wv+T/zoABgADAAcACQD4/wAA0v+x/xr/CADSABUA+f8pAAQAoP/3/wIA8f8GAGAB9f+jADMAEgAKAOP/BgAEAPL/xwH4Ac7+rAE1ASsAw/84/9EBUgANAAACAP46/wACAAJLAfP+5AAeABoAiwBnAAD+kP4h/kcBCf5D//v/pQEQAB0A1f/S/ij/AAIAAgACAAEAAnYBLgDt//D/Mv8A/hb+H/4AAgACAALWAAoA2f/h/73+AP4A/gD+AP62/gD+F/7P/+X/uf5yAFf+if61AbX+rf/O/84AkQAU/2cA3f8BABcA9f/7/wUAAAD3/4b/P//+/w4AMQAZAXr/w/8xAPr/BwDX/ykA5gAAAmAAAALI/w7/J/8c//sAhAFxADoAAAKTAccBo/8L/zv+I/5TAAACAAJK/wD+AAK4ACEAvf4A/vn/OP5b/3UBH/5B/gD+AP4A/jz/AP4A/sP+AAIAAnL/E/7t/mP/UQEAAgAC9wGE/gACAAL7/0//rP4A/gACAAKEAQABIv+i/4IB/v/5/z0AxP8k/wACAP4A/gD/of5oAO//yP8CACIBAAJ6AAD+AP6Y/jP+tP5y/+n/8P8gAD0Awf4A/hj+PP5a/wD+DP59//T//v8BAA4A8v81AGoBCgAO/pP/v//v/8L/OwCGAG7/LwFT/1z/4v7j/2j/8f+g/loB3f4s/zoBI/+kAUUA0//C/wv+f/8AAjz/S/9uASX+AAIAApX/EABXALf+vv4A/gD+AAIAAr4BAAJrAdoAjv8g/yP+N/8A/gD+AP4A/gACsQG5AN8Bz/8AArMAAAIy/1b+3v+FAVQAAAIAAkIA7gHHAQACAAIA/vgBIP/7/x8AvgG/AUABAAIA/lT+AAJm/gD+8v8KAPEAv/4IAIAAAP4A/xr/AAEb/mj/7/8RAOH//f8oAEX/AAIA/gD+1f8AAo4AIgHY/0YA6P80ABQAEgCGAAACGP/a/wACNv5IAWr//AH6AP7/kv/e/24BAABIATYApgBkABABngCYAXYACAAyACr+XP5+/wACAAJE//QArv8qALj/fAEAAoD/AAIAAqQBAP4AAvT+qAD0/wACAP4A/pYB2v4SAIT/AP5M/vb+Gv++AAAAGv48/wACAAL2/moA5P+i/xABdv8A/sL+BgEu/xb/2P8OADD/6P8oAIT/AAIAAgAAAP4A/uj+kv8kAFYA6v9AAIYAAP4A/gD+AP6sAAoBlAA0AKb/AADG/gD+AALs/rb/EgAYACYAhAA0Afr+EP+c//b/CAAGAP7/8P9+/yr+WP6+/n4AqP+8/2AATgDm/17/Lv8I/6AA+v/6AGL+Zv/G/9r/7v8GALD+sv9OADb/qgDY/3b/qv+CALD/Vv8kADgAWgA8AAACqv90APb+AAIA/pb/6P4C/xIAVv5U/+r/DgDc/yoBKP84AGb/6P+C/0QASAEAArwBAAAAAlj+AAKWATAAWgBWAAACmgAeACr/AAIG/t4BzgHS/lIAlAAAAgACAAIAAAACAP4AAgAAlP4A/gD+AP4AAAAAAP4AAAD+xgEAAOT+Vv5E/wAA7gA4AD7/AALI/3IAAAKUAAAAJP/k/xAAAAAAAAAAAAAAAP7/3v9+/8z/Zv9YAAgABgAKAAoA+P8AAMT/qv9Y/wwA+AAWAP7/NgAEAJD/7v/8/+r/EABUAe7/dgBGACwADADi/6T/+P/o/9YB8AGk/lgBEgGCANL/JP/WAUQAEgAAAgD+JP8AAgACGgHC/0ABjP8EAN4ARgAA/iD/Qv6OABL+av+y/8IBEAA2AMb/jP6Q/wACAAIAAgAAAAKkASgA8v/k/8z+AP4s/j7+AAIAAgAC/AAwAMr/CgB+/gD+AP4A/gD+bP8A/hr+GgDq/3L/6ABC/sL+zgG6/tb/2P8gAeYAGP8KAK7/AgAWAPL/+v8CAAAA8v9Q/yr/7P8EAFIADgFc/6r/EgAAAA4Avv9SAAwBAAI4AAAClP+0/k7/UP8CAagBLgA0AAACJgHaAUL/sv5O/kb+3gAAAgAC8P4A/gAC0P9u/37+AP6mAHD+Kv9GAT7+Zv4A/gD+AP5w/wD+AP6G/wACAAKQ/yb+nv7W/6IAAAIAAu4BCP8AAgAC/v9C/3T+AP4AAgACCAEAAGz/bACsAQAAAgBqAAAAGAAAAgD+AP4AAEL/8ADu/8z/UABsAQAC/AAA/gD+MP8i/oT+ZP/u/2wAPABCAPr+AP4w/nj+PP8A/gj+iv/0//z/BgAIAPD/MgBwATwAHP5m/8r/4v+w/2IASAA8/+IA4v4w/6j+zv/w/l7/oP60APr+yP50AML+eAEqANb/cP8W/jr/AAJ4/0b/dAFK/gACAAJW/2D/2gB6/uz+AP4A/gACAAJ8AQAC1gAUAaz/mP8e/gr/AP4A/gD+AP4AAmIBJgHqAYoAAALa/wACJP+s/pQACgFIAAACAAJIANwBjgEAAgACAP7wAcD++v8eANQBigGAAAACAP6o/gACRP4A/vT/DAAmAaL+sACsAAD+AAC8/gAAEv58//L/EgDe/w4AJADG/wACAP4A/o4AAAK1AL0A0P8rAPL/MAAKABUAUwAAArj+5/8AAhv+7ACh//oBdwC//2f/xf81AQD/7ADf/ycAlv+YAJcAzAF1AAYAS/8V/or+zf4AAgAC6v6eAKv/DQCQ/zoBAAJAAAACAAK6AQD+AAIe/5QA7P8AAgD+AP7LAeH+EQD2/gD+Jv6r/v/+HQAAAQ3+vP4AAgAC0/7VAKD/o/9iATEAAP4j/0cBh/+r/kT/QwCU//j/LgDq/wACAAIA/wD+AP5a/9n/PACXAOf/IAFDAQD+AP4A/gD+DAGFAcQATgCP/wABKf8A/gACYv+z/xkAIgAzAMoAmgF9/oj+av/x/woABwD9/+z/Xf8V/iz+X/69/7b/qP9qAGEA3f83/xf/hP5GALH/dwAx/lf/j/+z/93/x/+E/nP/WwCv/q8ASP8p/5X/gQD8/y//CgA8AGUAEgAAAlH/JABx/wACAP59/47+A/8xAIH+Fv9dAAcBygC/ALz/HAF7/9z/wf5UAKQBAAKaAQABAAKE/gACywGI/60AaQAAAiEALf+//wACCf7NAecBuf6LAK4AAAIAAgACAAEAAgD+AAIAAUr+AP4A/gD+AAEAAQD+AP8A/uMBAAFy/iv+5v8AAdEAZgCT/wAC8v9xAAACSgEAAYD/6P8UAAAAAAAAAAAAAAD9/9X/k//W/zn/dgAKAAkADQALAPj/AAC2/6P/lv8QAB4BFwADAEMABACA/+X/9v/j/xoASAHn/0kAWQBGAA4A4f9C/+z/3v/lAegBev4EAe8A2QDh/xD/2wE2ABcAAAIA/g7/AAIAAukAkQCcAfr+7v8xASUAAP6w/2P+1f8b/pH/af/fARAATwC3/0b++P8AAgACAAIA/wAC0gEiAPf/2P9m/gD+Qv5d/gACAAIAAiIBVgC7/zMAP/4A/gD+AP4A/iIAAP4d/mUA7/8rAF4BLf77/ucBv/7//+L/cgE7ARz/rf9//wMAFQDv//n///8AAO3/Gv8V/9r/+v9zAAMBPv+R//P/BgAVAKX/ewAyAQACEAAAAmD/Wv51/4T/CQHMAev/LgAAArkA7QHh/ln+Yf5p/mkBAAIAApb+AP4AAuj+u/4//gD+UwGo/vn+FwFd/ov+AP4A/gD+pP8A/gD+SQAAAgACrv85/k/+SQDz/wACAALlAYz/AAIAAgEANf88/gD+AAIAAowAAP+2/zYB1gECAAsAlwA8AAwBAAIA/gD+AAHj/3gB7f/Q/54AtgEAAn4BAP4A/sj/Ef5U/lb/8//oAFgARwAz/wD+SP60/h7/AP4E/pf/9P/6/wsAAgDu/y8AdgFuACr+Of/V/9X/nv+JAAoACv+VAHH+BP9u/rn/eP7L/qD+DgAX/2T+rv9h/kwBDwDZ/x7/If71/gACtP9B/3oBb/4AAgACF/+w/l0BPf4a/wD+AP4AAgACOgEAAkEATgHK/xAAGf7d/gD+AP4A/gD+AAITAZMB9QFFAQACAf8AAhb/Av9KAY8APAAAAgACTgDKAVUBAAIAAgD+6AFg/vn/HQDqAVUBwP8AAgD+/P4AAiL+AP72/w4AWwGF/lgB2AAA/gABXv4A/wn+kP/1/xMA2/8fACAARwAAAgD+AP5HAQAC3ABYAMj/EAD8/ywAAAAYACAAAAJY/vT/AAIA/pAA2P/4AfT/gP88/6z//AAA/pAAiP+o/8j+IACQAAACdAAEAGT+AP64/hz+AAIAApD+SACo//D/aP/4AAACAAEAAgAC0AEA/gACSP+AAOT/AAIA/gD+AALo/hAAaP4A/gD+YP7k/nz/AAIA/jz+AAIAArD+QAFc/6T/tAHsAAD+hP+IAeD/QP6w/ngA+P8IADQAUAAAAgACAP4A/gD+zP8gAFQA2ADk/wACAAIA/gD+AP4A/mwBAAL0AGgAeP8AAoz/AP4AAtj/sP8gACwAQAAQAQACAP4A/jj/7P8MAAgA/P/o/zz/AP4A/gD+/P7E/5T/dAB0ANT/EP8A/wD+7P9o//T/AP5I/1j/jP/M/4j/WP40/2gAKP60ALj+3P6A/4AASAAI//D/QABwAOj/AAL4/tT/7P8AAgD+ZP80/gT/UACs/tj+0AAAArgBVABQAAACkP/Q/wD+ZAAAAgACeAEAAgACsP4AAgAC4P4AAXwAAAKo/zz+VAAAAgz+vAEAAqD+xADIAAACAAIAAgACAAIA/gACAAIA/gD+AP4A/gACAAIA/gD+AP4AAgACAP4A/ogAAAK0AJQA6P8AAhwAcAAAAgACAALc/+z/GAAAAAAAAAAAAAAA/P/M/6j/4P8M/5QADAAMABAADAD4/wAAqP+c/9T/FABEARgACABQAAQAcP/c//D/3P8kADwB4P8cAGwAYAAQAOD/4P7g/9T/9AHgAVD+sADMADAB8P/8/uABKAAcAAACAP74/gACAAK4AGAB+AFo/tj/hAEEAAD+QACE/hz/JP64/yD//AEQAGgAqP8A/mAAAAIAAgACAP4AAgACHAD8/8z/AP4A/lj+fP4AAgACAAJIAXwArP9cAAD+AP4A/gD+AP7YAAD+IP6wAPT/5ADUARj+NP8AAsT+KADs/8QBkAEg/1D/UP8EABQA7P/4//z/AADo/+T+AP/I//D/lAD4ACD/eP/U/wwAHACM/6QAWAEAAuj/AAIs/wD+nP+4/xAB8AGo/ygAAAJMAAACgP4A/nT+jP70AQACAAI8/gD+AAIA/gj+AP4A/gAC4P7I/ugAfP6w/gD+AP4A/tj/AP4A/gwBAAIAAsz/TP4A/rwARP8AAgAC3AEQAAACAAIEACj/BP4A/gACAAIQAAD+AAAAAgACBAAUAMQAeAAAAgACAP4A/gAChAAAAuz/1P/sAAACAAIAAgD+AP5gAAD+JP5I//j/ZAF0AEwAbP8A/mD+8P4A/wD+AP6k//T/+P8QAPz/7P8sAHwBoAA4/gz/4P/I/4z/sADM/9j+SAAA/tj+NP6k/wD+OP6g/mj/NP8A/uj+AP4gAfT/3P/M/iz+sP4AAvD/PP+AAZT+AAIAAtj+AP7gAQD+SP8A/gD+AAIAAvgAAAKs/4gB6P+IABT+sP4A/gD+AP4A/gACxAAAAgACAAIAAij+AAII/1j/AAIUADAAAAIAAlQAuAEcAQACAAIA/uABAP74/xwAAAIgAQD/AAIA/lD/AAIA/gD++P8QAJABaP4AAgQBAP4AAgD+AP4A/qT/+P8UANj/MAAcAMgAAAIA/gD+AAI=",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};
|