@betorigami/game-calculations 0.0.0-sha-7b1bae5-20251130040122 → 0.0.0-sha-0f5e855-20251203034813

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/index.cjs CHANGED
@@ -1 +1 @@
1
- var Wr=Object.create;var{getPrototypeOf:ur,defineProperty:w,getOwnPropertyNames:fr,getOwnPropertyDescriptor:br}=Object,Or=Object.prototype.hasOwnProperty;var N=(r,o,i)=>{i=r!=null?Wr(ur(r)):{};let E=o||!r||!r.__esModule?w(i,"default",{value:r,enumerable:!0}):i;for(let A of fr(r))if(!Or.call(E,A))w(E,A,{get:()=>r[A],enumerable:!0});return E},er=new WeakMap,sr=(r)=>{var o=er.get(r),i;if(o)return o;if(o=w({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")fr(r).map((E)=>!Or.call(o,E)&&w(o,E,{get:()=>r[E],enumerable:!(i=br(r,E))||i.enumerable}));return er.set(r,o),o};var mr=(r,o)=>{for(var i in o)w(r,i,{get:o[i],enumerable:!0,configurable:!0,set:(E)=>o[i]=()=>E})};var Uo={};mr(Uo,{validateRouletteGameInputs:()=>Mo,validateAdvancedDiceInputs:()=>Ao,plinkoMultipliers:()=>m,diamondsMultipliers:()=>Dr,calculateRouletteBetAmount:()=>lo,calculateBaccaratBetAmount:()=>Kr,WheelSegments:()=>M,WheelRiskLevel:()=>l,Wheel:()=>Jr,VALID_SUITS:()=>Gr,VALID_RANKS:()=>Lr,VALID_EUROPEAN_STREETS:()=>ir,VALID_EUROPEAN_STRAIGHTS:()=>j,VALID_EUROPEAN_SPLITS:()=>rr,VALID_EUROPEAN_DOUBLE_STREETS:()=>nr,VALID_EUROPEAN_CORNERS:()=>Ar,VALID_AMERICAN_STREETS:()=>Er,VALID_AMERICAN_STRAIGHTS:()=>g,VALID_AMERICAN_SPLITS:()=>or,VALID_AMERICAN_DOUBLE_STREETS:()=>tr,VALID_AMERICAN_CORNERS:()=>cr,RouletteType:()=>z,Roulette:()=>jr,RollType:()=>Sr,RANDOM_MIN_VALUE:()=>Y,RANDOM_MAX_VALUE:()=>k,PlinkoRiskLevel:()=>s,Plinko:()=>Pr,Parity:()=>K,PLINKO_ROW_COUNTS:()=>So,OrigamiGame:()=>S,Mines:()=>vr,MIN_WIN_CHANCE:()=>dr,MAX_WIN_CHANCE:()=>Br,Limbo:()=>hr,KenoRiskLevel:()=>Mr,Keno:()=>wr,Half:()=>Z,GameErrorCode:()=>Rr,GameError:()=>e,Game:()=>R,EFFECTIVE_RANGE:()=>W,Dozen:()=>D,DiceDirection:()=>ar,Dice:()=>lr,DiamondsResultType:()=>_r,Diamonds:()=>Nr,Column:()=>_,Color:()=>p,BaccaratOutcome:()=>yr,BaccaratBetType:()=>Cr,Baccarat:()=>pr,AdvancedDice:()=>xr,AMERICAN_BASKET:()=>q});module.exports=sr(Uo);var S;((f)=>{f.DICE="DICE";f.MINES="MINES";f.KENO="KENO";f.LIMBO="LIMBO";f.ADVANCED_DICE="ADVANCED_DICE";f.BACCARAT="BACCARAT";f.DIAMONDS="DIAMONDS";f.PLINKO="PLINKO";f.ROULETTE="ROULETTE";f.WHEEL="WHEEL"})(S||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var F=require("big.js");var Rr;((o)=>o.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Rr||={});class e extends Error{static createValidationError(r){return new e("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof e}errorCode;constructor(r,o){super(o);this.errorCode=r}}var Y=0,k=1e4,W=10001,dr=0.01,Br=98,gr=(r)=>{if(r<Y)throw e.createValidationError(`Lower bound ${r} is below minimum allowed value ${Y}`)},ro=(r)=>{if(r>k)throw e.createValidationError(`Upper bound ${r} is above maximum allowed value ${k}`)},P=(r)=>{if(gr(r.lower),ro(r.upper),r.lower>=r.upper)throw e.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},oo=(r,o)=>{let[i,E]=r.lower<=o.lower?[r,o]:[o,r];if(i.upper>E.lower)throw e.createValidationError("Bounds must not overlap")},io=(r,o)=>o>=r.lower&&o<=r.upper,Eo=(r)=>r.upper-r.lower+1,Q=(r,o)=>o>r.lower&&o<r.upper,X=(r)=>r.upper-r.lower-1,Sr;((E)=>{E.ROLL_BETWEEN="ROLL_BETWEEN";E.ROLL_OUTSIDE="ROLL_OUTSIDE";E.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Sr||={});var Tr=(r)=>{let i=(()=>{switch(r.mode){case"ROLL_BETWEEN":return P(r.bounds),X(r.bounds);case"ROLL_OUTSIDE":return P(r.bounds),W-Eo(r.bounds);case"ROLL_BETWEEN_TWO":return P(r.firstBounds),P(r.secondBounds),oo(r.firstBounds,r.secondBounds),X(r.firstBounds)+X(r.secondBounds)}})(),E=F.Big(i).div(W).mul(100);if(E.lt(dr))throw e.createValidationError("Win chance too low");if(E.gt(Br))throw e.createValidationError("Win chance too high");return E},Ao=(r)=>{Tr(r)};class xr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=Tr(i),A=r.getRandomInt({min:Y,max:k}),c=A.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(i.mode){case"ROLL_BETWEEN":return Q(i.bounds,c);case"ROLL_OUTSIDE":return!io(i.bounds,c);case"ROLL_BETWEEN_TWO":return Q(i.firstBounds,c)||Q(i.secondBounds,c)}})()?new F.Big(100-o).div(E):new F.Big(0),outputs:{result:A.values},randomValues:A}}}var a=N(require("big.js"));var Gr=["Clubs","Diamonds","Hearts","Spades"],Lr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],yr;((E)=>{E.PLAYER_WIN="PLAYER_WIN";E.TIE="TIE";E.BANKER_WIN="BANKER_WIN"})(yr||={});var Cr;((E)=>{E.PLAYER="PLAYER";E.TIE="TIE";E.BANKER="BANKER"})(Cr||={});var co={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Kr=(r)=>{return new a.default(0).add(r.bets.reduce((i,E)=>i.add(E.amount),new a.default(0)))};class pr extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(i!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(o);let E=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),A=E.values,c=A.slice(0,3),t=A.slice(3,6),O=[],d=0;for(let x of c.slice(0,2)){let L=this.mapRandomValueToCard(x),U=this.mapRandomValueToCardValue(x);O.push(L),d=(d+U)%10}let B=[],f=0;for(let x of t.slice(0,2)){let L=this.mapRandomValueToCard(x),U=this.mapRandomValueToCardValue(x);B.push(L),f=(f+U)%10}if(!this.isNaturalWin(d,f)){let x=this.shouldDrawThirdPlayerCard(d),L=null;if(x)L=this.mapRandomValueToCardValue(c[2]),O.push(this.mapRandomValueToCard(c[2])),d=(d+L)%10;if(this.shouldDrawThirdBankerCard(f,L))B.push(this.mapRandomValueToCard(t[2])),f=(f+this.mapRandomValueToCardValue(t[2]))%10}let T;if(d===f)T="TIE";else T=d>f?"PLAYER_WIN":"BANKER_WIN";let G=Kr(o),{betType:v,multiplier:Qr}=co[T],Xr=new a.default(0).add(o.bets.filter((x)=>x.type===v).reduce((x,L)=>x.add(L.amount.mul(Qr)),new a.default(0)));return{isFinished:!0,payoutMultiplier:G.gt(0)?Xr.div(G):new a.default(0),outputs:{playerCards:O,playerHandValue:d,bankerCards:B,bankerHandValue:f,gameOutcome:T,result:E.values},randomValues:E}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((o)=>o.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let o=Gr[Math.floor(r/13)],i=Lr[r%13];return{suit:o,rank:i}}isNaturalWin(r,o){let i=[8,9];return i.includes(r)||i.includes(o)}mapRandomValueToCardValue(r){let o=r%13;if(o===0)return 1;if(o>=10)return 10;return o+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,o){if(o===null)return r<=5;if(r<=2)return!0;if(r===3)return o!==8;if(r===4)return[2,3,4,5,6,7].includes(o);if(r===5)return[4,5,6,7].includes(o);if(r===6)return[6,7].includes(o);return!1}}var Zr=N(require("big.js"));class y{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let o=this.multipliers.get(r);if(o===void 0)throw new Error(`Multipliers for ${r} not found`);return o}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,o])=>({edge:r,multipliers:o}))}}var _r;((t)=>{t.PAIR="PAIR";t.TWO_PAIR="TWO_PAIR";t.THREE_OF_A_KIND="THREE_OF_A_KIND";t.FULL_HOUSE="FULL_HOUSE";t.FOUR_OF_A_KIND="FOUR_OF_A_KIND";t.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(_r||={});var no={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},to={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},eo={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},fo={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Oo={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Dr=new y(new Map([[1,no],[2,to],[3,eo],[4,fo],[8,Oo]])),Ro={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Nr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:o}){let i=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),E=Dr.getMultipliers(o),A=i.values,c=this.calculatePayoutMultiplier(E,A);return{isFinished:!0,payoutMultiplier:Zr.default(c),outputs:{result:i.values},randomValues:i}}calculatePayoutMultiplier(r,o){let i=new Map;for(let c of o){let t=i.get(c)||0;i.set(c,t+1)}let E=[...i.values()].filter((c)=>c>1),A=this.classifyResult(E);return A===null?0:r[A]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[o,i]=r;if(o===void 0)return null;if(i===void 0){let E=Ro[o];if(E===void 0)throw new Error(`Unexpected single diamond repeat count: ${o}`);return E}return o===3||i===3?"FULL_HOUSE":"TWO_PAIR"}}var $=N(require("big.js"));var ar;((i)=>{i.ABOVE="ABOVE";i.BELOW="BELOW"})(ar||={});class lr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=r.getRandomInt({min:0,max:1e4}),A=E.min,O=E.max-A+1-1,d=i.direction==="ABOVE"?O-i.selectedValue:i.selectedValue,B=new $.default(d).div(O).mul(100);return{isFinished:!0,payoutMultiplier:(i.direction==="ABOVE"?E.value>i.selectedValue:E.value<i.selectedValue)?new $.default(100-o).div(B):new $.default(0),outputs:{result:E.values},randomValues:E}}}var u=N(require("big.js"));var Mr;((A)=>{A.CLASSIC="CLASSIC";A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(Mr||={});var Bo={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class wr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Bo}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:o,gameInputs:i}){if(o!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(i.selectedNumbers.length===0)throw new Error("No numbers selected");if(i.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let t of i.selectedNumbers){if(t%1!==0)throw new Error("Only integers can be selected");if(t<0||t>39)throw new Error("Invalid number selected")}let E=r.getUniqueRandomInts({min:0,max:39,count:10}),A=i.selectedNumbers.filter((t)=>E.values.includes(t));return{isFinished:!0,payoutMultiplier:A.length>0?new u.default(this.multipliers[i.selectedNumbers.length][i.riskLevel][A.length]??0):new u.default(0),outputs:{result:E.values},randomValues:E}}validateMultiplierOverrides(r){for(let[o,i]of Object.entries(r)){let E=Number(o);for(let[A,c]of Object.entries(i))if(c.length!==E+1)throw new Error(`Invalid count of multipliers for tiles ${E} and risk level ${A}. Expected ${E+1}, but got ${c.length}`)}}}var C=N(require("big.js"));var Vr=(r,o)=>{return r.gt(o)?r:o};var Hr=(r,o)=>{return r.lt(o)?r:o};class hr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=r.getRandomInt({min:1,max:4294967295}),A=E.max,c=new C.default(16777216),t=new C.default(1),O=new C.default(1e6),d=E.value,B=new C.default(d-1).div(A),f=(100-o)/100,T=c.div(B.mul(c).plus(1)).mul(f),G=Vr(t,Hr(T,O));return{isFinished:!0,payoutMultiplier:G.gte(i.targetMultiplier)?new C.default(i.targetMultiplier):new C.default(0),outputs:{randomMultiplier:G,result:E.values},randomValues:E}}}var V=N(require("big.js"));var b=(r,o)=>{if(o<0||r<0||o>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(o>r-o)o=r-o;let i=1;for(let E=1;E<=o;E++)i=i*(r-E+1)/E;return i};class vr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:o,gameInputs:i}){if(i.minesCount<=0||i.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(i.selectedTiles.length>25-i.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let t=r.getUniqueRandomInts({min:1,max:25,count:i.minesCount}),O=t.values.some((v)=>i.selectedTiles.includes(v)),d=i.hasCashedOut||O,B=(100-o)/100,f=new V.default(b(25-i.minesCount,i.selectedTiles.length)).div(new V.default(b(25,i.selectedTiles.length))),G=i.hasCashedOut&&!O?new V.default(B).div(f):new V.default(0);return{isFinished:d,payoutMultiplier:G,outputs:{result:t.values},randomValues:t}}}var Ur=require("big.js");var s;((E)=>{E.LOW_RISK="LOW_RISK";E.MEDIUM_RISK="MEDIUM_RISK";E.HIGH_RISK="HIGH_RISK"})(s||={});var So=[8,9,10,11,12,13,14,15,16],To={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},xo={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Go={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Lo={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},yo={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},m=new y(new Map([[1,To],[2,xo],[3,Go],[4,Lo],[8,yo]]));class Pr extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(o.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(o.numberOfRows<8||o.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let E=o.numberOfRows,t=m.getMultipliers(i)[o.riskLevel][E],O=r.getRandomIntsWithReplacement({min:0,max:1,count:o.numberOfRows}),B=O.values.reduce((T,G)=>T+G,0),f=t[B];if(f===void 0)throw new Error(`No payout found for end position ${B}`);return{isFinished:!0,payoutMultiplier:Ur.Big(f),outputs:{result:O.values},randomValues:O}}}var n=require("big.js");var j=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],g=[37,...j],rr=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1],[0,3],[0,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],ir=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Er=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Ar=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],cr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],q=[0,1,2,3,37],nr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],tr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],K;((i)=>{i.EVEN="EVEN";i.ODD="ODD"})(K||={});var p;((i)=>{i.RED="RED";i.BLACK="BLACK"})(p||={});var Z;((i)=>{i.LOW="LOW";i.HIGH="HIGH"})(Z||={});var _;((E)=>{E.TOP="TOP";E.MIDDLE="MIDDLE";E.BOTTOM="BOTTOM"})(_||={});var D;((E)=>{E.FIRST="FIRST";E.SECOND="SECOND";E.THIRD="THIRD"})(D||={});var z;((i)=>{i.AMERICAN="AMERICAN";i.EUROPEAN="EUROPEAN"})(z||={});var I=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw e.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((o)=>o.amount.gte(0)&&H(o.value)))throw e.createValidationError("Invalid straight bet.");if(!r.splitBets.every((o)=>o.amount.gte(0)&&Co(o.values)))throw e.createValidationError("Invalid split bet.");if(!r.streetBets.every((o)=>o.amount.gte(0)&&Ko(o.values)))throw e.createValidationError("Invalid street bet.");if(!r.cornerBets.every((o)=>o.amount.gte(0)&&po(o.values)))throw e.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((o)=>o.amount.gte(0)&&Zo(o.values)))throw e.createValidationError("Invalid double street bet.");if(!r.parityBets.every((o)=>o.amount.gte(0)&&Object.values(K).includes(o.parity)))throw e.createValidationError("Invalid parity bet.");if(!r.colorBets.every((o)=>o.amount.gte(0)&&Object.values(p).includes(o.color)))throw e.createValidationError("Invalid color bet.");if(!r.halfBets.every((o)=>o.amount.gte(0)&&Object.values(Z).includes(o.half)))throw e.createValidationError("Invalid half bet.");if(!r.columnBets.every((o)=>o.amount.gte(0)&&Object.values(_).includes(o.column)))throw e.createValidationError("Invalid column bet.");if(!r.dozenBets.every((o)=>o.amount.gte(0)&&Object.values(D).includes(o.dozen)))throw e.createValidationError("Invalid dozen bet.")},H=(r)=>{return j.includes(r)},Co=(r)=>{if(r.length!==2)return!1;if(!r.every(H))return!1;return rr.some(([o,i])=>o===r[0]&&i===r[1])},Ko=(r)=>{if(r.length!==3)return!1;if(!r.every(H))return!1;return ir.some(([o,i,E])=>o===r[0]&&i===r[1]&&E===r[2])},po=(r)=>{if(r.length!==4)return!1;if(!r.every(H))return!1;return Ar.some(([o,i,E,A])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3])},Zo=(r)=>{if(r.length!==6)return!1;if(!r.every(H))return!1;return nr.some(([o,i,E,A,c,t])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3]&&c===r[4]&&t===r[5])};var J=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw e.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((o)=>o.amount.gte(0)&&h(o.value)))throw e.createValidationError("Invalid straight bet.");if(!r.splitBets.every((o)=>o.amount.gte(0)&&_o(o.values)))throw e.createValidationError("Invalid split bet.");if(!r.streetBets.every((o)=>o.amount.gte(0)&&Do(o.values)))throw e.createValidationError("Invalid street bet.");if(!r.cornerBets.every((o)=>o.amount.gte(0)&&No(o.values)))throw e.createValidationError("Invalid corner bet.");if(!r.basketBets.every((o)=>o.amount.gte(0)))throw e.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((o)=>o.amount.gte(0)&&ao(o.values)))throw e.createValidationError("Invalid double street bet.");if(!r.parityBets.every((o)=>o.amount.gte(0)&&Object.values(K).includes(o.parity)))throw e.createValidationError("Invalid parity bet.");if(!r.colorBets.every((o)=>o.amount.gte(0)&&Object.values(p).includes(o.color)))throw e.createValidationError("Invalid color bet.");if(!r.halfBets.every((o)=>o.amount.gte(0)&&Object.values(Z).includes(o.half)))throw e.createValidationError("Invalid half bet.");if(!r.columnBets.every((o)=>o.amount.gte(0)&&Object.values(_).includes(o.column)))throw e.createValidationError("Invalid column bet.");if(!r.dozenBets.every((o)=>o.amount.gte(0)&&Object.values(D).includes(o.dozen)))throw e.createValidationError("Invalid dozen bet.")},h=(r)=>{return g.includes(r)};function _o(r){if(r.length!==2)return!1;if(!r.every(h))return!1;return or.some(([o,i])=>o===r[0]&&i===r[1])}var Do=(r)=>{if(r.length!==3)return!1;if(!r.every(h))return!1;return Er.some(([o,i,E])=>o===r[0]&&i===r[1]&&E===r[2])},No=(r)=>{if(r.length!==4)return!1;if(!r.every(h))return!1;return cr.some(([o,i,E,A])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3])},ao=(r)=>{if(r.length!==6)return!1;if(!r.every(h))return!1;return tr.some(([o,i,E,A,c,t])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3]&&c===r[4]&&t===r[5])};var Fr=(r)=>{return new n.Big(0).add(r.straightBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.splitBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.streetBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.cornerBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.doubleStreetBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.parityBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.colorBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.halfBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.columnBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.dozenBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0)))},Yr=(r)=>{return new n.Big(0).add(r.straightBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.splitBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.streetBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.cornerBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.basketBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.doubleStreetBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.parityBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.colorBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.halfBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.columnBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0))).add(r.dozenBets.reduce((o,i)=>o.plus(i.amount),new n.Big(0)))},lo=(r)=>{return r.type==="EUROPEAN"?Fr(r.inputs):Yr(r.inputs)};class kr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:o}){I(o);let i=r.getRandomInt({min:0,max:36}),E=i.value,A=this.determineBetOutcomes(o,E),c=Fr(o),t=this.calculateTotalPayoutAmount(A),O=c.gt(0)?t.div(c):new n.Big(0);return{outputs:{betOutcomes:A,result:i.values},payoutMultiplier:O,isFinished:!0,randomValues:i}}determineBetOutcomes(r,o){return{winningBets:{straightBets:r.straightBets.filter((i)=>i.value===o),splitBets:r.splitBets.filter((i)=>i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>i.values.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>this.isWinningDozenBet(i,o))},losingBets:{straightBets:r.straightBets.filter((i)=>i.value!==o),splitBets:r.splitBets.filter((i)=>!i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>!i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>!i.values.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>!i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>!this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>!this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>!this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>!this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>!this.isWinningDozenBet(i,o))}}}isWinningParityBet(r,o){if(o===0)return!1;let i=o%2===0?"EVEN":"ODD";return r.parity===i}isWinningColorBet(r,o){let i=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],E=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(i.includes(o)&&r.color==="RED")return!0;if(E.includes(o)&&r.color==="BLACK")return!0;return!1}isWinningHalfBet(r,o){if(o>0&&o<=18&&r.half==="LOW")return!0;if(o>18&&o<=36&&r.half==="HIGH")return!0;return!1}isWinningColumnBet(r,o){let i=[3,6,9,12,15,18,21,24,27,30,33,36],E=[2,5,8,11,14,17,20,23,26,29,32,35],A=[1,4,7,10,13,16,19,22,25,28,31,34];if(i.includes(o)&&r.column==="TOP")return!0;if(E.includes(o)&&r.column==="MIDDLE")return!0;if(A.includes(o)&&r.column==="BOTTOM")return!0;return!1}isWinningDozenBet(r,o){if(o>0&&o<=12&&r.dozen==="FIRST")return!0;if(o>12&&o<=24&&r.dozen==="SECOND")return!0;if(o>24&&o<=36&&r.dozen==="THIRD")return!0;return!1}calculateTotalPayoutAmount(r){return new n.Big(0).add(r.winningBets.straightBets.reduce((o,i)=>o.plus(i.amount.mul(36)),new n.Big(0))).add(r.winningBets.splitBets.reduce((o,i)=>o.plus(i.amount.mul(18)),new n.Big(0))).add(r.winningBets.streetBets.reduce((o,i)=>o.plus(i.amount.mul(12)),new n.Big(0))).add(r.winningBets.cornerBets.reduce((o,i)=>o.plus(i.amount.mul(9)),new n.Big(0))).add(r.winningBets.doubleStreetBets.reduce((o,i)=>o.plus(i.amount.mul(6)),new n.Big(0))).add(r.winningBets.parityBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.colorBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.halfBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.columnBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n.Big(0))).add(r.winningBets.dozenBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n.Big(0)))}}class $r extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:o}){J(o);let i=r.getRandomInt({min:0,max:37}),E=i.value,A=this.determineBetOutcomes(o,E),c=Yr(o),t=this.calculateTotalPayoutAmount(A),O=c.gt(0)?t.div(c):new n.Big(0);return{outputs:{betOutcomes:A,result:i.values},payoutMultiplier:O,isFinished:!0,randomValues:i}}determineBetOutcomes(r,o){return{winningBets:{straightBets:r.straightBets.filter((i)=>i.value===o),splitBets:r.splitBets.filter((i)=>i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>i.values.some((E)=>E===o)),basketBets:r.basketBets.filter((i)=>q.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>this.isWinningDozenBet(i,o))},losingBets:{straightBets:r.straightBets.filter((i)=>i.value!==o),splitBets:r.splitBets.filter((i)=>!i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>!i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>!i.values.some((E)=>E===o)),basketBets:r.basketBets.filter((i)=>!q.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>!i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>!this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>!this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>!this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>!this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>!this.isWinningDozenBet(i,o))}}}isWinningParityBet(r,o){if(o===0||o===37)return!1;let i=o%2===0?"EVEN":"ODD";return r.parity===i}isWinningColorBet(r,o){let i=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],E=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(i.includes(o)&&r.color==="RED")return!0;if(E.includes(o)&&r.color==="BLACK")return!0;return!1}isWinningHalfBet(r,o){if(o>0&&o<=18&&r.half==="LOW")return!0;if(o>18&&o<=36&&r.half==="HIGH")return!0;return!1}isWinningColumnBet(r,o){let i=[3,6,9,12,15,18,21,24,27,30,33,36],E=[2,5,8,11,14,17,20,23,26,29,32,35],A=[1,4,7,10,13,16,19,22,25,28,31,34];if(i.includes(o)&&r.column==="TOP")return!0;if(E.includes(o)&&r.column==="MIDDLE")return!0;if(A.includes(o)&&r.column==="BOTTOM")return!0;return!1}isWinningDozenBet(r,o){if(o>0&&o<=12&&r.dozen==="FIRST")return!0;if(o>12&&o<=24&&r.dozen==="SECOND")return!0;if(o>24&&o<=36&&r.dozen==="THIRD")return!0;return!1}calculateTotalPayoutAmount(r){return new n.Big(0).add(r.winningBets.straightBets.reduce((o,i)=>o.plus(i.amount.mul(36)),new n.Big(0))).add(r.winningBets.splitBets.reduce((o,i)=>o.plus(i.amount.mul(18)),new n.Big(0))).add(r.winningBets.streetBets.reduce((o,i)=>o.plus(i.amount.mul(12)),new n.Big(0))).add(r.winningBets.cornerBets.reduce((o,i)=>o.plus(i.amount.mul(9)),new n.Big(0))).add(r.winningBets.basketBets.reduce((o,i)=>o.plus(i.amount.mul(7)),new n.Big(0))).add(r.winningBets.doubleStreetBets.reduce((o,i)=>o.plus(i.amount.mul(6)),new n.Big(0))).add(r.winningBets.parityBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.colorBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.halfBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n.Big(0))).add(r.winningBets.columnBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n.Big(0))).add(r.winningBets.dozenBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n.Big(0)))}}class jr extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new kr,this.americanGame=new $r}determineGameResult(r){let{gameInputs:o,...i}=r;if(r.edge===2.7&&o.type==="EUROPEAN"){let E=this.europeanGame.determineGameResult({...i,gameInputs:o.inputs}),{betOutcomes:A}=E.outputs;return{...E,outputs:{type:"european",betOutcomes:A,result:E.outputs.result}}}if(r.edge===5.3&&o.type==="AMERICAN"){let E=this.americanGame.determineGameResult({...i,gameInputs:o.inputs}),{betOutcomes:A}=E.outputs;return{...E,outputs:{type:"american",betOutcomes:A,result:E.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var Mo=(r)=>{if(r.type==="EUROPEAN")I(r.inputs);else J(r.inputs)};var Ir=require("big.js");var l;((E)=>{E.LOW_RISK="LOW_RISK";E.MEDIUM_RISK="MEDIUM_RISK";E.HIGH_RISK="HIGH_RISK"})(l||={});var M;((c)=>{c[c.TEN=10]="TEN";c[c.TWENTY=20]="TWENTY";c[c.THIRTY=30]="THIRTY";c[c.FORTY=40]="FORTY";c[c.FIFTY=50]="FIFTY"})(M||={});var wo={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Vo={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Ho={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},ho={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},vo={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},qr=new y(new Map([[1,wo],[2,Vo],[3,Ho],[4,ho],[8,vo]]));var zr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Jr extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(!Object.values(M).includes(o.segments))throw new Error("Invalid segments value");if(!Object.values(l).includes(o.riskLevel))throw new Error("Invalid risk level");let A=qr.getMultipliers(i)[o.riskLevel];if(A===void 0)throw new Error(`No multipliers found for risk level ${o.riskLevel}`);let c=A[o.segments];if(c===void 0)throw new Error(`No multipliers found for segment ${o.segments}`);let t=zr[o.riskLevel];if(t===void 0)throw new Error(`No patterns found for risk level ${o.riskLevel}`);let O=t[o.segments];if(O===void 0)throw new Error(`No patterns found for segment ${o.segments}`);let d=r.getRandomInt({min:0,max:O.length-1}),B=O[d.value];if(B===void 0)throw new Error(`No pattern found for segment ${o.segments} and value ${d.value}`);let f=c[B];if(f===void 0)throw new Error(`No payout found for picked segment ${B}`);return{isFinished:!0,payoutMultiplier:new Ir.Big(f),outputs:{result:d.values},randomValues:d}}}
1
+ var ee=Object.create;var{getPrototypeOf:te,defineProperty:Z,getOwnPropertyNames:pr,getOwnPropertyDescriptor:oe}=Object,Or=Object.prototype.hasOwnProperty;var C=(r,e,t)=>{t=r!=null?ee(te(r)):{};let o=e||!r||!r.__esModule?Z(t,"default",{value:r,enumerable:!0}):t;for(let i of pr(r))if(!Or.call(o,i))Z(o,i,{get:()=>r[i],enumerable:!0});return o},Rr=new WeakMap,ie=(r)=>{var e=Rr.get(r),t;if(e)return e;if(e=Z({},"__esModule",{value:!0}),r&&typeof r==="object"||typeof r==="function")pr(r).map((o)=>!Or.call(e,o)&&Z(e,o,{get:()=>r[o],enumerable:!(t=oe(r,o))||t.enumerable}));return Rr.set(r,e),e};var ne=(r,e)=>{for(var t in e)Z(r,t,{get:e[t],enumerable:!0,configurable:!0,set:(o)=>e[t]=()=>o})};var Ue={};ne(Ue,{validateRouletteGameInputs:()=>Me,validateAdvancedDiceInputs:()=>Re,plinkoMultipliers:()=>X,diamondsMultipliers:()=>Kr,calculateBaccaratBetAmount:()=>Gr,WheelSegments:()=>K,WheelRiskLevel:()=>y,Wheel:()=>Wr,VALID_SUITS:()=>Sr,VALID_RANKS:()=>Ir,VALID_EUROPEAN_STREETS:()=>er,VALID_EUROPEAN_STRAIGHTS:()=>P,VALID_EUROPEAN_SPLITS:()=>g,VALID_EUROPEAN_DOUBLE_STREETS:()=>ar,VALID_EUROPEAN_CORNERS:()=>or,VALID_AMERICAN_STREETS:()=>tr,VALID_AMERICAN_STRAIGHTS:()=>W,VALID_AMERICAN_SPLITS:()=>rr,VALID_AMERICAN_DOUBLE_STREETS:()=>Er,VALID_AMERICAN_CORNERS:()=>ir,TOP_COLUMN:()=>Pr,RouletteType:()=>F,Roulette:()=>qr,RollType:()=>dr,RED_NUMBERS:()=>kr,RANDOM_MIN_VALUE:()=>h,RANDOM_MAX_VALUE:()=>H,PlinkoRiskLevel:()=>Q,Plinko:()=>Hr,Parity:()=>S,PLINKO_ROW_COUNTS:()=>Se,PAYOUT_MULTIPLIERS:()=>Ur,OrigamiGame:()=>O,Mines:()=>vr,MIN_WIN_CHANCE:()=>ur,MIDDLE_COLUMN:()=>Fr,MAX_WIN_CHANCE:()=>Br,Limbo:()=>wr,KenoRiskLevel:()=>br,Keno:()=>Nr,Half:()=>T,GameErrorCode:()=>fr,GameError:()=>E,Game:()=>R,EuropeanRoulette:()=>Ar,EUROPEAN_HOUSE_EDGE:()=>jr,EFFECTIVE_RANGE:()=>z,Dozen:()=>G,DiceDirection:()=>_r,Dice:()=>Dr,DiamondsResultType:()=>yr,Diamonds:()=>Zr,Column:()=>m,Color:()=>I,BaccaratOutcome:()=>Tr,BaccaratBetType:()=>mr,Baccarat:()=>Cr,BOTTOM_COLUMN:()=>Yr,BLACK_NUMBERS:()=>$r,AmericanRoulette:()=>lr,AdvancedDice:()=>xr,AMERICAN_HOUSE_EDGE:()=>zr,AMERICAN_BASKET:()=>nr});module.exports=ie(Ue);var O;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(O||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}var v=require("big.js");var fr;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(fr||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var h=0,H=1e4,z=10001,ur=0.01,Br=98,ae=(r)=>{if(r<h)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${h}`)},Ee=(r)=>{if(r>H)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${H}`)},w=(r)=>{if(ae(r.lower),Ee(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},ce=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Ae=(r,e)=>e>=r.lower&&e<=r.upper,le=(r)=>r.upper-r.lower+1,$=(r,e)=>e>r.lower&&e<r.upper,j=(r)=>r.upper-r.lower-1,dr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(dr||={});var sr=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return w(r.bounds),j(r.bounds);case"ROLL_OUTSIDE":return w(r.bounds),z-le(r.bounds);case"ROLL_BETWEEN_TWO":return w(r.firstBounds),w(r.secondBounds),ce(r.firstBounds,r.secondBounds),j(r.firstBounds)+j(r.secondBounds)}})(),o=v.Big(t).div(z).mul(100);if(o.lt(ur))throw E.createValidationError("Win chance too low");if(o.gt(Br))throw E.createValidationError("Win chance too high");return o},Re=(r)=>{sr(r)};class xr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=sr(t),i=r.getRandomInt({min:h,max:H}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return $(t.bounds,n);case"ROLL_OUTSIDE":return!Ae(t.bounds,n);case"ROLL_BETWEEN_TWO":return $(t.firstBounds,n)||$(t.secondBounds,n)}})()?new v.Big(100-e).div(o):new v.Big(0),outputs:{result:i.values},randomValues:i}}}var L=C(require("big.js"));var Sr=["Clubs","Diamonds","Hearts","Spades"],Ir=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Tr;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(Tr||={});var mr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(mr||={});var pe={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Gr=(r)=>{return new L.default(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new L.default(0)))};class Cr extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let u of n.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);l.push(d),A=(A+V)%10}let p=[],c=0;for(let u of a.slice(0,2)){let d=this.mapRandomValueToCard(u),V=this.mapRandomValueToCardValue(u);p.push(d),c=(c+V)%10}if(!this.isNaturalWin(A,c)){let u=this.shouldDrawThirdPlayerCard(A),d=null;if(u)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let f;if(A===c)f="TIE";else f=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Gr(e),{betType:M,multiplier:gr}=pe[f],re=new L.default(0).add(e.bets.filter((u)=>u.type===M).reduce((u,d)=>u.add(d.amount.mul(gr)),new L.default(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?re.div(B):new L.default(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:f,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=Sr[Math.floor(r/13)],t=Ir[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}var Lr=C(require("big.js"));class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var yr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(yr||={});var Oe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},fe={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},ue={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},Be={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},de={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Kr=new s(new Map([[1,Oe],[2,fe],[3,ue],[4,Be],[8,de]])),se={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Zr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=Kr.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:Lr.default(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=se[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}var U=C(require("big.js"));var _r;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(_r||={});class Dr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new U.default(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new U.default(100-e).div(p):new U.default(0),outputs:{result:o.values},randomValues:o}}}var q=C(require("big.js"));var br;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(br||={});var xe={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class Nr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??xe}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new q.default(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new q.default(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}var x=C(require("big.js"));var Mr=(r,e)=>{return r.gt(e)?r:e};var Vr=(r,e)=>{return r.lt(e)?r:e};class wr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x.default(16777216),a=new x.default(1),l=new x.default(1e6),A=o.value,p=new x.default(A-1).div(i),c=(100-e)/100,f=n.div(p.mul(n).plus(1)).mul(c),B=Mr(a,Vr(f,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x.default(t.targetMultiplier):new x.default(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}var _=C(require("big.js"));var J=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class vr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((M)=>t.selectedTiles.includes(M)),A=t.hasCashedOut||l,p=(100-e)/100,c=new _.default(J(25-t.minesCount,t.selectedTiles.length)).div(new _.default(J(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new _.default(p).div(c):new _.default(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}var hr=require("big.js");var Q;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(Q||={});var Se=[8,9,10,11,12,13,14,15,16],Ie={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Te={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},me={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},Ge={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},Ce={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},X=new s(new Map([[1,Ie],[2,Te],[3,me],[4,Ge],[8,Ce]]));class Hr extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=X.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((f,B)=>f+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:hr.Big(c),outputs:{result:l.values},randomValues:l}}}var N=require("big.js");var P=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],W=[37,...P],g=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],rr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],er=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],tr=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],or=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ir=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],nr=[0,1,2,3,37],ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Er=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var I;((t)=>{t.RED="RED";t.BLACK="BLACK"})(I||={});var T;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(T||={});var m;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(m||={});var G;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(G||={});var F;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})(F||={});var Y=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&D(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&Le(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ye(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&Ke(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ze(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},D=(r)=>{return P.includes(r)},Le=(r)=>{if(r.length!==2)return!1;if(!r.every(D))return!1;return g.some(([e,t])=>e===r[0]&&t===r[1])},ye=(r)=>{if(r.length!==3)return!1;if(!r.every(D))return!1;return er.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},Ke=(r)=>{if(r.length!==4)return!1;if(!r.every(D))return!1;return or.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ze=(r)=>{if(r.length!==6)return!1;if(!r.every(D))return!1;return ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var k=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&b(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&_e(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&De(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&be(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&Ne(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},b=(r)=>{return W.includes(r)};function _e(r){if(r.length!==2)return!1;if(!r.every(b))return!1;return rr.some(([e,t])=>e===r[0]&&t===r[1])}var De=(r)=>{if(r.length!==3)return!1;if(!r.every(b))return!1;return tr.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},be=(r)=>{if(r.length!==4)return!1;if(!r.every(b))return!1;return ir.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},Ne=(r)=>{if(r.length!==6)return!1;if(!r.every(b))return!1;return Er.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Ur={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},Pr=[3,6,9,12,15,18,21,24,27,30,33,36],Fr=[2,5,8,11,14,17,20,23,26,29,32,35],Yr=[1,4,7,10,13,16,19,22,25,28,31,34],kr=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],$r=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],jr=2.7,zr=5.3;class cr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),n=this.getBetTotals(e),a=this.getBetTotals(i.winningBets),l=this.calculateTotalBetAmount(n),A=this.calculateTotalPayout(a),p=l.gt(0)?A.div(l):new N.Big(0);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:p,isFinished:!0,randomValues:t}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new N.Big(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return kr.includes(e)&&t.color==="RED"||$r.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return Pr.includes(e)&&t.column==="TOP"||Fr.includes(e)&&t.column==="MIDDLE"||Yr.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Ur[t];return e.plus(o.mul(n||0))},new N.Big(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new N.Big(0))}}class Ar extends cr{maxNumber=36;validateInputs(r){Y(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class lr extends cr{maxNumber=37;validateInputs(r){k(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return nr.some((t)=>t===e)}}class qr extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Ar,this.americanGame=new lr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===jr&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===zr&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var Me=(r)=>{if(r.type==="EUROPEAN")Y(r.inputs);else k(r.inputs)};var Xr=require("big.js");var y;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(y||={});var K;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(K||={});var Ve={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},we={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},ve={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},he={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},He={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Jr=new s(new Map([[1,Ve],[2,we],[3,ve],[4,he],[8,He]]));var Qr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Wr extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(K).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(y).includes(e.riskLevel))throw new Error("Invalid risk level");let i=Jr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Qr[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Xr.Big(c),outputs:{result:A.values},randomValues:A}}}
package/dist/index.d.ts CHANGED
@@ -349,12 +349,10 @@ export declare const VALID_AMERICAN_STRAIGHTS: readonly [
349
349
  36
350
350
  ];
351
351
  export type AmericanStraight = (typeof VALID_AMERICAN_STRAIGHTS)[number];
352
- export interface EuropeanStraightBet {
353
- amount: Big$1.Big;
352
+ export interface EuropeanStraightBet extends BaseBet {
354
353
  value: EuropeanStraight;
355
354
  }
356
- export interface AmericanStraightBet {
357
- amount: Big$1.Big;
355
+ export interface AmericanStraightBet extends BaseBet {
358
356
  value: AmericanStraight;
359
357
  }
360
358
  export declare const VALID_EUROPEAN_SPLITS: readonly [
@@ -600,8 +598,7 @@ export declare const VALID_EUROPEAN_SPLITS: readonly [
600
598
  ]
601
599
  ];
602
600
  export type EuropeanSplit = (typeof VALID_EUROPEAN_SPLITS)[number];
603
- export interface EuropeanSplitBet {
604
- amount: Big$1.Big;
601
+ export interface EuropeanSplitBet extends BaseBet {
605
602
  values: EuropeanSplit;
606
603
  }
607
604
  export declare const VALID_AMERICAN_SPLITS: readonly [
@@ -611,12 +608,20 @@ export declare const VALID_AMERICAN_SPLITS: readonly [
611
608
  ],
612
609
  readonly [
613
610
  0,
614
- 3
611
+ 2
615
612
  ],
616
613
  readonly [
617
614
  0,
618
615
  37
619
616
  ],
617
+ readonly [
618
+ 2,
619
+ 37
620
+ ],
621
+ readonly [
622
+ 3,
623
+ 37
624
+ ],
620
625
  readonly [
621
626
  1,
622
627
  2
@@ -847,8 +852,7 @@ export declare const VALID_AMERICAN_SPLITS: readonly [
847
852
  ]
848
853
  ];
849
854
  export type AmericanSplit = (typeof VALID_AMERICAN_SPLITS)[number];
850
- export interface AmericanSplitBet {
851
- amount: Big$1.Big;
855
+ export interface AmericanSplitBet extends BaseBet {
852
856
  values: AmericanSplit;
853
857
  }
854
858
  export declare const VALID_EUROPEAN_STREETS: readonly [
@@ -924,8 +928,10 @@ export declare const VALID_EUROPEAN_STREETS: readonly [
924
928
  ]
925
929
  ];
926
930
  export type EuropeanStreet = (typeof VALID_EUROPEAN_STREETS)[number];
927
- export interface EuropeanStreetBet {
931
+ export interface BaseBet {
928
932
  amount: Big$1.Big;
933
+ }
934
+ export interface EuropeanStreetBet extends BaseBet {
929
935
  values: EuropeanStreet;
930
936
  }
931
937
  export declare const VALID_AMERICAN_STREETS: readonly [
@@ -1006,8 +1012,7 @@ export declare const VALID_AMERICAN_STREETS: readonly [
1006
1012
  ]
1007
1013
  ];
1008
1014
  export type AmericanStreet = (typeof VALID_AMERICAN_STREETS)[number];
1009
- export interface AmericanStreetBet {
1010
- amount: Big$1.Big;
1015
+ export interface AmericanStreetBet extends BaseBet {
1011
1016
  values: AmericanStreet;
1012
1017
  }
1013
1018
  export declare const VALID_EUROPEAN_CORNERS: readonly [
@@ -1151,8 +1156,7 @@ export declare const VALID_EUROPEAN_CORNERS: readonly [
1151
1156
  ]
1152
1157
  ];
1153
1158
  export type EuropeanCorner = (typeof VALID_EUROPEAN_CORNERS)[number];
1154
- export interface EuropeanCornerBet {
1155
- amount: Big$1.Big;
1159
+ export interface EuropeanCornerBet extends BaseBet {
1156
1160
  values: EuropeanCorner;
1157
1161
  }
1158
1162
  export declare const VALID_AMERICAN_CORNERS: readonly [
@@ -1290,8 +1294,7 @@ export declare const VALID_AMERICAN_CORNERS: readonly [
1290
1294
  ]
1291
1295
  ];
1292
1296
  export type AmericanCorner = (typeof VALID_AMERICAN_CORNERS)[number];
1293
- export interface AmericanCornerBet {
1294
- amount: Big$1.Big;
1297
+ export interface AmericanCornerBet extends BaseBet {
1295
1298
  values: AmericanCorner;
1296
1299
  }
1297
1300
  export declare const AMERICAN_BASKET: readonly [
@@ -1301,8 +1304,7 @@ export declare const AMERICAN_BASKET: readonly [
1301
1304
  3,
1302
1305
  37
1303
1306
  ];
1304
- export interface AmericanBasketBet {
1305
- amount: Big$1.Big;
1307
+ export interface AmericanBasketBet extends BaseBet {
1306
1308
  }
1307
1309
  export declare const VALID_EUROPEAN_DOUBLE_STREETS: readonly [
1308
1310
  readonly [
@@ -1395,8 +1397,7 @@ export declare const VALID_EUROPEAN_DOUBLE_STREETS: readonly [
1395
1397
  ]
1396
1398
  ];
1397
1399
  export type EuropeanDoubleStreet = (typeof VALID_EUROPEAN_DOUBLE_STREETS)[number];
1398
- export interface EuropeanDoubleStreetBet {
1399
- amount: Big$1.Big;
1400
+ export interface EuropeanDoubleStreetBet extends BaseBet {
1400
1401
  values: EuropeanDoubleStreet;
1401
1402
  }
1402
1403
  export declare const VALID_AMERICAN_DOUBLE_STREETS: readonly [
@@ -1490,32 +1491,28 @@ export declare const VALID_AMERICAN_DOUBLE_STREETS: readonly [
1490
1491
  ]
1491
1492
  ];
1492
1493
  export type AmericanDoubleStreet = (typeof VALID_AMERICAN_DOUBLE_STREETS)[number];
1493
- export interface AmericanDoubleStreetBet {
1494
- amount: Big$1.Big;
1494
+ export interface AmericanDoubleStreetBet extends BaseBet {
1495
1495
  values: AmericanDoubleStreet;
1496
1496
  }
1497
1497
  export declare enum Parity {
1498
1498
  EVEN = "EVEN",
1499
1499
  ODD = "ODD"
1500
1500
  }
1501
- export interface ParityBet {
1502
- amount: Big$1.Big;
1501
+ export interface ParityBet extends BaseBet {
1503
1502
  parity: Parity;
1504
1503
  }
1505
1504
  export declare enum Color {
1506
1505
  RED = "RED",
1507
1506
  BLACK = "BLACK"
1508
1507
  }
1509
- export interface ColorBet {
1510
- amount: Big$1.Big;
1508
+ export interface ColorBet extends BaseBet {
1511
1509
  color: Color;
1512
1510
  }
1513
1511
  export declare enum Half {
1514
1512
  LOW = "LOW",
1515
1513
  HIGH = "HIGH"
1516
1514
  }
1517
- export interface HalfBet {
1518
- amount: Big$1.Big;
1515
+ export interface HalfBet extends BaseBet {
1519
1516
  half: Half;
1520
1517
  }
1521
1518
  export declare enum Column {
@@ -1523,8 +1520,7 @@ export declare enum Column {
1523
1520
  MIDDLE = "MIDDLE",
1524
1521
  BOTTOM = "BOTTOM"
1525
1522
  }
1526
- export interface ColumnBet {
1527
- amount: Big$1.Big;
1523
+ export interface ColumnBet extends BaseBet {
1528
1524
  column: Column;
1529
1525
  }
1530
1526
  export declare enum Dozen {
@@ -1532,8 +1528,7 @@ export declare enum Dozen {
1532
1528
  SECOND = "SECOND",
1533
1529
  THIRD = "THIRD"
1534
1530
  }
1535
- export interface DozenBet {
1536
- amount: Big$1.Big;
1531
+ export interface DozenBet extends BaseBet {
1537
1532
  dozen: Dozen;
1538
1533
  }
1539
1534
  export interface EuropeanRouletteGameInputs {
@@ -1582,18 +1577,83 @@ export interface AmericanRouletteBetOutcomes {
1582
1577
  }
1583
1578
  export interface EuropeanRouletteGameOutputs {
1584
1579
  betOutcomes: EuropeanRouletteBetOutcomes;
1580
+ result: number[];
1585
1581
  }
1586
1582
  export interface AmericanRouletteGameOutputs {
1587
1583
  betOutcomes: AmericanRouletteBetOutcomes;
1584
+ result: number[];
1588
1585
  }
1589
1586
  export type RouletteGameOutputs = {
1590
1587
  type: "european";
1591
1588
  betOutcomes: EuropeanRouletteBetOutcomes;
1589
+ result: number[];
1592
1590
  } | {
1593
1591
  type: "american";
1594
1592
  betOutcomes: AmericanRouletteBetOutcomes;
1593
+ result: number[];
1595
1594
  };
1596
- export declare const calculateRouletteBetAmount: (inputs: RouletteGameInputs) => Big$1.Big;
1595
+ export declare const PAYOUT_MULTIPLIERS: Record<keyof EuropeanRouletteGameInputs | keyof AmericanRouletteGameInputs, number>;
1596
+ export declare const TOP_COLUMN: number[];
1597
+ export declare const MIDDLE_COLUMN: number[];
1598
+ export declare const BOTTOM_COLUMN: number[];
1599
+ export declare const RED_NUMBERS: number[];
1600
+ export declare const BLACK_NUMBERS: number[];
1601
+ export declare const EUROPEAN_HOUSE_EDGE = 2.7;
1602
+ export declare const AMERICAN_HOUSE_EDGE = 5.3;
1603
+ export type BetPredicate = (bet: BaseBet, result: number) => boolean;
1604
+ declare abstract class BaseRoulette<TInputs extends {
1605
+ straightBets: BaseBet[];
1606
+ splitBets: BaseBet[];
1607
+ streetBets: BaseBet[];
1608
+ cornerBets: BaseBet[];
1609
+ doubleStreetBets: BaseBet[];
1610
+ parityBets: BaseBet[];
1611
+ colorBets: BaseBet[];
1612
+ halfBets: BaseBet[];
1613
+ columnBets: BaseBet[];
1614
+ dozenBets: BaseBet[];
1615
+ }, TOutputs extends {
1616
+ betOutcomes: {
1617
+ winningBets: TInputs;
1618
+ losingBets: TInputs;
1619
+ };
1620
+ result: number[];
1621
+ }> extends Game<TInputs, TOutputs> {
1622
+ constructor();
1623
+ determineGameResult({ generator, gameInputs }: GetGameResultRequest<TInputs>): GameResult<TOutputs>;
1624
+ protected abstract readonly maxNumber: number;
1625
+ protected abstract validateInputs(inputs: TInputs): void;
1626
+ protected abstract readonly betPredicates: Record<keyof TInputs, BetPredicate>;
1627
+ protected determineBetOutcomes(inputs: TInputs, result: number): TOutputs["betOutcomes"];
1628
+ private partitionBets;
1629
+ protected calculateTotalAmount(bets: {
1630
+ amount: Big$1.Big;
1631
+ }[]): Big$1.Big;
1632
+ protected isWinningStraightBet(bet: BaseBet, gameResult: number): boolean;
1633
+ protected isWinningSplitBet(bet: BaseBet, gameResult: number): boolean;
1634
+ protected isWinningStreetBet(bet: BaseBet, gameResult: number): boolean;
1635
+ protected isWinningCornerBet(bet: BaseBet, gameResult: number): boolean;
1636
+ protected isWinningDoubleStreetBet(bet: BaseBet, gameResult: number): boolean;
1637
+ protected isWinningColorBet(bet: BaseBet, gameResult: number): boolean;
1638
+ protected isWinningHalfBet(bet: BaseBet, gameResult: number): boolean;
1639
+ protected isWinningColumnBet(bet: BaseBet, gameResult: number): boolean;
1640
+ protected isWinningDozenBet(bet: BaseBet, gameResult: number): boolean;
1641
+ protected isWinningParityBet(bet: BaseBet, gameResult: number): boolean;
1642
+ protected getBetTotals(inputs: TInputs): Record<keyof TInputs, Big$1.Big>;
1643
+ protected calculateTotalPayout(totals: Record<keyof TInputs, Big$1.Big>): Big$1.Big;
1644
+ protected calculateTotalBetAmount(totals: Record<keyof TInputs, Big$1.Big>): Big$1.Big;
1645
+ }
1646
+ export declare class EuropeanRoulette extends BaseRoulette<EuropeanRouletteGameInputs, EuropeanRouletteGameOutputs> {
1647
+ protected readonly maxNumber = 36;
1648
+ protected validateInputs(inputs: EuropeanRouletteGameInputs): void;
1649
+ protected readonly betPredicates: Record<keyof EuropeanRouletteGameInputs, BetPredicate>;
1650
+ }
1651
+ export declare class AmericanRoulette extends BaseRoulette<AmericanRouletteGameInputs, AmericanRouletteGameOutputs> {
1652
+ protected readonly maxNumber = 37;
1653
+ protected validateInputs(inputs: AmericanRouletteGameInputs): void;
1654
+ protected readonly betPredicates: Record<keyof AmericanRouletteGameInputs, BetPredicate>;
1655
+ protected isWinningBasketBet(_bet: BaseBet, gameResult: number): boolean;
1656
+ }
1597
1657
  export declare class Roulette extends Game<RouletteGameInputs, RouletteGameOutputs> {
1598
1658
  private readonly europeanGame;
1599
1659
  private readonly americanGame;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var x;((f)=>{f.DICE="DICE";f.MINES="MINES";f.KENO="KENO";f.LIMBO="LIMBO";f.ADVANCED_DICE="ADVANCED_DICE";f.BACCARAT="BACCARAT";f.DIAMONDS="DIAMONDS";f.PLINKO="PLINKO";f.ROULETTE="ROULETTE";f.WHEEL="WHEEL"})(x||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as k}from"big.js";var Gr;((o)=>o.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Gr||={});class e extends Error{static createValidationError(r){return new e("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof e}errorCode;constructor(r,o){super(o);this.errorCode=r}}var $=0,j=1e4,X=10001,Lr=0.01,yr=98,Cr=(r)=>{if(r<$)throw e.createValidationError(`Lower bound ${r} is below minimum allowed value ${$}`)},Kr=(r)=>{if(r>j)throw e.createValidationError(`Upper bound ${r} is above maximum allowed value ${j}`)},h=(r)=>{if(Cr(r.lower),Kr(r.upper),r.lower>=r.upper)throw e.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},pr=(r,o)=>{let[i,E]=r.lower<=o.lower?[r,o]:[o,r];if(i.upper>E.lower)throw e.createValidationError("Bounds must not overlap")},Zr=(r,o)=>o>=r.lower&&o<=r.upper,_r=(r)=>r.upper-r.lower+1,F=(r,o)=>o>r.lower&&o<r.upper,Y=(r)=>r.upper-r.lower-1,Dr;((E)=>{E.ROLL_BETWEEN="ROLL_BETWEEN";E.ROLL_OUTSIDE="ROLL_OUTSIDE";E.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Dr||={});var W=(r)=>{let i=(()=>{switch(r.mode){case"ROLL_BETWEEN":return h(r.bounds),Y(r.bounds);case"ROLL_OUTSIDE":return h(r.bounds),X-_r(r.bounds);case"ROLL_BETWEEN_TWO":return h(r.firstBounds),h(r.secondBounds),pr(r.firstBounds,r.secondBounds),Y(r.firstBounds)+Y(r.secondBounds)}})(),E=k(i).div(X).mul(100);if(E.lt(Lr))throw e.createValidationError("Win chance too low");if(E.gt(yr))throw e.createValidationError("Win chance too high");return E},Mo=(r)=>{W(r)};class Nr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=W(i),A=r.getRandomInt({min:$,max:j}),c=A.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(i.mode){case"ROLL_BETWEEN":return F(i.bounds,c);case"ROLL_OUTSIDE":return!Zr(i.bounds,c);case"ROLL_BETWEEN_TWO":return F(i.firstBounds,c)||F(i.secondBounds,c)}})()?new k(100-o).div(E):new k(0),outputs:{result:A.values},randomValues:A}}}import N from"big.js";var ar=["Clubs","Diamonds","Hearts","Spades"],lr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Mr;((E)=>{E.PLAYER_WIN="PLAYER_WIN";E.TIE="TIE";E.BANKER_WIN="BANKER_WIN"})(Mr||={});var wr;((E)=>{E.PLAYER="PLAYER";E.TIE="TIE";E.BANKER="BANKER"})(wr||={});var Vr={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Hr=(r)=>{return new N(0).add(r.bets.reduce((i,E)=>i.add(E.amount),new N(0)))};class hr extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(i!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(o);let E=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),A=E.values,c=A.slice(0,3),t=A.slice(3,6),O=[],d=0;for(let T of c.slice(0,2)){let L=this.mapRandomValueToCard(T),H=this.mapRandomValueToCardValue(T);O.push(L),d=(d+H)%10}let B=[],f=0;for(let T of t.slice(0,2)){let L=this.mapRandomValueToCard(T),H=this.mapRandomValueToCardValue(T);B.push(L),f=(f+H)%10}if(!this.isNaturalWin(d,f)){let T=this.shouldDrawThirdPlayerCard(d),L=null;if(T)L=this.mapRandomValueToCardValue(c[2]),O.push(this.mapRandomValueToCard(c[2])),d=(d+L)%10;if(this.shouldDrawThirdBankerCard(f,L))B.push(this.mapRandomValueToCard(t[2])),f=(f+this.mapRandomValueToCardValue(t[2]))%10}let S;if(d===f)S="TIE";else S=d>f?"PLAYER_WIN":"BANKER_WIN";let G=Hr(o),{betType:V,multiplier:Tr}=Vr[S],xr=new N(0).add(o.bets.filter((T)=>T.type===V).reduce((T,L)=>T.add(L.amount.mul(Tr)),new N(0)));return{isFinished:!0,payoutMultiplier:G.gt(0)?xr.div(G):new N(0),outputs:{playerCards:O,playerHandValue:d,bankerCards:B,bankerHandValue:f,gameOutcome:S,result:E.values},randomValues:E}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((o)=>o.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let o=ar[Math.floor(r/13)],i=lr[r%13];return{suit:o,rank:i}}isNaturalWin(r,o){let i=[8,9];return i.includes(r)||i.includes(o)}mapRandomValueToCardValue(r){let o=r%13;if(o===0)return 1;if(o>=10)return 10;return o+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,o){if(o===null)return r<=5;if(r<=2)return!0;if(r===3)return o!==8;if(r===4)return[2,3,4,5,6,7].includes(o);if(r===5)return[4,5,6,7].includes(o);if(r===6)return[6,7].includes(o);return!1}}import vr from"big.js";class y{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let o=this.multipliers.get(r);if(o===void 0)throw new Error(`Multipliers for ${r} not found`);return o}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,o])=>({edge:r,multipliers:o}))}}var Ur;((t)=>{t.PAIR="PAIR";t.TWO_PAIR="TWO_PAIR";t.THREE_OF_A_KIND="THREE_OF_A_KIND";t.FULL_HOUSE="FULL_HOUSE";t.FOUR_OF_A_KIND="FOUR_OF_A_KIND";t.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Ur||={});var Pr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},Fr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},Yr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},kr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},$r={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},jr=new y(new Map([[1,Pr],[2,Fr],[3,Yr],[4,kr],[8,$r]])),qr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class zr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:o}){let i=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),E=jr.getMultipliers(o),A=i.values,c=this.calculatePayoutMultiplier(E,A);return{isFinished:!0,payoutMultiplier:vr(c),outputs:{result:i.values},randomValues:i}}calculatePayoutMultiplier(r,o){let i=new Map;for(let c of o){let t=i.get(c)||0;i.set(c,t+1)}let E=[...i.values()].filter((c)=>c>1),A=this.classifyResult(E);return A===null?0:r[A]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[o,i]=r;if(o===void 0)return null;if(i===void 0){let E=qr[o];if(E===void 0)throw new Error(`Unexpected single diamond repeat count: ${o}`);return E}return o===3||i===3?"FULL_HOUSE":"TWO_PAIR"}}import q from"big.js";var Ir;((i)=>{i.ABOVE="ABOVE";i.BELOW="BELOW"})(Ir||={});class Jr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=r.getRandomInt({min:0,max:1e4}),A=E.min,O=E.max-A+1-1,d=i.direction==="ABOVE"?O-i.selectedValue:i.selectedValue,B=new q(d).div(O).mul(100);return{isFinished:!0,payoutMultiplier:(i.direction==="ABOVE"?E.value>i.selectedValue:E.value<i.selectedValue)?new q(100-o).div(B):new q(0),outputs:{result:E.values},randomValues:E}}}import u from"big.js";var Qr;((A)=>{A.CLASSIC="CLASSIC";A.LOW_RISK="LOW_RISK";A.MEDIUM_RISK="MEDIUM_RISK";A.HIGH_RISK="HIGH_RISK"})(Qr||={});var Xr={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class Wr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Xr}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:o,gameInputs:i}){if(o!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(i.selectedNumbers.length===0)throw new Error("No numbers selected");if(i.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let t of i.selectedNumbers){if(t%1!==0)throw new Error("Only integers can be selected");if(t<0||t>39)throw new Error("Invalid number selected")}let E=r.getUniqueRandomInts({min:0,max:39,count:10}),A=i.selectedNumbers.filter((t)=>E.values.includes(t));return{isFinished:!0,payoutMultiplier:A.length>0?new u(this.multipliers[i.selectedNumbers.length][i.riskLevel][A.length]??0):new u(0),outputs:{result:E.values},randomValues:E}}validateMultiplierOverrides(r){for(let[o,i]of Object.entries(r)){let E=Number(o);for(let[A,c]of Object.entries(i))if(c.length!==E+1)throw new Error(`Invalid count of multipliers for tiles ${E} and risk level ${A}. Expected ${E+1}, but got ${c.length}`)}}}import C from"big.js";var b=(r,o)=>{return r.gt(o)?r:o};var s=(r,o)=>{return r.lt(o)?r:o};class ur extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:o,gameInputs:i}){let E=r.getRandomInt({min:1,max:4294967295}),A=E.max,c=new C(16777216),t=new C(1),O=new C(1e6),d=E.value,B=new C(d-1).div(A),f=(100-o)/100,S=c.div(B.mul(c).plus(1)).mul(f),G=b(t,s(S,O));return{isFinished:!0,payoutMultiplier:G.gte(i.targetMultiplier)?new C(i.targetMultiplier):new C(0),outputs:{randomMultiplier:G,result:E.values},randomValues:E}}}import v from"big.js";var z=(r,o)=>{if(o<0||r<0||o>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(o>r-o)o=r-o;let i=1;for(let E=1;E<=o;E++)i=i*(r-E+1)/E;return i};class br extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:o,gameInputs:i}){if(i.minesCount<=0||i.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(i.selectedTiles.length>25-i.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let t=r.getUniqueRandomInts({min:1,max:25,count:i.minesCount}),O=t.values.some((V)=>i.selectedTiles.includes(V)),d=i.hasCashedOut||O,B=(100-o)/100,f=new v(z(25-i.minesCount,i.selectedTiles.length)).div(new v(z(25,i.selectedTiles.length))),G=i.hasCashedOut&&!O?new v(B).div(f):new v(0);return{isFinished:d,payoutMultiplier:G,outputs:{result:t.values},randomValues:t}}}import{Big as io}from"big.js";var m;((E)=>{E.LOW_RISK="LOW_RISK";E.MEDIUM_RISK="MEDIUM_RISK";E.HIGH_RISK="HIGH_RISK"})(m||={});var ni=[8,9,10,11,12,13,14,15,16],sr={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},mr={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},gr={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},ro={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},oo={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},g=new y(new Map([[1,sr],[2,mr],[3,gr],[4,ro],[8,oo]]));class Eo extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(o.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(o.numberOfRows<8||o.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let E=o.numberOfRows,t=g.getMultipliers(i)[o.riskLevel][E],O=r.getRandomIntsWithReplacement({min:0,max:1,count:o.numberOfRows}),B=O.values.reduce((S,G)=>S+G,0),f=t[B];if(f===void 0)throw new Error(`No payout found for end position ${B}`);return{isFinished:!0,payoutMultiplier:io(f),outputs:{result:O.values},randomValues:O}}}import{Big as n}from"big.js";var I=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],rr=[37,...I],or=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],ir=[[0,1],[0,3],[0,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],Er=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Ar=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],cr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],nr=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],J=[0,1,2,3,37],tr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],er=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],K;((i)=>{i.EVEN="EVEN";i.ODD="ODD"})(K||={});var p;((i)=>{i.RED="RED";i.BLACK="BLACK"})(p||={});var Z;((i)=>{i.LOW="LOW";i.HIGH="HIGH"})(Z||={});var _;((E)=>{E.TOP="TOP";E.MIDDLE="MIDDLE";E.BOTTOM="BOTTOM"})(_||={});var D;((E)=>{E.FIRST="FIRST";E.SECOND="SECOND";E.THIRD="THIRD"})(D||={});var Q;((i)=>{i.AMERICAN="AMERICAN";i.EUROPEAN="EUROPEAN"})(Q||={});var U=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw e.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((o)=>o.amount.gte(0)&&a(o.value)))throw e.createValidationError("Invalid straight bet.");if(!r.splitBets.every((o)=>o.amount.gte(0)&&Ao(o.values)))throw e.createValidationError("Invalid split bet.");if(!r.streetBets.every((o)=>o.amount.gte(0)&&co(o.values)))throw e.createValidationError("Invalid street bet.");if(!r.cornerBets.every((o)=>o.amount.gte(0)&&no(o.values)))throw e.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((o)=>o.amount.gte(0)&&to(o.values)))throw e.createValidationError("Invalid double street bet.");if(!r.parityBets.every((o)=>o.amount.gte(0)&&Object.values(K).includes(o.parity)))throw e.createValidationError("Invalid parity bet.");if(!r.colorBets.every((o)=>o.amount.gte(0)&&Object.values(p).includes(o.color)))throw e.createValidationError("Invalid color bet.");if(!r.halfBets.every((o)=>o.amount.gte(0)&&Object.values(Z).includes(o.half)))throw e.createValidationError("Invalid half bet.");if(!r.columnBets.every((o)=>o.amount.gte(0)&&Object.values(_).includes(o.column)))throw e.createValidationError("Invalid column bet.");if(!r.dozenBets.every((o)=>o.amount.gte(0)&&Object.values(D).includes(o.dozen)))throw e.createValidationError("Invalid dozen bet.")},a=(r)=>{return I.includes(r)},Ao=(r)=>{if(r.length!==2)return!1;if(!r.every(a))return!1;return or.some(([o,i])=>o===r[0]&&i===r[1])},co=(r)=>{if(r.length!==3)return!1;if(!r.every(a))return!1;return Er.some(([o,i,E])=>o===r[0]&&i===r[1]&&E===r[2])},no=(r)=>{if(r.length!==4)return!1;if(!r.every(a))return!1;return cr.some(([o,i,E,A])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3])},to=(r)=>{if(r.length!==6)return!1;if(!r.every(a))return!1;return tr.some(([o,i,E,A,c,t])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3]&&c===r[4]&&t===r[5])};var P=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw e.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((o)=>o.amount.gte(0)&&l(o.value)))throw e.createValidationError("Invalid straight bet.");if(!r.splitBets.every((o)=>o.amount.gte(0)&&eo(o.values)))throw e.createValidationError("Invalid split bet.");if(!r.streetBets.every((o)=>o.amount.gte(0)&&fo(o.values)))throw e.createValidationError("Invalid street bet.");if(!r.cornerBets.every((o)=>o.amount.gte(0)&&Oo(o.values)))throw e.createValidationError("Invalid corner bet.");if(!r.basketBets.every((o)=>o.amount.gte(0)))throw e.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((o)=>o.amount.gte(0)&&Ro(o.values)))throw e.createValidationError("Invalid double street bet.");if(!r.parityBets.every((o)=>o.amount.gte(0)&&Object.values(K).includes(o.parity)))throw e.createValidationError("Invalid parity bet.");if(!r.colorBets.every((o)=>o.amount.gte(0)&&Object.values(p).includes(o.color)))throw e.createValidationError("Invalid color bet.");if(!r.halfBets.every((o)=>o.amount.gte(0)&&Object.values(Z).includes(o.half)))throw e.createValidationError("Invalid half bet.");if(!r.columnBets.every((o)=>o.amount.gte(0)&&Object.values(_).includes(o.column)))throw e.createValidationError("Invalid column bet.");if(!r.dozenBets.every((o)=>o.amount.gte(0)&&Object.values(D).includes(o.dozen)))throw e.createValidationError("Invalid dozen bet.")},l=(r)=>{return rr.includes(r)};function eo(r){if(r.length!==2)return!1;if(!r.every(l))return!1;return ir.some(([o,i])=>o===r[0]&&i===r[1])}var fo=(r)=>{if(r.length!==3)return!1;if(!r.every(l))return!1;return Ar.some(([o,i,E])=>o===r[0]&&i===r[1]&&E===r[2])},Oo=(r)=>{if(r.length!==4)return!1;if(!r.every(l))return!1;return nr.some(([o,i,E,A])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3])},Ro=(r)=>{if(r.length!==6)return!1;if(!r.every(l))return!1;return er.some(([o,i,E,A,c,t])=>o===r[0]&&i===r[1]&&E===r[2]&&A===r[3]&&c===r[4]&&t===r[5])};var fr=(r)=>{return new n(0).add(r.straightBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.splitBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.streetBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.cornerBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.doubleStreetBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.parityBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.colorBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.halfBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.columnBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.dozenBets.reduce((o,i)=>o.plus(i.amount),new n(0)))},Or=(r)=>{return new n(0).add(r.straightBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.splitBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.streetBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.cornerBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.basketBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.doubleStreetBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.parityBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.colorBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.halfBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.columnBets.reduce((o,i)=>o.plus(i.amount),new n(0))).add(r.dozenBets.reduce((o,i)=>o.plus(i.amount),new n(0)))},li=(r)=>{return r.type==="EUROPEAN"?fr(r.inputs):Or(r.inputs)};class Rr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:o}){U(o);let i=r.getRandomInt({min:0,max:36}),E=i.value,A=this.determineBetOutcomes(o,E),c=fr(o),t=this.calculateTotalPayoutAmount(A),O=c.gt(0)?t.div(c):new n(0);return{outputs:{betOutcomes:A,result:i.values},payoutMultiplier:O,isFinished:!0,randomValues:i}}determineBetOutcomes(r,o){return{winningBets:{straightBets:r.straightBets.filter((i)=>i.value===o),splitBets:r.splitBets.filter((i)=>i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>i.values.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>this.isWinningDozenBet(i,o))},losingBets:{straightBets:r.straightBets.filter((i)=>i.value!==o),splitBets:r.splitBets.filter((i)=>!i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>!i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>!i.values.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>!i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>!this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>!this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>!this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>!this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>!this.isWinningDozenBet(i,o))}}}isWinningParityBet(r,o){if(o===0)return!1;let i=o%2===0?"EVEN":"ODD";return r.parity===i}isWinningColorBet(r,o){let i=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],E=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(i.includes(o)&&r.color==="RED")return!0;if(E.includes(o)&&r.color==="BLACK")return!0;return!1}isWinningHalfBet(r,o){if(o>0&&o<=18&&r.half==="LOW")return!0;if(o>18&&o<=36&&r.half==="HIGH")return!0;return!1}isWinningColumnBet(r,o){let i=[3,6,9,12,15,18,21,24,27,30,33,36],E=[2,5,8,11,14,17,20,23,26,29,32,35],A=[1,4,7,10,13,16,19,22,25,28,31,34];if(i.includes(o)&&r.column==="TOP")return!0;if(E.includes(o)&&r.column==="MIDDLE")return!0;if(A.includes(o)&&r.column==="BOTTOM")return!0;return!1}isWinningDozenBet(r,o){if(o>0&&o<=12&&r.dozen==="FIRST")return!0;if(o>12&&o<=24&&r.dozen==="SECOND")return!0;if(o>24&&o<=36&&r.dozen==="THIRD")return!0;return!1}calculateTotalPayoutAmount(r){return new n(0).add(r.winningBets.straightBets.reduce((o,i)=>o.plus(i.amount.mul(36)),new n(0))).add(r.winningBets.splitBets.reduce((o,i)=>o.plus(i.amount.mul(18)),new n(0))).add(r.winningBets.streetBets.reduce((o,i)=>o.plus(i.amount.mul(12)),new n(0))).add(r.winningBets.cornerBets.reduce((o,i)=>o.plus(i.amount.mul(9)),new n(0))).add(r.winningBets.doubleStreetBets.reduce((o,i)=>o.plus(i.amount.mul(6)),new n(0))).add(r.winningBets.parityBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.colorBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.halfBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.columnBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n(0))).add(r.winningBets.dozenBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n(0)))}}class dr extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:o}){P(o);let i=r.getRandomInt({min:0,max:37}),E=i.value,A=this.determineBetOutcomes(o,E),c=Or(o),t=this.calculateTotalPayoutAmount(A),O=c.gt(0)?t.div(c):new n(0);return{outputs:{betOutcomes:A,result:i.values},payoutMultiplier:O,isFinished:!0,randomValues:i}}determineBetOutcomes(r,o){return{winningBets:{straightBets:r.straightBets.filter((i)=>i.value===o),splitBets:r.splitBets.filter((i)=>i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>i.values.some((E)=>E===o)),basketBets:r.basketBets.filter((i)=>J.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>this.isWinningDozenBet(i,o))},losingBets:{straightBets:r.straightBets.filter((i)=>i.value!==o),splitBets:r.splitBets.filter((i)=>!i.values.some((E)=>E===o)),streetBets:r.streetBets.filter((i)=>!i.values.some((E)=>E===o)),cornerBets:r.cornerBets.filter((i)=>!i.values.some((E)=>E===o)),basketBets:r.basketBets.filter((i)=>!J.some((E)=>E===o)),doubleStreetBets:r.doubleStreetBets.filter((i)=>!i.values.some((E)=>E===o)),parityBets:r.parityBets.filter((i)=>!this.isWinningParityBet(i,o)),colorBets:r.colorBets.filter((i)=>!this.isWinningColorBet(i,o)),halfBets:r.halfBets.filter((i)=>!this.isWinningHalfBet(i,o)),columnBets:r.columnBets.filter((i)=>!this.isWinningColumnBet(i,o)),dozenBets:r.dozenBets.filter((i)=>!this.isWinningDozenBet(i,o))}}}isWinningParityBet(r,o){if(o===0||o===37)return!1;let i=o%2===0?"EVEN":"ODD";return r.parity===i}isWinningColorBet(r,o){let i=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],E=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(i.includes(o)&&r.color==="RED")return!0;if(E.includes(o)&&r.color==="BLACK")return!0;return!1}isWinningHalfBet(r,o){if(o>0&&o<=18&&r.half==="LOW")return!0;if(o>18&&o<=36&&r.half==="HIGH")return!0;return!1}isWinningColumnBet(r,o){let i=[3,6,9,12,15,18,21,24,27,30,33,36],E=[2,5,8,11,14,17,20,23,26,29,32,35],A=[1,4,7,10,13,16,19,22,25,28,31,34];if(i.includes(o)&&r.column==="TOP")return!0;if(E.includes(o)&&r.column==="MIDDLE")return!0;if(A.includes(o)&&r.column==="BOTTOM")return!0;return!1}isWinningDozenBet(r,o){if(o>0&&o<=12&&r.dozen==="FIRST")return!0;if(o>12&&o<=24&&r.dozen==="SECOND")return!0;if(o>24&&o<=36&&r.dozen==="THIRD")return!0;return!1}calculateTotalPayoutAmount(r){return new n(0).add(r.winningBets.straightBets.reduce((o,i)=>o.plus(i.amount.mul(36)),new n(0))).add(r.winningBets.splitBets.reduce((o,i)=>o.plus(i.amount.mul(18)),new n(0))).add(r.winningBets.streetBets.reduce((o,i)=>o.plus(i.amount.mul(12)),new n(0))).add(r.winningBets.cornerBets.reduce((o,i)=>o.plus(i.amount.mul(9)),new n(0))).add(r.winningBets.basketBets.reduce((o,i)=>o.plus(i.amount.mul(7)),new n(0))).add(r.winningBets.doubleStreetBets.reduce((o,i)=>o.plus(i.amount.mul(6)),new n(0))).add(r.winningBets.parityBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.colorBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.halfBets.reduce((o,i)=>o.plus(i.amount.mul(2)),new n(0))).add(r.winningBets.columnBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n(0))).add(r.winningBets.dozenBets.reduce((o,i)=>o.plus(i.amount.mul(3)),new n(0)))}}class Bo extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new Rr,this.americanGame=new dr}determineGameResult(r){let{gameInputs:o,...i}=r;if(r.edge===2.7&&o.type==="EUROPEAN"){let E=this.europeanGame.determineGameResult({...i,gameInputs:o.inputs}),{betOutcomes:A}=E.outputs;return{...E,outputs:{type:"european",betOutcomes:A,result:E.outputs.result}}}if(r.edge===5.3&&o.type==="AMERICAN"){let E=this.americanGame.determineGameResult({...i,gameInputs:o.inputs}),{betOutcomes:A}=E.outputs;return{...E,outputs:{type:"american",betOutcomes:A,result:E.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var hi=(r)=>{if(r.type==="EUROPEAN")U(r.inputs);else P(r.inputs)};import{Big as yo}from"big.js";var M;((E)=>{E.LOW_RISK="LOW_RISK";E.MEDIUM_RISK="MEDIUM_RISK";E.HIGH_RISK="HIGH_RISK"})(M||={});var w;((c)=>{c[c.TEN=10]="TEN";c[c.TWENTY=20]="TWENTY";c[c.THIRTY=30]="THIRTY";c[c.FORTY=40]="FORTY";c[c.FIFTY=50]="FIFTY"})(w||={});var So={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},To={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},xo={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},Go={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Lo={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},Br=new y(new Map([[1,So],[2,To],[3,xo],[4,Go],[8,Lo]]));var Sr={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Co extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:o,edge:i}){if(!Object.values(w).includes(o.segments))throw new Error("Invalid segments value");if(!Object.values(M).includes(o.riskLevel))throw new Error("Invalid risk level");let A=Br.getMultipliers(i)[o.riskLevel];if(A===void 0)throw new Error(`No multipliers found for risk level ${o.riskLevel}`);let c=A[o.segments];if(c===void 0)throw new Error(`No multipliers found for segment ${o.segments}`);let t=Sr[o.riskLevel];if(t===void 0)throw new Error(`No patterns found for risk level ${o.riskLevel}`);let O=t[o.segments];if(O===void 0)throw new Error(`No patterns found for segment ${o.segments}`);let d=r.getRandomInt({min:0,max:O.length-1}),B=O[d.value];if(B===void 0)throw new Error(`No pattern found for segment ${o.segments} and value ${d.value}`);let f=c[B];if(f===void 0)throw new Error(`No payout found for picked segment ${B}`);return{isFinished:!0,payoutMultiplier:new yo(f),outputs:{result:d.values},randomValues:d}}}export{hi as validateRouletteGameInputs,Mo as validateAdvancedDiceInputs,g as plinkoMultipliers,jr as diamondsMultipliers,li as calculateRouletteBetAmount,Hr as calculateBaccaratBetAmount,w as WheelSegments,M as WheelRiskLevel,Co as Wheel,ar as VALID_SUITS,lr as VALID_RANKS,Er as VALID_EUROPEAN_STREETS,I as VALID_EUROPEAN_STRAIGHTS,or as VALID_EUROPEAN_SPLITS,tr as VALID_EUROPEAN_DOUBLE_STREETS,cr as VALID_EUROPEAN_CORNERS,Ar as VALID_AMERICAN_STREETS,rr as VALID_AMERICAN_STRAIGHTS,ir as VALID_AMERICAN_SPLITS,er as VALID_AMERICAN_DOUBLE_STREETS,nr as VALID_AMERICAN_CORNERS,Q as RouletteType,Bo as Roulette,Dr as RollType,$ as RANDOM_MIN_VALUE,j as RANDOM_MAX_VALUE,m as PlinkoRiskLevel,Eo as Plinko,K as Parity,ni as PLINKO_ROW_COUNTS,x as OrigamiGame,br as Mines,Lr as MIN_WIN_CHANCE,yr as MAX_WIN_CHANCE,ur as Limbo,Qr as KenoRiskLevel,Wr as Keno,Z as Half,Gr as GameErrorCode,e as GameError,R as Game,X as EFFECTIVE_RANGE,D as Dozen,Ir as DiceDirection,Jr as Dice,Ur as DiamondsResultType,zr as Diamonds,_ as Column,p as Color,Mr as BaccaratOutcome,wr as BaccaratBetType,hr as Baccarat,Nr as AdvancedDice,J as AMERICAN_BASKET};
1
+ var u;((c)=>{c.DICE="DICE";c.MINES="MINES";c.KENO="KENO";c.LIMBO="LIMBO";c.ADVANCED_DICE="ADVANCED_DICE";c.BACCARAT="BACCARAT";c.DIAMONDS="DIAMONDS";c.PLINKO="PLINKO";c.ROULETTE="ROULETTE";c.WHEEL="WHEEL"})(u||={});class R{gameId;constructor(r){this.gameId=r}getGameResult(r){return this.determineGameResult(r)}}import{Big as H}from"big.js";var Br;((e)=>e.INPUT_VALIDATION_ERROR="INPUT_VALIDATION_ERROR")(Br||={});class E extends Error{static createValidationError(r){return new E("INPUT_VALIDATION_ERROR",r)}static isGameError(r){return r instanceof E}errorCode;constructor(r,e){super(e);this.errorCode=r}}var U=0,P=1e4,z=10001,dr=0.01,sr=98,xr=(r)=>{if(r<U)throw E.createValidationError(`Lower bound ${r} is below minimum allowed value ${U}`)},Sr=(r)=>{if(r>P)throw E.createValidationError(`Upper bound ${r} is above maximum allowed value ${P}`)},b=(r)=>{if(xr(r.lower),Sr(r.upper),r.lower>=r.upper)throw E.createValidationError(`Lower bound ${r.lower} must be less than ${r.upper}`)},Ir=(r,e)=>{let[t,o]=r.lower<=e.lower?[r,e]:[e,r];if(t.upper>o.lower)throw E.createValidationError("Bounds must not overlap")},Tr=(r,e)=>e>=r.lower&&e<=r.upper,mr=(r)=>r.upper-r.lower+1,v=(r,e)=>e>r.lower&&e<r.upper,h=(r)=>r.upper-r.lower-1,Gr;((o)=>{o.ROLL_BETWEEN="ROLL_BETWEEN";o.ROLL_OUTSIDE="ROLL_OUTSIDE";o.ROLL_BETWEEN_TWO="ROLL_BETWEEN_TWO"})(Gr||={});var q=(r)=>{let t=(()=>{switch(r.mode){case"ROLL_BETWEEN":return b(r.bounds),h(r.bounds);case"ROLL_OUTSIDE":return b(r.bounds),z-mr(r.bounds);case"ROLL_BETWEEN_TWO":return b(r.firstBounds),b(r.secondBounds),Ir(r.firstBounds,r.secondBounds),h(r.firstBounds)+h(r.secondBounds)}})(),o=H(t).div(z).mul(100);if(o.lt(dr))throw E.createValidationError("Win chance too low");if(o.gt(sr))throw E.createValidationError("Win chance too high");return o},Ve=(r)=>{q(r)};class Cr extends R{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=q(t),i=r.getRandomInt({min:U,max:P}),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(t.mode){case"ROLL_BETWEEN":return v(t.bounds,n);case"ROLL_OUTSIDE":return!Tr(t.bounds,n);case"ROLL_BETWEEN_TWO":return v(t.firstBounds,n)||v(t.secondBounds,n)}})()?new H(100-e).div(o):new H(0),outputs:{result:i.values},randomValues:i}}}import C from"big.js";var Lr=["Clubs","Diamonds","Hearts","Spades"],yr=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Kr;((o)=>{o.PLAYER_WIN="PLAYER_WIN";o.TIE="TIE";o.BANKER_WIN="BANKER_WIN"})(Kr||={});var Zr;((o)=>{o.PLAYER="PLAYER";o.TIE="TIE";o.BANKER="BANKER"})(Zr||={});var _r={["PLAYER_WIN"]:{betType:"PLAYER",multiplier:2},["TIE"]:{betType:"TIE",multiplier:8},["BANKER_WIN"]:{betType:"BANKER",multiplier:1.95}},Dr=(r)=>{return new C(0).add(r.bets.reduce((t,o)=>t.add(o.amount),new C(0)))};class br extends R{constructor(){super("BACCARAT")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(t!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let o=r.getRandomIntsWithReplacement({min:0,max:51,count:6}),i=o.values,n=i.slice(0,3),a=i.slice(3,6),l=[],A=0;for(let f of n.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);l.push(d),A=(A+D)%10}let p=[],c=0;for(let f of a.slice(0,2)){let d=this.mapRandomValueToCard(f),D=this.mapRandomValueToCardValue(f);p.push(d),c=(c+D)%10}if(!this.isNaturalWin(A,c)){let f=this.shouldDrawThirdPlayerCard(A),d=null;if(f)d=this.mapRandomValueToCardValue(n[2]),l.push(this.mapRandomValueToCard(n[2])),A=(A+d)%10;if(this.shouldDrawThirdBankerCard(c,d))p.push(this.mapRandomValueToCard(a[2])),c=(c+this.mapRandomValueToCardValue(a[2]))%10}let O;if(A===c)O="TIE";else O=A>c?"PLAYER_WIN":"BANKER_WIN";let B=Dr(e),{betType:_,multiplier:fr}=_r[O],ur=new C(0).add(e.bets.filter((f)=>f.type===_).reduce((f,d)=>f.add(d.amount.mul(fr)),new C(0)));return{isFinished:!0,payoutMultiplier:B.gt(0)?ur.div(B):new C(0),outputs:{playerCards:l,playerHandValue:A,bankerCards:p,bankerHandValue:c,gameOutcome:O,result:o.values},randomValues:o}}validateGameInputs(r){if(r.bets.length===0)throw new Error("Must place at least a single bet.");if(!r.bets.every((e)=>e.amount.gte(0)))throw new Error("Invalid bet.")}mapRandomValueToCard(r){let e=Lr[Math.floor(r/13)],t=yr[r%13];return{suit:e,rank:t}}isNaturalWin(r,e){let t=[8,9];return t.includes(r)||t.includes(e)}mapRandomValueToCardValue(r){let e=r%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(r){return r<=5}shouldDrawThirdBankerCard(r,e){if(e===null)return r<=5;if(r<=2)return!0;if(r===3)return e!==8;if(r===4)return[2,3,4,5,6,7].includes(e);if(r===5)return[4,5,6,7].includes(e);if(r===6)return[6,7].includes(e);return!1}}import Nr from"big.js";class s{multipliers;constructor(r){this.multipliers=r}getMultipliers(r){let e=this.multipliers.get(r);if(e===void 0)throw new Error(`Multipliers for ${r} not found`);return e}getAllMultipliers(){return Array.from(this.multipliers.entries()).map(([r,e])=>({edge:r,multipliers:e}))}}var Mr;((a)=>{a.PAIR="PAIR";a.TWO_PAIR="TWO_PAIR";a.THREE_OF_A_KIND="THREE_OF_A_KIND";a.FULL_HOUSE="FULL_HOUSE";a.FOUR_OF_A_KIND="FOUR_OF_A_KIND";a.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(Mr||={});var Vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4.3,FOUR_OF_A_KIND:5,FIVE_OF_A_KIND:50},wr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},vr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.7,FOUR_OF_A_KIND:4.6,FIVE_OF_A_KIND:50},hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:3.4,FOUR_OF_A_KIND:4.4,FIVE_OF_A_KIND:50},Hr={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:2.8,FULL_HOUSE:3.2,FOUR_OF_A_KIND:3.6,FIVE_OF_A_KIND:50},Ur=new s(new Map([[1,Vr],[2,wr],[3,vr],[4,hr],[8,Hr]])),Pr={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class Fr extends R{constructor(){super("DIAMONDS")}determineGameResult({generator:r,edge:e}){let t=r.getRandomIntsWithReplacement({min:0,max:6,count:5}),o=Ur.getMultipliers(e),i=t.values,n=this.calculatePayoutMultiplier(o,i);return{isFinished:!0,payoutMultiplier:Nr(n),outputs:{result:t.values},randomValues:t}}calculatePayoutMultiplier(r,e){let t=new Map;for(let n of e){let a=t.get(n)||0;t.set(n,a+1)}let o=[...t.values()].filter((n)=>n>1),i=this.classifyResult(o);return i===null?0:r[i]}classifyResult(r){if(r.length>2)throw new Error(`Unexpected number of repeats ${r.length}`);let[e,t]=r;if(e===void 0)return null;if(t===void 0){let o=Pr[e];if(o===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return o}return e===3||t===3?"FULL_HOUSE":"TWO_PAIR"}}import F from"big.js";var Yr;((t)=>{t.ABOVE="ABOVE";t.BELOW="BELOW"})(Yr||={});class kr extends R{constructor(){super("DICE")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:0,max:1e4}),i=o.min,l=o.max-i+1-1,A=t.direction==="ABOVE"?l-t.selectedValue:t.selectedValue,p=new F(A).div(l).mul(100);return{isFinished:!0,payoutMultiplier:(t.direction==="ABOVE"?o.value>t.selectedValue:o.value<t.selectedValue)?new F(100-e).div(p):new F(0),outputs:{result:o.values},randomValues:o}}}import J from"big.js";var $r;((i)=>{i.CLASSIC="CLASSIC";i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})($r||={});var jr={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class zr extends R{multiplierOverrides;get multipliers(){return this.multiplierOverrides??jr}constructor(r){super("KENO");this.multiplierOverrides=r;if(r)this.validateMultiplierOverrides(r)}determineGameResult({generator:r,edge:e,gameInputs:t}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(t.selectedNumbers.length===0)throw new Error("No numbers selected");if(t.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let a of t.selectedNumbers){if(a%1!==0)throw new Error("Only integers can be selected");if(a<0||a>39)throw new Error("Invalid number selected")}let o=r.getUniqueRandomInts({min:0,max:39,count:10}),i=t.selectedNumbers.filter((a)=>o.values.includes(a));return{isFinished:!0,payoutMultiplier:i.length>0?new J(this.multipliers[t.selectedNumbers.length][t.riskLevel][i.length]??0):new J(0),outputs:{result:o.values},randomValues:o}}validateMultiplierOverrides(r){for(let[e,t]of Object.entries(r)){let o=Number(e);for(let[i,n]of Object.entries(t))if(n.length!==o+1)throw new Error(`Invalid count of multipliers for tiles ${o} and risk level ${i}. Expected ${o+1}, but got ${n.length}`)}}}import x from"big.js";var Q=(r,e)=>{return r.gt(e)?r:e};var X=(r,e)=>{return r.lt(e)?r:e};class qr extends R{constructor(){super("LIMBO")}determineGameResult({generator:r,edge:e,gameInputs:t}){let o=r.getRandomInt({min:1,max:4294967295}),i=o.max,n=new x(16777216),a=new x(1),l=new x(1e6),A=o.value,p=new x(A-1).div(i),c=(100-e)/100,O=n.div(p.mul(n).plus(1)).mul(c),B=Q(a,X(O,l));return{isFinished:!0,payoutMultiplier:B.gte(t.targetMultiplier)?new x(t.targetMultiplier):new x(0),outputs:{randomMultiplier:B,result:o.values},randomValues:o}}}import N from"big.js";var Y=(r,e)=>{if(e<0||r<0||e>r)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>r-e)e=r-e;let t=1;for(let o=1;o<=e;o++)t=t*(r-o+1)/o;return t};class Jr extends R{constructor(){super("MINES")}determineGameResult({generator:r,edge:e,gameInputs:t}){if(t.minesCount<=0||t.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(t.selectedTiles.length>25-t.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let a=r.getUniqueRandomInts({min:1,max:25,count:t.minesCount}),l=a.values.some((_)=>t.selectedTiles.includes(_)),A=t.hasCashedOut||l,p=(100-e)/100,c=new N(Y(25-t.minesCount,t.selectedTiles.length)).div(new N(Y(25,t.selectedTiles.length))),B=t.hasCashedOut&&!l?new N(p).div(c):new N(0);return{isFinished:A,payoutMultiplier:B,outputs:{result:a.values},randomValues:a}}}import{Big as ee}from"big.js";var W;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(W||={});var pt=[8,9,10,11,12,13,14,15,16],Qr={LOW_RISK:{8:[6,2.1,1.1,1,0.5,1,1.1,2.1,6],9:[6,2,1.6,1,0.7,0.7,1,1.6,2,6],10:[9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,9],11:[8,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8],12:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],13:[8,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8],14:[7,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7],15:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],16:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16]},MEDIUM_RISK:{8:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],9:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],10:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],11:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],12:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],13:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],14:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],15:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],16:[110,41.1,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41.1,110]},HIGH_RISK:{8:[29,4,1.5,0.3,0.2,0.3,1.5,4,29],9:[43,7,2,0.6,0.2,0.2,0.6,2,7,43],10:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76],11:[120,13.9,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,13.9,120],12:[170,23.8,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,23.8,170],13:[260,36.7,11,4,1,0.2,0.2,0.2,0.2,1,4,11,36.7,260],14:[420,56.1,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56.1,420],15:[620,82.8,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,82.8,620],16:[1000,129.9,26.1,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26.1,129.9,1000]}},Xr={LOW_RISK:{8:[6,1.9,1.1,1,0.5,1,1.1,1.9,6],9:[6,1.7,1.6,1,0.7,0.7,1,1.6,1.7,6],10:[9,2.5,1.4,1.1,1,0.5,1,1.1,1.4,2.5,9],11:[9,2.5,1.8,1.3,1,0.7,0.7,1,1.3,1.8,2.5,9],12:[10,3.2,1.6,1.3,1.1,1,0.5,1,1.1,1.3,1.6,3.2,10],13:[8,3.7,2.9,1.8,1.2,0.9,0.7,0.7,0.9,1.2,1.8,2.9,3.7,8],14:[7,4,1.8,1.2,1.3,1.1,1,0.5,1,1.1,1.3,1.2,1.8,4,7],15:[15,7.6,2.8,2,1.4,1.1,1,0.7,0.7,1,1.1,1.4,2,2.8,7.6,15],16:[16,9,1.7,1.2,1.3,1.2,1.1,1,0.5,1,1.1,1.2,1.3,1.2,1.7,9,16]},MEDIUM_RISK:{8:[13,3.2,1.4,0.6,0.4,0.6,1.4,3.2,13],9:[18,3.7,1.7,0.9,0.5,0.5,0.9,1.7,3.7,18],10:[22,5,1.9,1.4,0.6,0.4,0.6,1.4,1.9,5,22],11:[24,6,2.8,1.8,0.7,0.5,0.5,0.7,1.8,2.8,6,24],12:[33,11.1,4,1.9,1.1,0.6,0.3,0.6,1.1,1.9,4,11.1,33],13:[43,13.7,6.1,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,6.1,13.7,43],14:[58,13.7,6.7,3.9,1.9,1,0.5,0.2,0.5,1,1.9,3.9,6.7,13.7,58],15:[88,17.7,10.8,5,2.9,1.3,0.5,0.3,0.3,0.5,1.3,2.9,5,10.8,17.7,88],16:[110,40.5,9.8,4.8,2.9,1.5,1,0.5,0.3,0.5,1,1.5,2.9,4.8,9.8,40.5,110]},HIGH_RISK:{8:[29,3.8,1.5,0.3,0.2,0.3,1.5,3.8,29],9:[43,7.1,1.9,0.6,0.2,0.2,0.6,1.9,7.1,43],10:[76,9.9,2.9,0.9,0.3,0.2,0.3,0.9,2.9,9.9,76],11:[120,13.4,5.1,1.4,0.4,0.2,0.2,0.4,1.4,5.1,13.4,120],12:[170,23.2,7.9,2,0.7,0.2,0.2,0.2,0.7,2,7.9,23.2,170],13:[260,36.6,10.5,4,1,0.2,0.2,0.2,0.2,1,4,10.5,36.6,260],14:[420,55.5,17.6,4.9,1.9,0.3,0.2,0.2,0.2,0.3,1.9,4.9,17.6,55.5,420],15:[620,82.3,26.8,7.7,3,0.5,0.2,0.2,0.2,0.2,0.5,3,7.7,26.8,82.3,620],16:[1000,129.8,25.2,8.6,4,2,0.2,0.2,0.2,0.2,0.2,2,4,8.6,25.2,129.8,1000]}},Wr={LOW_RISK:{8:[6,2.2,1.1,1,0.4,1,1.1,2.2,6],9:[6,1.8,1.5,1,0.7,0.7,1,1.5,1.8,6],10:[9,2.4,1.3,1.1,1,0.5,1,1.1,1.3,2.4,9],11:[8,2.7,1.9,1.2,1,0.7,0.7,1,1.2,1.9,2.7,8],12:[10,3.3,1.6,1.2,1.1,1,0.5,1,1.1,1.2,1.6,3.3,10],13:[8,3.8,2.9,1.9,1.1,0.9,0.7,0.7,0.9,1.1,1.9,2.9,3.8,8],14:[7,3.9,2,1.4,1.3,1.1,1,0.4,1,1.1,1.3,1.4,2,3.9,7],15:[15,7.9,2.5,2,1.3,1.1,1,0.7,0.7,1,1.1,1.3,2,2.5,7.9,15],16:[16,8.9,1.9,1.4,1.4,1.2,1.1,1,0.4,1,1.1,1.2,1.4,1.4,1.9,8.9,16]},MEDIUM_RISK:{8:[13,3.5,1.2,0.7,0.3,0.7,1.2,3.5,13],9:[18,3.8,1.6,0.9,0.5,0.5,0.9,1.6,3.8,18],10:[22,5.2,2,1.3,0.6,0.4,0.6,1.3,2,5.2,22],11:[24,5.6,2.7,1.8,0.7,0.5,0.5,0.7,1.8,2.7,5.6,24],12:[33,11.3,4,1.8,1.1,0.6,0.3,0.6,1.1,1.8,4,11.3,33],13:[43,12.9,5.7,2.8,1.3,0.7,0.4,0.4,0.7,1.3,2.8,5.7,12.9,43],14:[58,13.7,6.9,3.9,1.8,1,0.5,0.2,0.5,1,1.8,3.9,6.9,13.7,58],15:[88,18,10.9,4.9,2.8,1.3,0.5,0.3,0.3,0.5,1.3,2.8,4.9,10.9,18,88],16:[110,39.9,9.9,5,2.9,1.4,1,0.5,0.3,0.5,1,1.4,2.9,5,9.9,39.9,110]},HIGH_RISK:{8:[29,4,1.4,0.3,0.2,0.3,1.4,4,29],9:[43,7.3,2,0.5,0.2,0.2,0.5,2,7.3,43],10:[76,9.8,2.8,0.9,0.3,0.2,0.3,0.9,2.8,9.8,76],11:[120,13.5,4.9,1.4,0.4,0.2,0.2,0.4,1.4,4.9,13.5,120],12:[170,23.3,7.9,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.9,23.3,170],13:[260,36.2,10.4,3.9,1,0.2,0.2,0.2,0.2,1,3.9,10.4,36.2,260],14:[420,54.8,17.9,4.9,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.9,17.9,54.8,420],15:[620,81.9,26.6,7.7,2.9,0.5,0.2,0.2,0.2,0.2,0.5,2.9,7.7,26.6,81.9,620],16:[1000,130,24.9,8.4,3.9,2,0.2,0.2,0.2,0.2,0.2,2,3.9,8.4,24.9,130,1000]}},gr={LOW_RISK:{8:[6,2,1.1,1,0.4,1,1.1,2,6],9:[6,1.9,1.4,1,0.7,0.7,1,1.4,1.9,6],10:[9,2.8,1.1,1.1,1,0.5,1,1.1,1.1,2.8,9],11:[8,2.7,1.7,1.2,1,0.7,0.7,1,1.2,1.7,2.7,8],12:[10,2.7,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,2.7,10],13:[8,3.5,2.8,1.9,1.3,0.9,0.6,0.6,0.9,1.3,1.9,2.8,3.5,8],14:[7,3.3,1.6,1.3,1.3,1.1,1,0.4,1,1.1,1.3,1.3,1.6,3.3,7],15:[15,8,2.9,2,1.4,1.2,1,0.6,0.6,1,1.2,1.4,2,2.9,8,15],16:[16,9.1,2.2,1.4,1.2,1.2,1.1,1,0.4,1,1.1,1.2,1.2,1.4,2.2,9.1,16]},MEDIUM_RISK:{8:[13,2.9,1.2,0.7,0.4,0.7,1.2,2.9,13],9:[18,3.5,1.6,0.9,0.5,0.5,0.9,1.6,3.5,18],10:[22,4.7,2,1.3,0.6,0.4,0.6,1.3,2,4.7,22],11:[24,5.7,2.5,1.8,0.7,0.5,0.5,0.7,1.8,2.5,5.7,24],12:[33,10.7,3.8,1.8,1.1,0.6,0.3,0.6,1.1,1.8,3.8,10.7,33],13:[43,12.6,5.6,2.7,1.3,0.7,0.4,0.4,0.7,1.3,2.7,5.6,12.6,43],14:[58,13.7,6.4,3.8,1.8,1,0.5,0.2,0.5,1,1.8,3.8,6.4,13.7,58],15:[88,17.7,10.7,4.9,2.7,1.3,0.5,0.3,0.3,0.5,1.3,2.7,4.9,10.7,17.7,88],16:[110,39.7,9.6,4.8,2.8,1.4,1,0.5,0.3,0.5,1,1.4,2.8,4.8,9.6,39.7,110]},HIGH_RISK:{8:[29,3.9,1.4,0.3,0.2,0.3,1.4,3.9,29],9:[43,6.9,1.8,0.6,0.2,0.2,0.6,1.8,6.9,43],10:[76,9.8,2.7,0.9,0.3,0.2,0.3,0.9,2.7,9.8,76],11:[120,13.1,5.1,1.3,0.4,0.2,0.2,0.4,1.3,5.1,13.1,120],12:[170,22.7,7.7,1.9,0.7,0.2,0.2,0.2,0.7,1.9,7.7,22.7,170],13:[260,35.9,10.3,3.8,1,0.2,0.2,0.2,0.2,1,3.8,10.3,35.9,260],14:[420,54.2,17.5,4.8,1.8,0.3,0.2,0.2,0.2,0.3,1.8,4.8,17.5,54.2,420],15:[620,80.6,26.1,7.8,2.8,0.5,0.2,0.2,0.2,0.2,0.5,2.8,7.8,26.1,80.6,620],16:[1000,129.7,24.7,8.2,3.8,2,0.2,0.2,0.2,0.2,0.2,2,3.8,8.2,24.7,129.7,1000]}},re={LOW_RISK:{8:[5,1.8,1,1,0.4,1,1,1.8,5],9:[5,1.7,1.2,1,0.7,0.7,1,1.2,1.7,5],10:[9,2.8,1.2,1,1,0.4,1,1,1.2,2.8,9],11:[8,2.5,1.6,1,1,0.7,0.7,1,1,1.6,2.5,8],12:[10,2.5,1.3,1.3,1,1,0.4,1,1,1.3,1.3,2.5,10],13:[8,4.1,2.8,1.8,1.1,0.9,0.6,0.6,0.9,1.1,1.8,2.8,4.1,8],14:[7,3.3,1.7,1.2,1.2,1,1,0.4,1,1,1.2,1.2,1.7,3.3,7],15:[15,7.3,2.9,1.9,1.4,1,1,0.6,0.6,1,1,1.4,1.9,2.9,7.3,15],16:[16,8.7,2,1.5,1.3,1,1.1,1,0.3,1,1.1,1,1.3,1.5,2,8.7,16]},MEDIUM_RISK:{8:[13,2.6,1.1,0.7,0.4,0.7,1.1,2.6,13],9:[17,3.3,1.4,0.9,0.5,0.5,0.9,1.4,3.3,17],10:[21,4.1,1.7,1.3,0.6,0.4,0.6,1.3,1.7,4.1,21],11:[23,5.6,2.4,1.6,0.7,0.5,0.5,0.7,1.6,2.4,5.6,23],12:[32,10.2,3.7,1.7,1.1,0.6,0.2,0.6,1.1,1.7,3.7,10.2,32],13:[42,11.7,5.3,2.5,1.2,0.7,0.4,0.4,0.7,1.2,2.5,5.3,11.7,42],14:[56,13.2,5.9,3.6,1.6,1,0.5,0.2,0.5,1,1.6,3.6,5.9,13.2,56],15:[86,17.3,10,4.6,2.6,1.2,0.5,0.3,0.3,0.5,1.2,2.6,4.6,10,17.3,86],16:[107,39,9.9,4.5,2.4,1.3,1,0.5,0.3,0.5,1,1.3,2.4,4.5,9.9,39,107]},HIGH_RISK:{8:[28,3.3,1.4,0.3,0.2,0.3,1.4,3.3,28],9:[42,6.7,1.6,0.6,0.2,0.2,0.6,1.6,6.7,42],10:[74,9.6,2.6,0.9,0.3,0.1,0.3,0.9,2.6,9.6,74],11:[116,12.7,4.8,1.2,0.4,0.2,0.2,0.4,1.2,4.8,12.7,116],12:[165,20.9,7.2,1.8,0.7,0.2,0.2,0.2,0.7,1.8,7.2,20.9,165],13:[252,33.9,10.1,3.4,1,0.2,0.2,0.2,0.2,1,3.4,10.1,33.9,252],14:[407,51.9,16.3,4.6,1.7,0.3,0.2,0.2,0.2,0.3,1.7,4.6,16.3,51.9,407],15:[600,76.9,24.9,7.4,2.6,0.5,0.2,0.2,0.2,0.2,0.5,2.6,7.4,24.9,76.9,600],16:[1000,122,24.5,8,3.7,1.8,0.2,0.2,0.2,0.2,0.2,1.8,3.7,8,24.5,122,1000]}},g=new s(new Map([[1,Qr],[2,Xr],[3,Wr],[4,gr],[8,re]]));class te extends R{constructor(){super("PLINKO")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let o=e.numberOfRows,a=g.getMultipliers(t)[e.riskLevel][o],l=r.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),p=l.values.reduce((O,B)=>O+B,0),c=a[p];if(c===void 0)throw new Error(`No payout found for end position ${p}`);return{isFinished:!0,payoutMultiplier:ee(c),outputs:{result:l.values},randomValues:l}}}import{Big as w}from"big.js";var k=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],rr=[37,...k],er=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],tr=[[0,1],[0,2],[0,37],[2,37],[3,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],or=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],ir=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],nr=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ar=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],Er=[0,1,2,3,37],cr=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],Ar=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],S;((t)=>{t.EVEN="EVEN";t.ODD="ODD"})(S||={});var I;((t)=>{t.RED="RED";t.BLACK="BLACK"})(I||={});var T;((t)=>{t.LOW="LOW";t.HIGH="HIGH"})(T||={});var m;((o)=>{o.TOP="TOP";o.MIDDLE="MIDDLE";o.BOTTOM="BOTTOM"})(m||={});var G;((o)=>{o.FIRST="FIRST";o.SECOND="SECOND";o.THIRD="THIRD"})(G||={});var $;((t)=>{t.AMERICAN="AMERICAN";t.EUROPEAN="EUROPEAN"})($||={});var M=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&L(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&oe(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ie(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&ne(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&ae(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},L=(r)=>{return k.includes(r)},oe=(r)=>{if(r.length!==2)return!1;if(!r.every(L))return!1;return er.some(([e,t])=>e===r[0]&&t===r[1])},ie=(r)=>{if(r.length!==3)return!1;if(!r.every(L))return!1;return or.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},ne=(r)=>{if(r.length!==4)return!1;if(!r.every(L))return!1;return nr.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},ae=(r)=>{if(r.length!==6)return!1;if(!r.every(L))return!1;return cr.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var V=(r)=>{if(r.straightBets.length===0&&r.splitBets.length===0&&r.streetBets.length===0&&r.cornerBets.length===0&&r.basketBets.length===0&&r.doubleStreetBets.length===0&&r.parityBets.length===0&&r.colorBets.length===0&&r.halfBets.length===0&&r.columnBets.length===0&&r.dozenBets.length===0)throw E.createValidationError("Must place at least a single bet.");if(!r.straightBets.every((e)=>e.amount.gte(0)&&y(e.value)))throw E.createValidationError("Invalid straight bet.");if(!r.splitBets.every((e)=>e.amount.gte(0)&&Ee(e.values)))throw E.createValidationError("Invalid split bet.");if(!r.streetBets.every((e)=>e.amount.gte(0)&&ce(e.values)))throw E.createValidationError("Invalid street bet.");if(!r.cornerBets.every((e)=>e.amount.gte(0)&&Ae(e.values)))throw E.createValidationError("Invalid corner bet.");if(!r.basketBets.every((e)=>e.amount.gte(0)))throw E.createValidationError("Invalid basket bet.");if(!r.doubleStreetBets.every((e)=>e.amount.gte(0)&&le(e.values)))throw E.createValidationError("Invalid double street bet.");if(!r.parityBets.every((e)=>e.amount.gte(0)&&Object.values(S).includes(e.parity)))throw E.createValidationError("Invalid parity bet.");if(!r.colorBets.every((e)=>e.amount.gte(0)&&Object.values(I).includes(e.color)))throw E.createValidationError("Invalid color bet.");if(!r.halfBets.every((e)=>e.amount.gte(0)&&Object.values(T).includes(e.half)))throw E.createValidationError("Invalid half bet.");if(!r.columnBets.every((e)=>e.amount.gte(0)&&Object.values(m).includes(e.column)))throw E.createValidationError("Invalid column bet.");if(!r.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(G).includes(e.dozen)))throw E.createValidationError("Invalid dozen bet.")},y=(r)=>{return rr.includes(r)};function Ee(r){if(r.length!==2)return!1;if(!r.every(y))return!1;return tr.some(([e,t])=>e===r[0]&&t===r[1])}var ce=(r)=>{if(r.length!==3)return!1;if(!r.every(y))return!1;return ir.some(([e,t,o])=>e===r[0]&&t===r[1]&&o===r[2])},Ae=(r)=>{if(r.length!==4)return!1;if(!r.every(y))return!1;return ar.some(([e,t,o,i])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3])},le=(r)=>{if(r.length!==6)return!1;if(!r.every(y))return!1;return Ar.some(([e,t,o,i,n,a])=>e===r[0]&&t===r[1]&&o===r[2]&&i===r[3]&&n===r[4]&&a===r[5])};var Re={straightBets:36,splitBets:18,streetBets:12,cornerBets:9,basketBets:7,doubleStreetBets:6,parityBets:2,colorBets:2,halfBets:2,columnBets:3,dozenBets:3},pe=[3,6,9,12,15,18,21,24,27,30,33,36],Oe=[2,5,8,11,14,17,20,23,26,29,32,35],fe=[1,4,7,10,13,16,19,22,25,28,31,34],ue=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],Be=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35],de=2.7,se=5.3;class j extends R{constructor(){super("ROULETTE")}determineGameResult({generator:r,gameInputs:e}){this.validateInputs(e);let t=r.getRandomInt({min:0,max:this.maxNumber}),o=t.value,i=this.determineBetOutcomes(e,o),n=this.getBetTotals(e),a=this.getBetTotals(i.winningBets),l=this.calculateTotalBetAmount(n),A=this.calculateTotalPayout(a),p=l.gt(0)?A.div(l):new w(0);return{outputs:{betOutcomes:i,result:t.values},payoutMultiplier:p,isFinished:!0,randomValues:t}}determineBetOutcomes(r,e){let t={},o={};for(let i of Object.keys(r)){let n=r[i],a=this.betPredicates[i],{winning:l,losing:A}=this.partitionBets(n,a,e);t[i]=l,o[i]=A}return{winningBets:t,losingBets:o}}partitionBets(r,e,t){return{winning:r.filter((o)=>e(o,t)),losing:r.filter((o)=>!e(o,t))}}calculateTotalAmount(r){return r.reduce((e,t)=>e.plus(t.amount),new w(0))}isWinningStraightBet(r,e){return r.value===e}isWinningSplitBet(r,e){return r.values.some((t)=>t===e)}isWinningStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningCornerBet(r,e){return r.values.some((t)=>t===e)}isWinningDoubleStreetBet(r,e){return r.values.some((t)=>t===e)}isWinningColorBet(r,e){let t=r;return ue.includes(e)&&t.color==="RED"||Be.includes(e)&&t.color==="BLACK"}isWinningHalfBet(r,e){let t=r;if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(r,e){let t=r;return pe.includes(e)&&t.column==="TOP"||Oe.includes(e)&&t.column==="MIDDLE"||fe.includes(e)&&t.column==="BOTTOM"}isWinningDozenBet(r,e){let t=r;if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}isWinningParityBet(r,e){let t=r;if(e===0||e===37)return!1;let o=e%2===0?"EVEN":"ODD";return t.parity===o}getBetTotals(r){let e={};for(let t of Object.keys(r))e[t]=this.calculateTotalAmount(r[t]);return e}calculateTotalPayout(r){return Object.entries(r).reduce((e,[t,o])=>{let n=Re[t];return e.plus(o.mul(n||0))},new w(0))}calculateTotalBetAmount(r){return Object.values(r).reduce((e,t)=>e.plus(t),new w(0))}}class lr extends j{maxNumber=36;validateInputs(r){M(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet}}class Rr extends j{maxNumber=37;validateInputs(r){V(r)}betPredicates={straightBets:this.isWinningStraightBet,splitBets:this.isWinningSplitBet,streetBets:this.isWinningStreetBet,cornerBets:this.isWinningCornerBet,basketBets:this.isWinningBasketBet,doubleStreetBets:this.isWinningDoubleStreetBet,parityBets:this.isWinningParityBet,colorBets:this.isWinningColorBet,halfBets:this.isWinningHalfBet,columnBets:this.isWinningColumnBet,dozenBets:this.isWinningDozenBet};isWinningBasketBet(r,e){return Er.some((t)=>t===e)}}class xe extends R{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new lr,this.americanGame=new Rr}determineGameResult(r){let{gameInputs:e,...t}=r;if(r.edge===de&&e.type==="EUROPEAN"){let o=this.europeanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"european",betOutcomes:i,result:o.outputs.result}}}if(r.edge===se&&e.type==="AMERICAN"){let o=this.americanGame.determineGameResult({...t,gameInputs:e.inputs}),{betOutcomes:i}=o.outputs;return{...o,outputs:{type:"american",betOutcomes:i,result:o.outputs.result}}}throw new Error("Only European & American Roulette games are supported")}}var ht=(r)=>{if(r.type==="EUROPEAN")M(r.inputs);else V(r.inputs)};import{Big as Ce}from"big.js";var K;((o)=>{o.LOW_RISK="LOW_RISK";o.MEDIUM_RISK="MEDIUM_RISK";o.HIGH_RISK="HIGH_RISK"})(K||={});var Z;((n)=>{n[n.TEN=10]="TEN";n[n.TWENTY=20]="TWENTY";n[n.THIRTY=30]="THIRTY";n[n.FORTY=40]="FORTY";n[n.FIFTY=50]="FIFTY"})(Z||={});var Se={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.5},20:{ZERO:0,A:1.2,B:1.5},30:{ZERO:0,A:1.2,B:1.5},40:{ZERO:0,A:1.2,B:1.5},50:{ZERO:0,A:1.2,B:1.5}},MEDIUM_RISK:{10:{ZERO:0,A:1.5,B:1.9,C:2,D:3},20:{ZERO:0,A:1.5,B:1.8,C:2,D:3},30:{ZERO:0,A:1.5,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:3},50:{ZERO:0,A:1.5,B:2,C:3,D:5}},HIGH_RISK:{10:{ZERO:0,A:9.9},20:{ZERO:0,A:19.8},30:{ZERO:0,A:29.7},40:{ZERO:0,A:39.6},50:{ZERO:0,A:49.5}}},Ie={LOW_RISK:{10:{ZERO:0,A:1.2,B:1.4},20:{ZERO:0,A:1.2,B:1.4},30:{ZERO:0,A:1.2,B:1.4},40:{ZERO:0,A:1.2,B:1.4},50:{ZERO:0,A:1.2,B:1.4}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3.1},20:{ZERO:0,A:1.5,B:1.8,C:1.9,D:3.4},30:{ZERO:0,A:1.5,B:1.7,C:1.9,D:3,E:4.3},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.9},50:{ZERO:0,A:1.5,B:2,C:3,D:4.5}},HIGH_RISK:{10:{ZERO:0,A:9.8},20:{ZERO:0,A:19.6},30:{ZERO:0,A:29.4},40:{ZERO:0,A:39.2},50:{ZERO:0,A:49}}},Te={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.65},20:{ZERO:0,A:1.15,B:1.65},30:{ZERO:0,A:1.15,B:1.65},40:{ZERO:0,A:1.15,B:1.65},50:{ZERO:0,A:1.15,B:1.65}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.9,C:2,D:3},20:{ZERO:0,A:1.4,B:1.6,C:2,D:3},30:{ZERO:0,A:1.4,B:1.7,C:2,D:3,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.8},50:{ZERO:0,A:1.5,B:2,C:2.7,D:4.9}},HIGH_RISK:{10:{ZERO:0,A:9.7},20:{ZERO:0,A:19.4},30:{ZERO:0,A:29.1},40:{ZERO:0,A:38.8},50:{ZERO:0,A:48.5}}},me={LOW_RISK:{10:{ZERO:0,A:1.15,B:1.55},20:{ZERO:0,A:1.15,B:1.55},30:{ZERO:0,A:1.15,B:1.55},40:{ZERO:0,A:1.15,B:1.55},50:{ZERO:0,A:1.15,B:1.55}},MEDIUM_RISK:{10:{ZERO:0,A:1.4,B:1.8,C:2,D:3},20:{ZERO:0,A:1.3,B:1.5,C:2,D:3},30:{ZERO:0,A:1.4,B:1.6,C:2,D:2.9,E:4},40:{ZERO:0,A:1.5,B:1.6,C:2,D:2.7},50:{ZERO:0,A:1.5,B:2,C:2.6,D:4.8}},HIGH_RISK:{10:{ZERO:0,A:9.6},20:{ZERO:0,A:19.2},30:{ZERO:0,A:28.8},40:{ZERO:0,A:38.4},50:{ZERO:0,A:48}}},Ge={LOW_RISK:{10:{ZERO:0,A:1.1,B:1.5},20:{ZERO:0,A:1.1,B:1.5},30:{ZERO:0,A:1.1,B:1.45},40:{ZERO:0,A:1.1,B:1.45},50:{ZERO:0,A:1.1,B:1.45}},MEDIUM_RISK:{10:{ZERO:0,A:1.3,B:1.7,C:1.9,D:3},20:{ZERO:0,A:1.3,B:1.4,C:1.9,D:3},30:{ZERO:0,A:1.3,B:1.7,C:1.9,D:2.8,E:3.8},40:{ZERO:0,A:1.4,B:1.8,C:1.9,D:2.6},50:{ZERO:0,A:1.4,B:1.9,C:2.6,D:4.6}},HIGH_RISK:{10:{ZERO:0,A:9.2},20:{ZERO:0,A:18.4},30:{ZERO:0,A:27.6},40:{ZERO:0,A:36.8},50:{ZERO:0,A:46}}},pr=new s(new Map([[1,Se],[2,Ie],[3,Te],[4,me],[8,Ge]]));var Or={LOW_RISK:{10:["B","A","A","A","ZERO","A","A","A","A","ZERO"],20:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],30:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],40:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"],50:["B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO","B","A","A","A","ZERO","A","A","A","A","ZERO"]},MEDIUM_RISK:{10:["ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","D"],20:["A","ZERO","C","ZERO","B","ZERO","C","ZERO","C","ZERO","A","ZERO","C","ZERO","C","ZERO","D","ZERO","C","ZERO"],30:["A","ZERO","C","ZERO","A","ZERO","C","ZERO","D","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","C","ZERO","E","ZERO","A","ZERO","C","ZERO"],40:["C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO","C","ZERO","A","ZERO","D","ZERO","C","ZERO","A","ZERO"],50:["A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","C","ZERO","A","ZERO","B","ZERO","A","ZERO","B","ZERO","A","ZERO","D","ZERO","A","ZERO","B","ZERO","A","ZERO"]},HIGH_RISK:{10:[...Array(9).fill("ZERO"),"A"],20:[...Array(19).fill("ZERO"),"A"],30:[...Array(29).fill("ZERO"),"A"],40:[...Array(39).fill("ZERO"),"A"],50:[...Array(49).fill("ZERO"),"A"]}};class Le extends R{constructor(){super("WHEEL")}determineGameResult({generator:r,gameInputs:e,edge:t}){if(!Object.values(Z).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(K).includes(e.riskLevel))throw new Error("Invalid risk level");let i=pr.getMultipliers(t)[e.riskLevel];if(i===void 0)throw new Error(`No multipliers found for risk level ${e.riskLevel}`);let n=i[e.segments];if(n===void 0)throw new Error(`No multipliers found for segment ${e.segments}`);let a=Or[e.riskLevel];if(a===void 0)throw new Error(`No patterns found for risk level ${e.riskLevel}`);let l=a[e.segments];if(l===void 0)throw new Error(`No patterns found for segment ${e.segments}`);let A=r.getRandomInt({min:0,max:l.length-1}),p=l[A.value];if(p===void 0)throw new Error(`No pattern found for segment ${e.segments} and value ${A.value}`);let c=n[p];if(c===void 0)throw new Error(`No payout found for picked segment ${p}`);return{isFinished:!0,payoutMultiplier:new Ce(c),outputs:{result:A.values},randomValues:A}}}export{ht as validateRouletteGameInputs,Ve as validateAdvancedDiceInputs,g as plinkoMultipliers,Ur as diamondsMultipliers,Dr as calculateBaccaratBetAmount,Z as WheelSegments,K as WheelRiskLevel,Le as Wheel,Lr as VALID_SUITS,yr as VALID_RANKS,or as VALID_EUROPEAN_STREETS,k as VALID_EUROPEAN_STRAIGHTS,er as VALID_EUROPEAN_SPLITS,cr as VALID_EUROPEAN_DOUBLE_STREETS,nr as VALID_EUROPEAN_CORNERS,ir as VALID_AMERICAN_STREETS,rr as VALID_AMERICAN_STRAIGHTS,tr as VALID_AMERICAN_SPLITS,Ar as VALID_AMERICAN_DOUBLE_STREETS,ar as VALID_AMERICAN_CORNERS,pe as TOP_COLUMN,$ as RouletteType,xe as Roulette,Gr as RollType,ue as RED_NUMBERS,U as RANDOM_MIN_VALUE,P as RANDOM_MAX_VALUE,W as PlinkoRiskLevel,te as Plinko,S as Parity,pt as PLINKO_ROW_COUNTS,Re as PAYOUT_MULTIPLIERS,u as OrigamiGame,Jr as Mines,dr as MIN_WIN_CHANCE,Oe as MIDDLE_COLUMN,sr as MAX_WIN_CHANCE,qr as Limbo,$r as KenoRiskLevel,zr as Keno,T as Half,Br as GameErrorCode,E as GameError,R as Game,lr as EuropeanRoulette,de as EUROPEAN_HOUSE_EDGE,z as EFFECTIVE_RANGE,G as Dozen,Yr as DiceDirection,kr as Dice,Mr as DiamondsResultType,Fr as Diamonds,m as Column,I as Color,Kr as BaccaratOutcome,Zr as BaccaratBetType,br as Baccarat,fe as BOTTOM_COLUMN,Be as BLACK_NUMBERS,Rr as AmericanRoulette,Cr as AdvancedDice,se as AMERICAN_HOUSE_EDGE,Er as AMERICAN_BASKET};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@betorigami/game-calculations",
3
- "version": "0.0.0-sha-7b1bae5-20251130040122",
3
+ "version": "0.0.0-sha-0f5e855-20251203034813",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",