{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/events/events.js","node_modules/handlebars/dist/cjs/handlebars.runtime.js","node_modules/handlebars/dist/cjs/handlebars/base.js","node_modules/handlebars/dist/cjs/handlebars/decorators.js","node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","node_modules/handlebars/dist/cjs/handlebars/exception.js","node_modules/handlebars/dist/cjs/handlebars/helpers.js","node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","node_modules/handlebars/dist/cjs/handlebars/logger.js","node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","node_modules/handlebars/dist/cjs/handlebars/runtime.js","node_modules/handlebars/dist/cjs/handlebars/safe-string.js","node_modules/handlebars/dist/cjs/handlebars/utils.js","node_modules/handlebars/runtime.js","node_modules/hbsfy/runtime.js","src/js/EventsHub.js","src/js/History.js","src/js/config/Config.js","src/js/config/DopLines.js","src/js/config/GamesMappings.js","src/js/config/KeyValueMap.js","src/js/config/NSGLines.js","src/js/config/Texts.js","src/js/config/slotPartials.js","src/js/main.js","src/js/panels/CayScratchPanel.js","src/js/panels/CaySlotPanel.js","src/js/panels/CayTablePanel.js","src/js/panels/DefaultPanel.js","src/js/panels/DopSlotPanel.js","src/js/panels/DopTablePanel.js","src/js/panels/NSGSlotPanel.js","src/js/panels/Panel.js","src/js/panels/TigEntSlotPanel.js","src/js/parsers/DefaultParser.js","src/js/parsers/scratch/cayetano/CayScratchParser.js","src/js/parsers/scratch/cayetano/CayScratchParserFactory.js","src/js/parsers/scratch/cayetano/CayScratchParserLegacy.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake10Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake1Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake2Parser.js","src/js/parsers/scratch/cayetano/games/FourInOneScratchStake5Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pFootyFrenzy2020Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pFootyFrenzy2022Parser.js","src/js/parsers/scratch/cayetano/games/Scr10pRubyWalshChampionsGoldParser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzy2020Parser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzy2022Parser.js","src/js/parsers/scratch/cayetano/games/ScrFootyFrenzyParser.js","src/js/parsers/scratch/cayetano/games/ScrRubyWalshChampionsGoldParser.js","src/js/parsers/slots/cayetano/CaySlotParser.js","src/js/parsers/slots/cayetano/CaySlotParserFactory.js","src/js/parsers/slots/cayetano/CaySlotParserLegacy.js","src/js/parsers/slots/cayetano/games/AgesOfFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/AladinsLampSlotParser.js","src/js/parsers/slots/cayetano/games/AliBabasTreasureSlotParser.js","src/js/parsers/slots/cayetano/games/AsianRichesSlotParser.js","src/js/parsers/slots/cayetano/games/BallOfShameSlotParser.js","src/js/parsers/slots/cayetano/games/BarbarianTreasuresSlotParser.js","src/js/parsers/slots/cayetano/games/BeautysBeastSlotParser.js","src/js/parsers/slots/cayetano/games/BetfairsWildArcadeSlotParser.js","src/js/parsers/slots/cayetano/games/BianconeriWildsSlotParser.js","src/js/parsers/slots/cayetano/games/BigRacingSlotParser.js","src/js/parsers/slots/cayetano/games/BombTheJackpotSlotParser.js","src/js/parsers/slots/cayetano/games/BuffaloRespinSlotParser.js","src/js/parsers/slots/cayetano/games/BullfightSlotParser.js","src/js/parsers/slots/cayetano/games/CastlePillagerSlotParser.js","src/js/parsers/slots/cayetano/games/CaveMegaBlastSlotParser.js","src/js/parsers/slots/cayetano/games/ClassyVegasSlotParser.js","src/js/parsers/slots/cayetano/games/CloningSheepSlotParser.js","src/js/parsers/slots/cayetano/games/CrazySuper7sSlotParser.js","src/js/parsers/slots/cayetano/games/CrusadeSlotParser.js","src/js/parsers/slots/cayetano/games/DarkJungleSlotParser.js","src/js/parsers/slots/cayetano/games/DetectiveWilderSlotParser.js","src/js/parsers/slots/cayetano/games/DiamondRushSlotParser.js","src/js/parsers/slots/cayetano/games/DragonsWildSlotParser.js","src/js/parsers/slots/cayetano/games/EasterMoneySlotParser.js","src/js/parsers/slots/cayetano/games/EgyptianWildsSlotParser.js","src/js/parsers/slots/cayetano/games/FantasiaSlotParser.js","src/js/parsers/slots/cayetano/games/FlirtingTangSlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzy2020SlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzy2022SlotParser.js","src/js/parsers/slots/cayetano/games/FootyFrenzySlotParser.js","src/js/parsers/slots/cayetano/games/ForestRushSlotParser.js","src/js/parsers/slots/cayetano/games/FrootShootSlotParser.js","src/js/parsers/slots/cayetano/games/FruitPopsSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackBigSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackDeluxeSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackMysteryWinSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackOneSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackSlotParser.js","src/js/parsers/slots/cayetano/games/FruitStackSuperDoubleWildSlotParser.js","src/js/parsers/slots/cayetano/games/FunFairSlotParser.js","src/js/parsers/slots/cayetano/games/GemBlastSlotParser.js","src/js/parsers/slots/cayetano/games/GiftsOfRaSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenKingdomSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenPlanetSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenPotSlotParser.js","src/js/parsers/slots/cayetano/games/GoldenThunderSlotParser.js","src/js/parsers/slots/cayetano/games/GolderadoSlotParser.js","src/js/parsers/slots/cayetano/games/GoldheadsSlotParser.js","src/js/parsers/slots/cayetano/games/GreatGemsSlotParser.js","src/js/parsers/slots/cayetano/games/GypsyLuckSlotParser.js","src/js/parsers/slots/cayetano/games/HalloWinSlotParser.js","src/js/parsers/slots/cayetano/games/HappyHourSlotParser.js","src/js/parsers/slots/cayetano/games/HappyRoosterSlotParser.js","src/js/parsers/slots/cayetano/games/HotSlotSlotParser.js","src/js/parsers/slots/cayetano/games/IndianPrincessSlotParser.js","src/js/parsers/slots/cayetano/games/IrishCloverSlotParser.js","src/js/parsers/slots/cayetano/games/JadeFortuneTempleSlotParser.js","src/js/parsers/slots/cayetano/games/JapaneseMysterySlotParser.js","src/js/parsers/slots/cayetano/games/JoustingWildsSlotParser.js","src/js/parsers/slots/cayetano/games/KeepingUpWithThePaddysSlotParser.js","src/js/parsers/slots/cayetano/games/LeagueOfWildsSlotParser.js","src/js/parsers/slots/cayetano/games/LittleRedRidingHoodSlotParser.js","src/js/parsers/slots/cayetano/games/LuckyCabaretSlotParser.js","src/js/parsers/slots/cayetano/games/LuckyMahjongSlotParser.js","src/js/parsers/slots/cayetano/games/MagicFairiesSlotParser.js","src/js/parsers/slots/cayetano/games/MagnificentWildSlotParser.js","src/js/parsers/slots/cayetano/games/ManekiGoldSlotParser.js","src/js/parsers/slots/cayetano/games/MaximusReelsSlotParser.js","src/js/parsers/slots/cayetano/games/MayanMysterySlotParser.js","src/js/parsers/slots/cayetano/games/MazeOfFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/MineCrusherSlotParser.js","src/js/parsers/slots/cayetano/games/MississippiQueenSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyMachineSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyNightSlotParser.js","src/js/parsers/slots/cayetano/games/MoneyTowerSlotParser.js","src/js/parsers/slots/cayetano/games/MonteCarloRacingSlotParser.js","src/js/parsers/slots/cayetano/games/MrDiamondsSlotParser.js","src/js/parsers/slots/cayetano/games/NeonWildsSlotParser.js","src/js/parsers/slots/cayetano/games/NudgingGemsSlotParser.js","src/js/parsers/slots/cayetano/games/OstrichLuckSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerFanaticsSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldBookOfLuckSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldOnTourSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerGoldSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerMysteryGoldSlotParser.js","src/js/parsers/slots/cayetano/games/PaddyPowerShowtimeSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysLuckyMineSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysLuckyPigeonSlotParser.js","src/js/parsers/slots/cayetano/games/PaddysWonderWheelUnderConstructionSlotParser.js","src/js/parsers/slots/cayetano/games/ParadiseTreasuresSlotParser.js","src/js/parsers/slots/cayetano/games/PersianGlorySlotParser.js","src/js/parsers/slots/cayetano/games/PiratesHoldDavyLockersCoinsSlotParser.js","src/js/parsers/slots/cayetano/games/PiratesHoldSlotParser.js","src/js/parsers/slots/cayetano/games/PoseidonFortuneSlotParser.js","src/js/parsers/slots/cayetano/games/PyramidGoldSlotParser.js","src/js/parsers/slots/cayetano/games/RacingWildsSlotParser.js","src/js/parsers/slots/cayetano/games/ReelsOfEgyptSlotParser.js","src/js/parsers/slots/cayetano/games/RhinoRumbleSlotParser.js","src/js/parsers/slots/cayetano/games/RobinHoodGoldenLootSlotParser.js","src/js/parsers/slots/cayetano/games/RoyalGooseSlotParser.js","src/js/parsers/slots/cayetano/games/RubyWalshChampionsGoldSlotParser.js","src/js/parsers/slots/cayetano/games/RussianGlorySlotParser.js","src/js/parsers/slots/cayetano/games/SafariDreamSlotParser.js","src/js/parsers/slots/cayetano/games/SantasSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/ShamanSpinsSlotParser.js","src/js/parsers/slots/cayetano/games/ShowtimeSpinnerSlotParser.js","src/js/parsers/slots/cayetano/games/SinbadsGoldSlotParser.js","src/js/parsers/slots/cayetano/games/SkullsSlotParser.js","src/js/parsers/slots/cayetano/games/SlottingSlopesSlotParser.js","src/js/parsers/slots/cayetano/games/SmoothieSmashSlotParser.js","src/js/parsers/slots/cayetano/games/SolarSnapSlotParser.js","src/js/parsers/slots/cayetano/games/SonsOfAsgardSlotParser.js","src/js/parsers/slots/cayetano/games/SparklingJackpotSlotParser.js","src/js/parsers/slots/cayetano/games/SphinxGoldSlotParser.js","src/js/parsers/slots/cayetano/games/SuperFuegoSlotParser.js","src/js/parsers/slots/cayetano/games/ThaiThaiSlotParser.js","src/js/parsers/slots/cayetano/games/TheGreatWildSlotParser.js","src/js/parsers/slots/cayetano/games/TheHeistSlotParser.js","src/js/parsers/slots/cayetano/games/TrickOTreatSlotParser.js","src/js/parsers/slots/cayetano/games/TumbleDwarfMysteryGoldSlotParser.js","src/js/parsers/slots/cayetano/games/TumbleDwarfSlotParser.js","src/js/parsers/slots/cayetano/games/WildEgyptSlotParser.js","src/js/parsers/slots/cayetano/games/WildSheriffSlotParser.js","src/js/parsers/slots/cayetano/games/WildStarsSlotParser.js","src/js/parsers/slots/cayetano/games/WishAWinSlotParser.js","src/js/parsers/slots/cayetano/games/WorldOfWizardsSlotParser.js","src/js/parsers/slots/cayetano/games/WormKingSlotParser.js","src/js/parsers/slots/dop/DopSlotParser.js","src/js/parsers/slots/dop/DopSlotParserFactory.js","src/js/parsers/slots/dop/games/AgeOfAkkadiaSlotParser.js","src/js/parsers/slots/dop/games/AgentRoyaleSlotParser.js","src/js/parsers/slots/dop/games/AlexanderTheGreatSlotParser.js","src/js/parsers/slots/dop/games/AncientDiscoSlotParser.js","src/js/parsers/slots/dop/games/AncientScriptSlotParser.js","src/js/parsers/slots/dop/games/AncientsBlessingSlotParser.js","src/js/parsers/slots/dop/games/ArcadeBombSlotParser.js","src/js/parsers/slots/dop/games/AstronautSlotParser.js","src/js/parsers/slots/dop/games/AthensMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/AtlantisSlotParser.js","src/js/parsers/slots/dop/games/BettyBorisAndBooSlotParser.js","src/js/parsers/slots/dop/games/BlobstersClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/BloodSuckersMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/BombusterSlotParser.js","src/js/parsers/slots/dop/games/BountyRaidSlotParser.js","src/js/parsers/slots/dop/games/BuffaloManiaMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/BullsRunWildSlotParser.js","src/js/parsers/slots/dop/games/CaiShen168SlotParser.js","src/js/parsers/slots/dop/games/CaptainRizkMegaWaysParser.js","src/js/parsers/slots/dop/games/CinderellaSlotParser.js","src/js/parsers/slots/dop/games/CirqueDeLaFortuneSlotParser.js","src/js/parsers/slots/dop/games/ClashOfTheBeastsSlotParser.js","src/js/parsers/slots/dop/games/CrazyGenieSlotParser.js","src/js/parsers/slots/dop/games/CyberAttackSlotParser.js","src/js/parsers/slots/dop/games/DevilsNumberSlotParser.js","src/js/parsers/slots/dop/games/DiamondBlitzSlotParser.js","src/js/parsers/slots/dop/games/DiamondRoyaleSlotParser.js","src/js/parsers/slots/dop/games/DiceDiceDiceSlotParser.js","src/js/parsers/slots/dop/games/DivineWaysSlotParser.js","src/js/parsers/slots/dop/games/DoggyRichesMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DragonKingLegendOfTheSeasSlotParser.js","src/js/parsers/slots/dop/games/DragonsClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/DragonsFireInfiniReelsSlotParser.js","src/js/parsers/slots/dop/games/DragonsFireMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DynamiteRichesMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/DynamiteRichesSlotParser.js","src/js/parsers/slots/dop/games/EgyptMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/ElvenMagicSlotParser.js","src/js/parsers/slots/dop/games/EmeraldDiamondSlotParser.js","src/js/parsers/slots/dop/games/EpicJourneySlotParser.js","src/js/parsers/slots/dop/games/EsqueletoMariachiSlotParser.js","src/js/parsers/slots/dop/games/FlamingFoxSlotParser.js","src/js/parsers/slots/dop/games/FlodderSlotParser.js","src/js/parsers/slots/dop/games/FortuneCatSlotParser.js","src/js/parsers/slots/dop/games/FortuneCharmSlotParser.js","src/js/parsers/slots/dop/games/FortuneHouseSlotParser.js","src/js/parsers/slots/dop/games/FourSquadSlotParser.js","src/js/parsers/slots/dop/games/FruitShopFrenzySlotParser.js","src/js/parsers/slots/dop/games/GemsGoneWildPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/GemsGoneWildSlotParser.js","src/js/parsers/slots/dop/games/GemsInfernoMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GemtasticSlotParser.js","src/js/parsers/slots/dop/games/GenieNightsSlotParser.js","src/js/parsers/slots/dop/games/GetTheGoldInfiniReelsSlotParser.js","src/js/parsers/slots/dop/games/GodsOfTroySlotParser.js","src/js/parsers/slots/dop/games/GoldenLeprechaunMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GoldenOfferSlotParser.js","src/js/parsers/slots/dop/games/GonzosQuestMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/GoodLuckClusterbusterSlotParser.js","src/js/parsers/slots/dop/games/GrandWheelSlotParser.js","src/js/parsers/slots/dop/games/GreatGoldSlotParser.js","src/js/parsers/slots/dop/games/HammerGodsSlotParser.js","src/js/parsers/slots/dop/games/HappyApplesSlotParser.js","src/js/parsers/slots/dop/games/HarleCoinSlotParser.js","src/js/parsers/slots/dop/games/HereKittyKittySlotParser.js","src/js/parsers/slots/dop/games/HoardOfPoseidonSlotParser.js","src/js/parsers/slots/dop/games/HotHotChilliPotSlotParser.js","src/js/parsers/slots/dop/games/HundredKDropSlotParser.js","src/js/parsers/slots/dop/games/ImperialPalaceSlotParser.js","src/js/parsers/slots/dop/games/JackInAPotSlotParser.js","src/js/parsers/slots/dop/games/JewelScarabsSlotParser.js","src/js/parsers/slots/dop/games/JingleBellsPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/JingleWaysMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/JoeExoticSlotParser.js","src/js/parsers/slots/dop/games/KnightsOfAvalonSlotParser.js","src/js/parsers/slots/dop/games/LaserFruitSlotParser.js","src/js/parsers/slots/dop/games/LastChanceSaloonSlotParser.js","src/js/parsers/slots/dop/games/LegendaryExcaliburSlotParser.js","src/js/parsers/slots/dop/games/LionDanceSlotParser.js","src/js/parsers/slots/dop/games/LionsHoardSlotParser.js","src/js/parsers/slots/dop/games/LondonTubeSlotParser.js","src/js/parsers/slots/dop/games/LuckyDevilSlotParser.js","src/js/parsers/slots/dop/games/LuckyMrGreenSlotParser.js","src/js/parsers/slots/dop/games/LuckyOktoberfestSlotParser.js","src/js/parsers/slots/dop/games/LunaFortunaSlotParser.js","src/js/parsers/slots/dop/games/MagicPowersMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/MajesticMysteriesPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/MasqueradeSlotParser.js","src/js/parsers/slots/dop/games/MayanGodsSlotParser.js","src/js/parsers/slots/dop/games/MayhemSlotParser.js","src/js/parsers/slots/dop/games/MegaDragonSlotParser.js","src/js/parsers/slots/dop/games/MegaPyramidSlotParser.js","src/js/parsers/slots/dop/games/MidasGoldSlotParser.js","src/js/parsers/slots/dop/games/MixAndMatchSlotParser.js","src/js/parsers/slots/dop/games/MonstersUnchainedSlotParser.js","src/js/parsers/slots/dop/games/MultiplierRichesSlotParser.js","src/js/parsers/slots/dop/games/MysteryFruitSlotParser.js","src/js/parsers/slots/dop/games/MysteryReelsDeluxeSlotParser.js","src/js/parsers/slots/dop/games/MysteryReelsMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/MysticWheelSlotParser.js","src/js/parsers/slots/dop/games/NarcosMexicoSlotParser.js","src/js/parsers/slots/dop/games/NeonLinksSlotParser.js","src/js/parsers/slots/dop/games/NightRollerSlotParser.js","src/js/parsers/slots/dop/games/NinjaWaysSlotParser.js","src/js/parsers/slots/dop/games/PaddyPowerGoldMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PeggySweetsSlotParser.js","src/js/parsers/slots/dop/games/PersianFortuneSlotParser.js","src/js/parsers/slots/dop/games/PiggyPiratesSlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentyBattleForGoldSlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentyMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/PiratesPlentySlotParser.js","src/js/parsers/slots/dop/games/PrimateKingSlotParser.js","src/js/parsers/slots/dop/games/PussNBootsSlotParser.js","src/js/parsers/slots/dop/games/RAsLegendSlotParser.js","src/js/parsers/slots/dop/games/RainbowJackpotsPowerLinesSlotParser.js","src/js/parsers/slots/dop/games/RainbowJackpotsSlotParser.js","src/js/parsers/slots/dop/games/ReactorSlotParser.js","src/js/parsers/slots/dop/games/RedDiamondSlotParser.js","src/js/parsers/slots/dop/games/RedHotBBQSlotParser.js","src/js/parsers/slots/dop/games/ReelHeistSlotParser.js","src/js/parsers/slots/dop/games/ReelKeeperSlotParser.js","src/js/parsers/slots/dop/games/ReelKingMegaSlotParser.js","src/js/parsers/slots/dop/games/RegalBeastsSlotParser.js","src/js/parsers/slots/dop/games/ReptizillionsPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/RiddleOfTheSphinxSlotParser.js","src/js/parsers/slots/dop/games/RisqueMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/RobinHoodsWildForestSlotParser.js","src/js/parsers/slots/dop/games/RocketMenSlotParser.js","src/js/parsers/slots/dop/games/SevenSevenSevenStrikeSlotParser.js","src/js/parsers/slots/dop/games/ShadowSocietySlotParser.js","src/js/parsers/slots/dop/games/SheepGoneWildSlotParser.js","src/js/parsers/slots/dop/games/SnowWildAndThe7FeaturesSlotParser.js","src/js/parsers/slots/dop/games/SpinTownSlotParser.js","src/js/parsers/slots/dop/games/StolenTreasuresSlotParser.js","src/js/parsers/slots/dop/games/SumoSpinsSlotParser.js","src/js/parsers/slots/dop/games/SunFortuneSlotParser.js","src/js/parsers/slots/dop/games/TenElementsSlotParser.js","src/js/parsers/slots/dop/games/TenThousandAndOneNightsMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/TenThousandAndOneNightsSlotParser.js","src/js/parsers/slots/dop/games/TheEqualizerSlotParser.js","src/js/parsers/slots/dop/games/TheGreatestTrainRobberySlotParser.js","src/js/parsers/slots/dop/games/TheWildHatterSlotParser.js","src/js/parsers/slots/dop/games/TheWishMasterMegaWaysSlotParser.js","src/js/parsers/slots/dop/games/ThorsLightningSlotParser.js","src/js/parsers/slots/dop/games/ThorsVengeanceSlotParser.js","src/js/parsers/slots/dop/games/ThreeKingdomsSlotParser.js","src/js/parsers/slots/dop/games/ThreeMusketeersSlotParser.js","src/js/parsers/slots/dop/games/TotemLightningPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/TotemLightningSlotParser.js","src/js/parsers/slots/dop/games/TransylvaniaNightOfBloodSlotParser.js","src/js/parsers/slots/dop/games/TreasureMinePowerReelsSlotParser.js","src/js/parsers/slots/dop/games/TreasureMineSlotParser.js","src/js/parsers/slots/dop/games/TrillionaireSlotParser.js","src/js/parsers/slots/dop/games/TwentyFourHourGrandPrixSlotParser.js","src/js/parsers/slots/dop/games/VaultCrackerSlotParser.js","src/js/parsers/slots/dop/games/VickyVenturaSlotParser.js","src/js/parsers/slots/dop/games/ViralSpiralSlotParser.js","src/js/parsers/slots/dop/games/WarOfGodsSlotParser.js","src/js/parsers/slots/dop/games/WellOfWishesSlotParser.js","src/js/parsers/slots/dop/games/WheelOfAmpSlotParser.js","src/js/parsers/slots/dop/games/WildCircusSlotParser.js","src/js/parsers/slots/dop/games/WildElementsSlotParser.js","src/js/parsers/slots/dop/games/WildFightSlotParser.js","src/js/parsers/slots/dop/games/WildHotChilliReelsSlotParser.js","src/js/parsers/slots/dop/games/WildNordsSlotParser.js","src/js/parsers/slots/dop/games/WildTundraSlotParser.js","src/js/parsers/slots/dop/games/WildWildChestSlotParser.js","src/js/parsers/slots/dop/games/WinEscalatorSlotParser.js","src/js/parsers/slots/dop/games/WingsOfRaSlotParser.js","src/js/parsers/slots/dop/games/WinterWondersSlotParser.js","src/js/parsers/slots/dop/games/ZaidasFortuneSlotParser.js","src/js/parsers/slots/dop/games/ZeusLightningPowerReelsSlotParser.js","src/js/parsers/slots/dop/games/ZillardKingSlotParser.js","src/js/parsers/slots/nsg/NSGSlotParser.js","src/js/parsers/slots/nsg/NSGSlotParserFactory.js","src/js/parsers/slots/nsg/games/AliBabasLuckMegawaysSlotParser.js","src/js/parsers/slots/nsg/games/AliBabasLuckPowerReelsSlotParser.js","src/js/parsers/slots/nsg/games/AliBabasLuckSlotParser.js","src/js/parsers/slots/nsg/games/AmazonIslandMegaWaysSlotParser.js","src/js/parsers/slots/nsg/games/AsianFortuneSlotParser.js","src/js/parsers/slots/nsg/games/BigBassAdventureSlotParser.js","src/js/parsers/slots/nsg/games/CasinoSpinSlotParser.js","src/js/parsers/slots/nsg/games/ChineseWildsSlotParser.js","src/js/parsers/slots/nsg/games/CobraQueenSlotParser.js","src/js/parsers/slots/nsg/games/CottonGangAffairSlotParser.js","src/js/parsers/slots/nsg/games/DesertLegendsSpinsSlotParser.js","src/js/parsers/slots/nsg/games/DragonPearlSlotParser.js","src/js/parsers/slots/nsg/games/DreamDestinySlotParser.js","src/js/parsers/slots/nsg/games/EightysSpinsSlotParser.js","src/js/parsers/slots/nsg/games/ElephantTreasureSlotParser.js","src/js/parsers/slots/nsg/games/EpicTreasureSlotParser.js","src/js/parsers/slots/nsg/games/GoldenLampsSlotParser.js","src/js/parsers/slots/nsg/games/GoldenToadSlotParser.js","src/js/parsers/slots/nsg/games/JellyMULTIHOPSSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicMegawaysSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicPowerReelsSlotParser.js","src/js/parsers/slots/nsg/games/LeprechaunsMagicSlotParser.js","src/js/parsers/slots/nsg/games/LuckyCarnivalSlotParser.js","src/js/parsers/slots/nsg/games/MacauRacingSlotParser.js","src/js/parsers/slots/nsg/games/NeptunesRichesSlotParser.js","src/js/parsers/slots/nsg/games/RedHotSlotSlotParser.js","src/js/parsers/slots/nsg/games/WantedWildzSlotParser.js","src/js/parsers/table/cayetano/CayTableParser.js","src/js/parsers/table/cayetano/CayTableParserFactory.js","src/js/parsers/table/cayetano/games/BlackJackParser.js","src/js/parsers/table/cayetano/games/ThreeCardBragParser.js","src/js/parsers/table/cayetano/games/VideoPokerParser.js","src/js/parsers/table/dop/DopTableParser.js","src/js/parsers/table/dop/DopTableParserFactory.js","src/js/parsers/table/dop/games/BlackJackParser.js","src/js/utils/AssetsHelper.js","src/js/utils/CacheHelper.js","src/js/utils/Currency.js","src/js/utils/FeatureBuyParser.js","src/js/utils/Format.js","src/js/utils/Language.js","src/js/utils/Overrides.js","src/js/utils/helpers.js","src/templates/Partials/cards.hbs","src/templates/Partials/hands.hbs","src/templates/Partials/infoBlackjack.hbs","src/templates/Partials/infoPuntoBanco.hbs","src/templates/Partials/infoRoulette.hbs","src/templates/Partials/infoVideoPoker.hbs","src/templates/Partials/number.hbs","src/templates/Partials/slot/demoRoundNote.hbs","src/templates/Partials/slot/freeRoundNote.hbs","src/templates/Partials/slot/gameDetails.hbs","src/templates/Partials/slot/jackpotDetails.hbs","src/templates/Partials/slot/spinDetails.hbs","src/templates/Partials/slot/spinScreen.hbs","src/templates/Partials/slot/transactions.hbs","src/templates/Partials/slot/winLinesDetails.hbs","src/templates/init.hbs","src/templates/scratch.hbs","src/templates/slots.hbs","src/templates/table.hbs","src/templates/tigentSlots.hbs"],"names":["EventEmitter","this","_events","Object","prototype","hasOwnProperty","call","objectCreate","_eventsCount","_maxListeners","undefined","$getMaxListeners","that","defaultMaxListeners","emitNone","handler","isFn","self","len","length","listeners","arrayClone","i","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","args","apply","_addListener","target","type","listener","prepend","m","events","existing","TypeError","newListener","emit","unshift","push","warned","w","Error","String","name","emitter","count","console","warn","message","onceWrapper","fired","removeListener","wrapFn","arguments","Array","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","listenerCount","spliceOne","list","index","k","n","pop","arr","copy","ret","objectCreatePolyfill","proto","F","objectKeysPolyfill","obj","keys","functionBindPolyfill","context","fn","create","objectKeys","Function","module","exports","hasDefineProperty","o","defineProperty","value","x","err","enumerable","get","set","arg","setMaxListeners","isNaN","getMaxListeners","er","doError","error","addListener","on","prependListener","once","prependOnceListener","position","originalListener","shift","removeAllListeners","key","rawListeners","eventNames","Reflect","ownKeys","hb","base","HandlebarsEnvironment","Utils","extend","SafeString","_handlebarsSafeString2","Exception","_handlebarsException2","escapeExpression","VM","runtime","template","spec","_interopRequireWildcard","_handlebarsBase","_handlebarsUtils","_handlebarsRuntime","inst","_handlebarsNoConflict2","helpers","partials","decorators","_helpers","registerDefaultHelpers","_decorators","registerDefaultDecorators","VERSION","COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","objectType","constructor","logger","_logger2","log","registerHelper","_utils","toString","_exception2","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","createFrame","instance","_decoratorsInline2","props","container","options","original","node","loc","line","column","start","tmp","idx","errorProps","captureStackTrace","lineNumber","nop","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","inverse","isArray","ids","each","data","contextPath","appendContextPath","execIteration","field","last","first","blockParams","isFunction","j","priorKey","conditional","hash","includeZero","isEmpty","level","methodMap","lookupLevel","levelMap","indexOf","toLowerCase","parseInt","method","_len","_key","Handlebars","root","global","window","$Handlebars","noConflict","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","invokePartialWrapper","resolvePartial","result","invokePartial","compile","compilerOptions","indent","lines","split","l","join","main","depths","_setup","useData","initData","useBlockParams","useDepths","concat","executeDecorators","decorator","main_d","compiler","strict","lookup","lambda","current","programs","program","declaredBlockParams","programWrapper","wrapProgram","depth","_parent","merge","param","common","nullContext","seal","noop","isTop","usePartial","useDecorators","_child","prog","currentDepths","currentPartialBlock","partialBlock","string","toHTML","escapeChar","chr","escape","array","possible","test","replace","badChars","object","frame","params","path","id","&","<",">","\"","'","`","=","require","ASSETS_LOADED","EventsHub","_classCallCheck","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","freeze","eventName","_get","Config","GamesMappings","Currency","Language","templateInit","DefaultPanel","DopSlotPanel","TigEntSlotPanel","DopTablePanel","CaySlotPanel","CayTablePanel","CayScratchPanel","NSGSlotPanel","panels","default","dopSlot","tigEntSlot","nsgSlot","dopBlackjack","dopRoulette","dopBaccarat","caySlot","cayScratch","cayRoulette","cayBlackjack","cay3CardBrag","cayVideoPoker","History","config","_basePath","basePath","_language","language","_assetsPath","assetsPath","_hideGameDetails","hideGameDetails","_hideTransactionDetails","hideTransactionDetails","document","createElement","className","$container","$","html","gameId","source","adapter","games","history","isNewPanel","panel","removeListeners","render","parsedData","code","symbol","thousands","decimals","e","resize","defaults","lang","respinWinEndOnly","ways","cluster","scatterWins","freeSpinsScatterWin","multiline","hasMultipliers","resizableSlot","horizontalReels","top","bottom","topAndBottom","infiniReels","dontDrawLines","gameReelsOffsets","offsets","assembledFatTiles","noJackpotScreen","parsers","dop","BlackjackStandard3H","PlatinumBlackjack21Plus3PE","PlatinumBlackjackAnyPair","PlatinumBlackjackBustorama","PlatinumBlackjackSideBets","RouletteEuropean","RouletteMoneyBack","RoulettePremium","RoulettePremium2018","RoulettePremiumPlus","BerichedLimited","BountyRaidLimited","HoardOfPoseidonLimited","MysteryFruitLimited","PiggyRichesMegaWaysLimited","ReelKeeperLimited","TheWildHatterLimited","TigerKingJoeExotic","VaultOfAnubisLimited","ZeusLightningPowerReelsWheel","WellOfWildsMegaWaysWheel","PiratesPlentyMegaWaysWheel","GonzosQuestMegaWaysWheel","GonzosQuestMegaWaysLimited","ClassicBlackjackBetConstruct","ClassicBlackjackBetfair","ClassicBlackjackBetsson","ClassicBlackjackBetssonColor","ClassicBlackjackLeoVegas","ClassicBlackjackMrGreen","ClassicBlackjackPaddyPower","ClassicBlackjackRank","EuropeanRouletteBetConstruct","EuropeanRouletteBetfair","EuropeanRouletteLeoVegas","EuropeanRouletteMrGreen","EuropeanRoulettePaddyPower","EuropeanRouletteRank","EuropeanRouletteWilliamHill","PlatinumRoulettePlayStar","PuntoBancoBetfair","PuntoBancoBetsson","PuntoBancoLeoVegas","PuntoBancoMrGreen","PuntoBancoPaddyPower","PuntoBancoRank","keyValueMap","PlatinumRoulette","pre","red_0","black_0","even_0","odd_0","small_0","big_0","post","trio_0","trio_1","trio_2","straight_00","straight_0","straight_1","straight_2","straight_3","straight_4","straight_5","straight_6","straight_7","straight_8","straight_9","straight_10","straight_11","straight_12","straight_13","straight_14","straight_15","straight_16","straight_17","straight_18","straight_19","straight_20","straight_21","straight_22","straight_23","straight_24","straight_25","straight_26","straight_27","straight_28","straight_29","straight_30","straight_31","straight_32","straight_33","straight_34","straight_35","straight_36","split_0","split_1","split_2","split_3","split_4","split_5","split_6","split_7","split_8","split_9","split_10","split_11","split_12","split_13","split_14","split_15","split_16","split_17","split_18","split_19","split_20","split_21","split_22","split_23","split_24","split_25","split_26","split_27","split_28","split_29","split_30","split_31","split_32","split_33","split_34","split_35","split_36","split_37","split_38","split_39","split_40","split_41","split_42","split_43","split_44","split_45","split_46","split_47","split_48","split_49","split_50","split_51","split_52","split_53","split_54","split_55","split_56","split_57","split_58","split_59","street_0","street_1","street_2","street_3","street_4","street_5","street_6","street_7","street_8","street_9","street_10","street_11","corner_0","corner_1","corner_2","corner_3","corner_4","corner_5","corner_6","corner_7","corner_8","corner_9","corner_10","corner_11","corner_12","corner_13","corner_14","corner_15","corner_16","corner_17","corner_18","corner_19","corner_20","corner_21","basket_0","sixLine_0","sixLine_1","sixLine_2","sixLine_3","sixLine_4","sixLine_5","sixLine_6","sixLine_7","sixLine_8","sixLine_9","sixLine_10","column_0","column_1","column_2","dozen_0","dozen_1","dozen_2","color_0","color_1","evenOdd_0","evenOdd_1","smallBig_0","smallBig_1","EuropeanRoulette","corner_22","PlatinumRouletteSingleZero","GoldenLamps","11111","00000","22222","21012","01210","00122","22100","10001","12221","01010","21212","12121","10101","11011","11211","01110","21112","02020","20202","20102","GoldenToad","44444","55555","33333","34543","54345","55433","33455","45554","43334","54545","NeptunesRiches","34343","43434","45454","44544","44344","54445","34443","53535","35353","35453","ChineseWilds","77777","66666","65456","56765","77654","44567","67776","76544","45677","67656","54565","76767","65676","56545","76667","66544","55677","66766","55455","65554","56667","77677","76554","45667","77765","44456","67765","54456","76654","45567","67654","54567","76545","45676","ElephantTreasure","RedHotSlot","MacauRacing","LuckyCarnival","AsianFortune","DragonPearl","777","LeprechaunsMagic","43454","AliBabasLuck","CasinoSpin","LeprechaunsMagicMegaways","AliBabasLuckMegaways","CobraQueen","DreamDestiny","AmazonIslandMegaWays","EpicTreasure","23432","32123","11234","44321","12344","43211","21232","34323","23212","32343","22344","33211","22122","33433","23334","32221","12334","43221","11123","44432","21123","34432","12234","43321","21234","34321","12343","43212","BigBassAdventure","80sSpins","AliBabasLuckPowerReels","1111111111111111","1010101010101010","99999999","88888888","77777777","66666666","1110111011101110","109109109109","98989898","87878787","76767676","1011101110111011","910910910910","89898989","78787878","67676767","1110987678","109876789","987678910","8767891011","76789101110","67891011109","78910111098","89101110987","91011109876","10111098767","111111109876","101010109877","7777891010","6667891011","LeprechaunsMagicPowerReels","WantedWildz","33533","55355","45434","CottonGangAffair","DesertLegendsSpins","JellyMULTIHOPS","Texts","en","TOTAL_COINS_WIN","GH_HISTORY","GH_GAME_DETAILS","GH_GAME_ID","GH_ROUND_ID","GH_SERVER_TIME_START","GH_SERVER_TIME_END","aamsParticipationId","aamsSessionId","GH_WIN_WAYS_TITLE","GH_LENGTH","GH_MULTIPLIER","GH_WIN_WAYS","GH_CLUSTER_TITLE","GH_CLUSTER_COUNT","GH_SCATTER_WIN_TITLE","GH_HANDS","GH_SIDE_BETS","HAND_0","HAND_0_SIDE_0","HAND_0_SIDE_1","HAND_0_SIDE_2","HAND_0_SPLIT_0","HAND_1","HAND_1_SPLIT_0","HAND_1_SIDE_0","HAND_1_SIDE_1","HAND_1_SIDE_2","HAND_2","HAND_2_SPLIT_0","HAND_2_SIDE_0","HAND_2_SIDE_1","HAND_2_SIDE_2","INSURANCE_HAND_0","INSURANCE_HAND_1","INSURANCE_HAND_2","DEALER","ANTE","ANTE_BONUS","PAIR_BONUS","PLAY","STAKE","INSURANCE","GH_TRANSACTIONS","GH_TOTAL_STAKE","GH_TOTAL_BET","GH_TOTAL_WIN","GH_FEATURE_BUY_COST","GH_FEATURE_BUY_NAME","GH_BEFORE_STAKE","GH_AFTER_STAKE","GH_AT_END","GH_BALANCE","GH_FREEBETS_BALANCE","GH_SESSION_BALANCE","GH_SESSION_FREEBETS","GH_BONUS","GH_WIN_DETAILS","GH_SPIN_DETAILS","GH_ADDITIONAL_DETAILS","GH_GAME_RESULTS","GH_INITIAL_SPIN","GH_JACKPOT_WIN","GH_SYMBOL_WINS","GH_LINE","GH_FREE_SPIN_WINS","GH_FREE_SPIN","GH_RESPIN","GH_RESPIN_WINS","GH_NUDGE","GH_NUDGE_WINS","GH_MULTIPLIER_WINS","GH_MODIFIER_WIN","GH_BONUS_WIN","GH_INSTANT_WIN","GH_NO_HISTORY","GH_GAMBLE_WINS","GH_NO_WINS","GH_ROUND_CORRECTION","GH_LIMITED_WIN","WIN_EXCHANGE","HALF_COLLECT","FULL_COLLECT","GH_TABLE_ID","GH_PLAYER","GH_BANKER","GH_TIE","GH_PLAYER_PAIR","GH_BANKER_PAIR","GH_GAME_WINNER","GH_GAME_WINSUM","GH_GAME_TOTAL","GH_GAME_STAKE","GH_SPIN_TITLE","GH_FREE_SPINS_TITLE","GH_RESPINS_TITLE","GH_BALL_POSITION","GH_TRIO","GH_SPLIT","GH_STREET","GH_BASKET","GH_CORNER","GH_SIX_LINE","GH_COLUMN","GH_FIRST_COLUMN","GH_SECOND_COLUMN","GH_THIRD_COLUMN","GH_DOZEN","GH_FIRST_DOZEN","GH_SECOND_DOZEN","GH_THIRD_DOZEN","GH_STRAIGHT","GH_COLOR","GH_BLACK","GH_RED","GH_EVEN_ODD","GH_EVEN","GH_ODD","GH_SMALL_BIG","GH_SMALL","GH_BIG","GH_BLACKJACK","GH_DOUBLE_DOWN","GH_OFFER_ACCEPTED","GH_SURRENDERED","GH_SNEAK_PEEK_ACTIVE","GH_FREE_ROUNDS_ACTIVE","SCRATCH_MATCH_NUMBER_BONUS","SCRATCH_SUM_OF_SEVEN_BONUS","SCRATCH_MATCH_SYMBOLS_BONUS","SCRATCH_MATCH_AMOUNTS_BONUS","SCRATCH_FREE_CARD","SCRATCH_CASH_PRIZE","zh","zh-TW","ja","ko","th","vi","da","de","el","es","fi","fr","it","ka","nl","no","pl","pt-BR","ru","sv","tr","cs","pt","hy","es-PE","hr","hu","sk","sl","hi","ms","bg","ro","fr-CA","lv","lt","et","sr","en-US","SpinScreenPartial","SpinDetailsPartial","GameDetailsPartial","TransactionsPartial","WinLinesDetailsPartial","DemoRoundNotePartial","FreeRoundNotePartial","JackpotDetailsPartial","moment","_","com","casino","versions","info","Panel","slotTemplate","CaySlotParserFactory","parserFactory","setAttribute","symbolsPath","parser","createParser","tableTemplate","CayTableParserFactory","head","appendChild","assign","textContent","registerPartials","DefaultParser","DopSlotParserFactory","dopLines","gamesWinLines","winLines","_currentWinLineSet","_onAssetsLoadedCallback","_onAssetsLoaded","_attachListeners","currentGameId","_this2","reels","notWays","contains","notCluster","_ref","bundler","isBundlerV2Build","_fetchWinLines","then","_addClickListeners","_setWinLineSet","winDetails","winLineSet","_showSpinScreen","_drawLines","_highlightWinningLines","_setUpInfiniScreenWrapper","_fitLinesContainer","_scrollScreenWrapperToRight","screenId","_this3","_unselectTilesAndLineLabels","_this4","lineLabel","_this5","parentElement","getAttribute","_toggleLines","querySelectorAll","forEach","tileHighlight","classList","remove","lineDetail","winLine","highlightTilesOnly","_highlightTilesOnly","_highlightLineAndTiles","add","spinScreenId","screen","querySelector","hide","removeClass","style","display","screenLinks","screenLink","linesList","children","lineId","lineGraphic","selected","lineTilesData","lineStart","lineLen","lineTiles","selectedLine","itm","tileIndex","reel","tile","way","tiles","tilesIndex","reelContainer","tileContainer","callback","tileImg","_toConsumableArray","naturalWidth","naturalHeight","clientWidth","clientHeight","addEventListener","_onLastTileLoaded","reelOffsets","lineSize","find","tileWidth","tileHeight","svgWidth","svgHeight","_resizeSVG","linesContainer","firstChild","removeChild","row","alignOffset","getVertOffset","reelOffset","linesPadding","linesOffsetBuffer","_calculateLinesBufferArray","winline","startX","startY","endX","pointsStr","endY","nextTileIndex","createElementNS","currentOffset","offset","providerPath","_this6","checksum","filter","game","fetch","response","ok","json","linesArr","_this7","offsetsData","item","_buildSVGLines","linesFirstTileCount","firstTileInLineArr","linesContainerHeight","lineOffset","width","height","svg","maxHeight","linesOverlay","mainScreen","offsetHeight","winLinesLabels","lineItem","_onLineLabelSelect","freespinScreenDetails","_changeSpinScreen","includes","screenWrapper","scrollIntoView","DopTableParserFactory","removeClassSVG","element","classValue","baseVal","addClassSVG","NSGSlotParserFactory","gameLines","currGameWinLines","_NSG2DopLines","_attachEventListeners","getGameConfig","Reels","_generateWinLinesSVG","setTimeout","NSGLines","DopLines","gameConfig","linesMap","sort","a","b","p","DopLine","Math","abs","SCREEN_INDEX","lineScreenId","_highlightLine","_highlightTiles","lineArr","activeLines","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","return","cells","JSON","parse","cy","y","_buildLinesPolyline","scaleRatio","buffer","SlotPartials","AssetsHelper","FeatureBuyParser","_assetsHelper","featureBuyParser","_registerPartials","_data","_adapter","sanitizeData","setOptions","cdn","hasGameData","getTiles","onComplete","output","texts","outputHtml","parseHTML","assetsToLoad","assetCount","counter","onload","requestAnimationFrame","onRendered","serverData","stringify","responses","transactions","regulations","gameDetails","roundId","prevRoundId","nextRoundId","serverTimeStart","startTime","serverTimeEnd","endTime","totalBet","totalWin","balance","cash","user","freeBets","sessionCash","sessionFreeBets","bonus","promo","Format","CayScratchParser","otherWins","scratchWins","jackpotWins","nonBonusDtoNames","stakeMultiplier","convertMoneyToNumber","_handleMaxPayout","_generateOutput","_beforeParseOperations","_afterParseOperations","_handleJackpots","slice","res","_handleAdditionalResponse","win","limitedWin","_handleFeatures","stake","screens","symbols","symbolsScreen","amounts","amountsScreen","winAmount","amount","scratchWin","mainSpinHandled","sumOfSevenBonus","dices","dice","mySymbols","map","prizes","prize","matchNumbersBonus","luckySymbols","d","s","_getSymbolAmount","gameData","_parseScreens","_handlePayoutDataBonuses","slotGameArray","_handleRespins","col","currScreen","respins","_filterRespins","freeCard","respin","_getPayoutDataBonuses","entries","payoutData","_step$value","_slicedToArray","clsName","gameDto","bonuses","spin","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_step2$value","_scratchBonusDice","_scratchBonusMatchNumbers","val","SlotRespinWrapper","currentSpinWinAmount","jackpots","pots","pot","FourInOneScratchStake1Parser","FourInOneScratchStake2Parser","FourInOneScratchStake5Parser","FourInOneScratchStake10Parser","ScrFootyFrenzyParser","ScrFootyFrenzy2020Parser","Scr10pFootyFrenzy2020Parser","Scr10pRubyWalshChampionsGoldParser","ScrRubyWalshChampionsGoldParser","Scr10pFootyFrenzy2022Parser","ScrFootyFrenzy2022Parser","CayScratchParserFactory","FourInOneScratchStake1","FourInOneScratchStake2","FourInOneScratchStake5","FourInOneScratchStake10","ScrFootyFrenzy","ScrFootyFrenzy2020","Scr10pFootyFrenzy2020","Scr10pRubyWalshChampionsGold","ScrRubyWalshChampionsGold","ScrFootyFrenzy2022","Scr10pFootyFrenzy2022","CayScratchParserLegacy","_respinDtos","bonusDtos","cayetano.games.slots.dto.SlotContactDataDto","_handleContactBonus","cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto","cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus1Dto","_scratchBonus1Handler","cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus4Dto","_scratchBonus2Handler","cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus1Dto","cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus4Dto","cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus1Dto","cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus4Dto","cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus1Dto","cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus4Dto","symbolPositions","floor","runScreenBonuses","multWin","CaySlotParser","finalScreen","featureHandlers","cb","_handleFreeSpins","parseAdditionalResponses","balanceAtStart","freebetAtStart","session","parseFloat","atStart","responseIndex","_splitScreen","reelsBuffer","_initReels","_handleWins","sga","screenCopy","parsedScr","rows","symbolId","_mapSymbol","fspins","currentSpin","isRespin","_handleSingleFreeSpin","freeSpins","_getWinLines","respinIndex","_handleSingleRespin","totalRespinsWinAmount","_flattenNudges","property","_handleGamble","featureHandler","symbolPayout","SymbolPayout","lineIndex","lineNum","CaySlotParserLegacy","SantasSpinsSlotParser","PaddyPowerGoldSlotParser","FrootShootSlotParser","LuckyCabaretSlotParser","RhinoRumbleSlotParser","GypsyLuckSlotParser","AladinsLampSlotParser","SparklingJackpotSlotParser","PaddysLuckyMineSlotParser","PaddysLuckyPigeonSlotParser","PaddyPowerFanaticsSlotParser","FantasiaSlotParser","AsianRichesSlotParser","IndianPrincessSlotParser","RubyWalshChampionsGoldSlotParser","MrDiamondsSlotParser","SafariDreamSlotParser","WildSheriffSlotParser","JoustingWildsSlotParser","FruitPopsSlotParser","GemBlastSlotParser","ForestRushSlotParser","AliBabasTreasureSlotParser","BallOfShameSlotParser","TrickOTreatSlotParser","DarkJungleSlotParser","ShamanSpinsSlotParser","ReelsOfEgyptSlotParser","FruitStackBigSpinsSlotParser","FruitStackDeluxeSlotParser","BombTheJackpotSlotParser","GoldenKingdomSlotParser","DiamondRushSlotParser","SkullsSlotParser","RoyalGooseSlotParser","ClassyVegasSlotParser","BianconeriWildsSlotParser","WildEgyptSlotParser","FootyFrenzySlotParser","TumbleDwarfSlotParser","GolderadoSlotParser","EasterMoneySlotParser","SolarSnapSlotParser","HotSlotSlotParser","GreatGemsSlotParser","DetectiveWilderSlotParser","GoldenPlanetSlotParser","TheGreatWildSlotParser","BarbarianTreasuresSlotParser","SuperFuegoSlotParser","FunFairSlotParser","MaximusReelsSlotParser","GoldenThunderSlotParser","ManekiGoldSlotParser","HappyHourSlotParser","SonsOfAsgardSlotParser","JadeFortuneTempleSlotParser","WormKingSlotParser","FootyFrenzy2020SlotParser","FootyFrenzy2022SlotParser","GoldheadsSlotParser","GoldenPotSlotParser","CrusadeSlotParser","BuffaloRespinSlotParser","LeagueOfWildsSlotParser","FruitStackOneSlotParser","RacingWildsSlotParser","MagnificentWildSlotParser","PiratesHoldSlotParser","PiratesHoldDavyLockersCoinsSlotParser","MoneyMachineSlotParser","MoneyTowerSlotParser","LuckyMahjongSlotParser","BeautysBeastSlotParser","MagicFairiesSlotParser","MoneyNightSlotParser","MonteCarloRacingSlotParser","NudgingGemsSlotParser","ParadiseTreasuresSlotParser","PersianGlorySlotParser","PyramidGoldSlotParser","RussianGlorySlotParser","SinbadsGoldSlotParser","SphinxGoldSlotParser","ThaiThaiSlotParser","WildStarsSlotParser","CastlePillagerSlotParser","FruitStackSuperDoubleWildSlotParser","KeepingUpWithThePaddysSlotParser","PoseidonFortuneSlotParser","HappyRoosterSlotParser","PaddyPowerMysteryGoldSlotParser","FlirtingTangSlotParser","CaveMegaBlastSlotParser","CrazySuper7sSlotParser","NeonWildsSlotParser","FruitStackSlotParser","MississippiQueenSlotParser","HalloWinSlotParser","MayanMysterySlotParser","DragonsWildSlotParser","LittleRedRidingHoodSlotParser","JapaneseMysterySlotParser","EgyptianWildsSlotParser","IrishCloverSlotParser","FruitStackMysteryWinSlotParser","BullfightSlotParser","AgesOfFortuneSlotParser","PaddyPowerGoldOnTourSlotParser","MineCrusherSlotParser","BetfairsWildArcadeSlotParser","TheHeistSlotParser","PaddyPowerShowtimeSlotParser","ShowtimeSpinnerSlotParser","CloningSheepSlotParser","RobinHoodGoldenLootSlotParser","TumbleDwarfMysteryGoldSlotParser","SlottingSlopesSlotParser","SmoothieSmashSlotParser","PaddyPowerGoldBookOfLuckSlotParser","BigRacingSlotParser","WishAWinSlotParser","WorldOfWizardsSlotParser","GiftsOfRaSlotParser","OstrichLuckSlotParser","PaddysWonderWheelUnderConstructionSlotParser","MazeOfFortuneSlotParser","SantasSpins","PaddyPowerGold","PaddyPowerGoldHaxe","FrootShoot","LuckyCabaret","RhinoRumble","GypsyLuck","AladinsLamp","SparklingJackpot","PaddysLuckyMine","PaddysLuckyPigeon","PaddyPowerFanatics","Fantasia","AsianRiches","IndianPrincess","RubyWalshChampionsGold","MrDiamonds","SafariDream","WildSheriff","JoustingWilds","FruitPops","GemBlast","ForestRush","AliBabasTreasure","BallOfShame","TrickOTreat","DarkJungle","ShamanSpins","ReelsOfEgypt","FruitStackBigSpins","BombTheJackpot","FruitStackDeluxe","GoldenKingdom","DiamondRush","Skulls","RoyalGoose","ClassyVegas","BianconeriWilds","WildEgypt","FootyFrenzy","TumbleDwarf","GoldErado","EasterMoney","SolarSnap","HotSlot","GreatGems","DetectiveWilder","GoldenPlanet","TheGreatWild","BarbarianTreasures","SuperFuego","FunFair","GoldenThunder","MaximusReels","ManekiGold","HappyHour","SonsOfAsgard","JadeDragon","WormKing","FootyFrenzy2020","FootyFrenzy2022","Goldheads","Crusade","GoldenPot","BuffaloRespin","LeagueOfWilds","RacingWilds","MagnificentWild","FruitStackOne","PiratesHold","PiratesHoldDavyLockersCoins","MoneyMachine","MoneyTower","LuckyMahjong","BeautysBeast","MagicFairies","MoneyNight","MonteCarloRacing","NudgingGems","ParadiseTreasures","PersianGlory","PyramidGold","RussianGlory","SinbadsGold","SphinxGold","ThaiThai","WildStars","CastlePillager","FruitStackSuperDoubleWild","KeepingUpWithThePaddys","PoseidonFortune","HappyRooster","PaddyPowerMysteryGold","FlirtingTang","CaveMegaBlast","CrazySuper7s","NeonWilds","FruitStack","MississippiQueen","HalloWin","MayanMystery","DragonsWild","LittleRedRidingHood","JapaneseMystery","EgyptianWilds","IrishClover","FruitStackMysteryWin","AgesOfFortune","PaddyPowerGoldOnTour","Bullfight","MineCrusher","BetfairsWildArcade","TheHeist","PaddyPowerShowtime","ShowtimeSpinner","CloningSheep","RobinHoodGoldenLoot","TumbleDwarfMysteryGold","SlottingSlopes","SmoothieSmash","BigRacing","PaddyPowerGoldBookOfLuck","WishAWin","WorldOfWizards","SpyAffairs","GiftsOfRa","OstrichLuck","PaddysWonderWheelUnderConstruction","MazeOfFortune","_handleStickyData","_handleNudges","cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto","cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto","cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto","cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto","cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto","cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto","_handleStackedSymbol","cayetano.games.slots.dto.SlotGambleWinCardPickDataDto","cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto","pd","pdata","bonusSpin","newGameData","dto","stickyData","slotGameStickyData","stickyPos","newData","pos","stickyReels","stickySymbolIds","spinNum","nudges","currRespin","bonusesWin","_handleStackedWilds","_this8","linePos","SlotPrizeBonus","AladinsLampParser","AliBabasTreasureParser","AsianRichesParser","totalBonusesWin","replaceSymbols","modifiedReels","smallScatterPositionsByReel","smallScatterTypesByReel","scatterRow","scatterType","currentId","newId","BarbarianTreasuresParser","pdatabonuses","spinToUse","pData","scatterPositions","scatterTypes","BetfairsWildArcadePachinkoBonusDataDto","BetfairsWildArcadeClawMachineBonusDataDto","BetfairsWildArcadeCoinPusherBonusDataDto","BianconeriWildsParser","wildIds","horseIds","BigRacingHorseBeforeWildDto","horseBeforeWildPosition","horseId","horseBeforeWild","BigRacingRaceResultDto","BombTheJackpotParser","_handleWildRespins","fsWildRespins","bonusDto","inFreeSpins","substractRespinIndex","spins","ClassyVegasParser","symb","initialRespin","_extractRespins","_extractContactDto","slotGameDto","contactDto","lastSpin","_extractLastSpin","fsDto","bonusGameId","fsAsRespins","DarkJungleParser","respinLines","multiplier","DetectiveWilderParser","bonusSpins","DiamondRushParser","EasterMoneyParser","choices","FantasiaParser","reelIndex","FootyFrenzy2020Parser","FootyFrenzy2022Parser","FootyFrenzyParser","ForestRushParser","lastPayoutData","FrootShootParser","FruitPopsParser","c","FruitStackBigSpinsParser","wheelDto","afterParseOperationsCalled","bonusWheel","wheelValues","FruitStackDeluxeParser","gameObj","replaceReels","reelToReplace","replacementSymbol","toPos","lastSpinId","resultPosition","symbolAbove","getAdjustedSymbol","reelsIndex","symbolBelow","reelsArray","FunFairParser","GemBlastParser","finalReels","specialSymbol","determineSpecialSymbol","selectedSymbol","specialSymbolDto","linkedReels","transformedSymbol","wildTransform","transformSymbols","diff","wildSticky","GoldenKingdomParser","cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus1Dto\"","cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus5Dto","hasFreeSpins","fs","hasRespins","_hasFreeSpins","_hasRespins","defaultR","_getDefaultRespin","GoldenPlanetParser","initialSpin","_handleGoldenPlanetRespins","returnResult","_getGoldenPlanetRespins","_handleGoldenPlanetContact","respinNum","respinData","GoldenPotParser","linesWinAmount","reduce","GolderadoParser","elem","cayetano.games.slots.goldheads.logic.dto.GoldheadsRespinWrapperDto","cayetano.games.slots.goldheads.logic.dto.GoldheadsSerpentWildInstantWinDto","mystery","wildType","wildSymbol","GreatGemsParser","GypsyLuckParser","HappyHourParser","HotSlotParser","IndianPrincessParser","JadeFortuneTempleParser","pendingMultiplier","superRes","newReels","featureName","currAmount","nextRespin","rData","respinCumulativeWinAmount","hasNextRespin","multiplierWin","JoustingWildsParser","_pendingData","respinCommon","_customStickyDataHandler","reelMargin","LeagueOfWildsParser","cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsGreenWildBonusDataDto","spinFinal","cumulativeNumSpins","LuckyCabaretParser","_extractLineDto","cumulativeWinAmount","lineDto","cumulativeLinesWinAmount","ManekiGoldParser","MaximusReelsParser","_handleMaximusFreeSpinsDto","freeSpinsMultiplier","freeSpinParams","multWinAmount","spinData","MineCrusherAllSymbolPayouts","MineCrusherSymbolPayout","payout","_getWinLinesInitialSpin","multipliedWin","_handleMineCrusherSpin","payouts","_handleMineCrusherContact","MineCrusherRedFairyDto","MoneyMachineParser","MrDiamondsParser","generateOutput","totalEggsWinAmount","_handleEggsWin","accumulatedWinAmount","eggsWin","OstrichLuckSpinDto","PaddyPowerFanaticsParser","totalSpins","_handlePotOGoldWinLineDto","overrideLines","reelsParsed","notMultipliedAmount","_handleShowtimeSpin","_handleShowtimeContact","PaddysLuckyMineParser","PaddysLuckyPigeonParser","instantWinAmount","multAmount","hasRespin","URLSearchParams","location","search","_replaceBrandedSymbols","totalCoinsWinAmount","_handleCoinsWin","coinsWin","totalPrizeWinAmount","_defineProperty","_ret","v","_typeof","PiratesHoldBonus2Dto","wildReels","RacingWildsGreenWildDto","greenWilds","RacingWildsBlueWildDto","blueWilds","RacingWildsPinkWildDto","pinkWilds","cumulativeWin","ReelsOfEgyptParser","_handlePyramidBonus","pyramidBonus","_handleLineWinDto","RobinHoodGoldenLootParser","RoyalGooseParser","RubyWalshChampionsGoldParser","SafariDreamParser","tourBonusDto","SantasSpinsParser","ShamanSpinsParser","_handleWildShowerBonus","linesParsed","useThisReels","useThisData","SkullsParser","_getFuegoRespins","accum","_flattenRespins","respinParsed","_getSingleRespin","linesAmount","_getLinesWinAmount","SolarSnapParser","lastRespinAmount","_handleSolarSnapRespins","_handleSolarSnapContact","_reelsInitialized","_winsHandled","_handleShuffleBonus","SparklingJackpotParser","SuperFuegoParser","TheGreatWildParser","_handleCarBonus","_handleWilds","blackSpinsPayouts","respinBonuses","TheHeistFreeSpinBonusDataDto","TrickOTreatParser","TumbleDwarfParser","_handleLuckyLineBonus","overrideReels","WildEgyptParser","WildSheriffParser","spinId","bonusIds","wkSoloAttackDto","wkCallToArmsDto","wkFruitBombDto","wkKingBonusDto","_pendingBonusesToHandle","_handleWormKingRespins","wilds","wkRandomWildsDto","_handleRandomWilds","superFruits","_getWormKingRespins","_handleWormKingContact","dtos","superFruitsAmount","DopSlotParser","extraSpins","multipliers","initialLinesWin","totalWinCorrection","extraSpinCounter","instantWin","hide0s","_handleNudge","_handleFatTiles","_handleMysterySymbols","_handleFeature","_handleSwapReels","_handleMultipliers","_handleHorizontalReels","_flattenFreeSpins","atEnd","_roundingCorrection","_applyScreenMask","featureBuyCost","featureBuyName","spinMode","total","winLinesData","linesGroupIndex","gamble","_addOtherWins","showJackpotScreen","lastSpinData","_getLastSpinData","jackpot","_cloneReels","_handleJackpotTiles","jackpotTiles","_nudgeJackpotTiles","winType","winName","autofinish","autoFinishData","_convertNewFormat","responseData","nudgeData","nudge","flatten","startAt","dir","distance","endAt","tileRight","targetPos","tileId","toTile","gridWidthIndex","tileBottom","gridHeightIndex","_applyReelsModifier","swapReelsData","swapReels","swaps","swap","A","B","mysterySymbolsData","mysterySymbols","multiply","previousMultiplier","bonusWin","pickerBonus","pathBonus","pathPickerBonus","multiPickerBonus","feature","_this9","extraSpin","_freeSpinsBeforeParseOperations","_freeSpinsAfterParseOperations","_this10","freeSpin","_handleExtraSpin","lastRespin","_this11","_this12","_handleResponseCorrection","round","jpTile","initialData","heldRespins","lastFreeSpin","clone","jackpotNudgeData","jackpotNudge","nudgeDistance","jackpotNudgeDistance","_Config$horizontalRee","tilesCountOnReel","lastReelIndex","horizontalReelIndices","minCountEmptyPos","_getRedundantRowsCount","cleanIndexFrom","minEmptyPosOnReel","_ref2","reelMiddle","emptyTilesCount","screenMask","AgeOfAkkadiaSlotParser","AgentRoyaleSlotParser","AlexanderTheGreatSlotParser","AncientDiscoSlotParser","AncientScriptSlotParser","AncientsBlessingSlotParser","ArcadeBombSlotParser","AstronautSlotParser","AthensMegaWaysSlotParser","AtlantisSlotParser","Bets10FarmMegaWaysSlotParser","BettyBorisAndBooParser","BlobstersClusterbusterSlotParser","BloodSuckersMegaWaysSlotParser","BombusterSlotParser","BountyRaidSlotParser","BuffaloManiaMegaWaysSlotParser","BullsRunWildSlotParser","CaiShen168SlotParser","CaptainRizkMegaWaysParser","CinderellaSlotParser","CirqueDeLaFortuneSlotParser","ClashOfTheBeastsSlotParser","CrazyGenieSlotParser","CyberAttackSlotParser","DevilsNumberSlotParser","DiamondBlitzSlotParser","DiamondRoyaleSlotParser","DiceDiceDiceSlotParser","DivineWaysSlotParser","DoggyRichesMegaWaysParser","DragonKingLegendOfTheSeasSlotParser","DragonsClusterbusterSlotParser","DragonsFireInfiniReelsSlotParser","DragonsFireMegaWaysSlotParser","DynamiteRichesMegaWaysParser","DynamiteRichesSlotParser","EgyptMegaWaysSlotParser","ElvenMagicSlotParser","EmeraldDiamondSlotParser","EpicJourneySlotParser","EsqueletoMariachiSlotParser","FlamingFoxSlotParser","FlodderSlotParser","FortuneCatSlotParser","FortuneCharmSlotParser","FortuneHouseSlotParser","FourSquadSlotParser","FruitShopFrenzySlotParser","GemsGoneWildPowerReelsSlotParser","GemsGoneWildSlotParser","GemsInfernoMegaWaysSlotParser","GemtasticSlotParser","GenieNightsSlotParser","GetTheGoldInfiniReelsSlotParser","GodsOfTroySlotParser","GoldenLeprechaunMegaWaysSlotParser","GoldenOfferSlotParser","GonzosQuestMegaWaysSlotParser","GoodLuckClusterbusterSlotParser","GrandWheelSlotParser","GreatGoldSlotParser","HammerGodsSlotParser","HappyApplesSlotParser","HarleCoinParser","HereKittyKittySlotParser","HoardOfPoseidonSlotParser","HotHotChilliPotSlotParser","HundredKDropSlotParser","ImperialPalaceSlotParser","JackInAPotSlotParser","JewelScarabsSlotParser","JingleBellsPowerReelsSlotParser","JingleWaysMegaWaysSlotParser","JoeExoticSlotParser","KnightsOfAvalonSlotParser","LaserFruitSlotParser","LastChanceSaloonSlotParser","LegendaryExcaliburSlotParser","LionDanceSlotParser","LionsHoardSlotParser","LondonTubeSlotParser","LuckyDevilSlotParser","LuckyMrGreenSlotParser","LuckyOktoberfestSlotParser","LunaFortunaSlotParser","MagicPowersMegaWaysSlotParser","MajesticMysteriesPowerReelsSlotParser","MasqueradeSlotParser","MayanGodsSlotParser","MayhemSlotParser","MegaDragonSlotParser","MegaPyramidSlotParser","MidasGoldSlotParser","MixAndMatchSlotParser","MonstersUnchainedSlotParser","MultiplierRichesSlotParser","MysteryFruitSlotParser","MysteryReelsDeluxeSlotParser","MysteryReelsMegaWaysSlotParser","MysticWheelSlotParser","NarcosMexicoSlotParser","NeonLinksSlotParser","NightRollerSlotParser","NinjaWaysSlotParser","PaddyPowerGoldMegaWaysSlotParser","PeggySweetsSlotParser","PersianFortuneSlotParser","PiggyPiratesSlotParser","PiratesPlentyBattleForGoldSlotParser","PiratesPlentyMegaWaysSlotParser","PiratesPlentySlotParser","PrimateKingSlotParser","PussNBootsSlotParser","RAsLegendSlotParser","RainbowJackpotsPowerLinesSlotParser","RainbowJackpotsSlotParser","ReactorSlotParser","RedDiamondSlotParser","RedHotBBQSlotParser","ReelHeistSlotParser","ReelKeeperSlotParser","ReelKingMegaSlotParser","RegalBeastsSlotParser","ReptizillionsPowerReelsSlotParser","RiddleOfTheSphinxSlotParser","RisqueMegaWaysSlotParser","RobinHoodsWildForestSlotParser","RocketMenSlotParser","SevenSevenSevenStrikeSlotParser","ShadowSocietySlotParser","SheepGoneWildSlotParser","SnowWildAndThe7FeaturesSlotParser","SpinTownSlotParser","StolenTreasuresSlotParser","SumoSpinsSlotParser","SunFortuneSlotParser","TenElementsSlotParser","TenThousandAndOneNightsMegaWaysSlotParser","TenThousandAndOneNightsSlopParser","TheEqualizerSlotParser","TheGreatestTrainRobberySlotParser","TheWildHatterSlotParser","TheWishMasterMegaWaysSlotParser","ThorsLightningSlotParser","ThorsVengeanceSlotParser","ThreeKingdomsSlotParser","ThreeMusketeersSlotParser","TotemLightningPowerReelsSlotParser","TotemLightningSlotParser","TransylvaniaNightOfBloodSlotParser","TreasureMinePowerReelsSlotParser","TreasureMineSlotParser","TrillionaireParser","TwentyFourHourGrandPrixSlotParser","VaultCrackerSlotParser","VickyVenturaSlotParser","ViralSpiralSlotParser","WarOfGodsSlotParser","WellOfWishesSlotParser","WheelOfAmpSlotParser","WildCircusSlotParser","WildElementsSlotParser","WildFightSlotParser","WildHotChilliReelsSlotParser","WildNordsSlotParser","WildTundraSlotParser","WildWildChestSlotParser","WinEscalatorSlotParser","WingsOfRaSlotParser","WinterWondersSlotParser","ZaidasFortuneSlotParser","ZeusLightningPowerReelsSlotParser","ZillardKingSlotParser","10001Nights","10001NightsLimited","10001NightsMegaWays","24HourGrandPrix","4Squad","777Strike","AgeOfAkkadia","AgentRoyale","AlexanderTheGreat","AncientDisco","AncientScript","AncientsBlessing","ArcadeBomb","Astronaut","AthensMegaWays","Atlantis","Bets10FarmMegaWays","BettyBorisAndBoo","BlobstersClusterbuster","BloodSuckersMegaWays","Bombuster","BountyRaid","BuffaloManiaMegaWays","BullsRunWild","CaiShen168","CaptainRizkMegaWays","Cinderella","CirqueDeLaFortune","ClashOfTheBeasts","CrazyGenie","CyberAttack","DevilsNumber","DiamondBlitz","DiamondRoyale","DiceDiceDice","DivineWays","DoggyRichesMegaWays","DragonKingLegendOfTheSeas","DragonsClusterbuster","DragonsFireInfiniReels","DragonsFireMegaWays","DynamiteRiches","DynamiteRichesLimited","DynamiteRichesMegaWays","DynamiteRichesMegaWaysLimited","EgyptMegaWays","ElvenMagic","EmeraldDiamond","EpicJourney","EsqueletoMariachi","FlamingFox","Flodder","FortuneCat","FortuneCharm","FortuneHouse","FruitShopFrenzy","GemsGoneWild","GemsGoneWildPowerReels","GemsInfernoMegaWays","Gemtastic","GenieNights","GetTheGoldInfiniReels","GodsOfTroy","GoldenLeprechaunMegaWays","GoldenOffer","GonzosQuestMegaWays","GoodLuckClusterbuster","GrandWheel","GreatGold","HammerGods","HappyApples","HarleCoin","HereKittyKitty","HoardOfPoseidon","HotHotChilliPot","HundredKDrop","ImperialPalace","JackInAPot","JewelScarabs","JingleBellsPowerReels","JingleWaysMegaWays","JoeExotic","KnightsOfAvalon","LaserFruit","LastChanceSaloon","LegendaryExcalibur","LionDance","LionsHoard","LondonTube","LuckyDevil","LuckyFortuneCat","LuckyMrGreen","LuckyOktoberfest","LunaFortuna","MagicPowersMegaWays","MajesticMysteriesPowerReels","Masquerade","MayanGods","Mayhem","MegaDragon","MegaPyramid","MidasGold","MixAndMatch","MonstersUnchained","MultiplierRiches","MysteryFruit","MysteryReelsDeluxe","MysteryReelsMegaWays","MysticWheel","NarcosMexico","NeonLinks","NightRoller","NinjaWays","PaddyPowerGoldMegaWays","PeggySweets","PersianFortune","PiggyPirates","PiratesPlenty","PiratesPlentyBattleForGold","PiratesPlentyMegaWays","PrimateKing","PrimateKingLimited","PussNBoots","RAsLegend","RainbowJackpots","RainbowJackpotsPowerLines","Reactor","RedDiamond","RedHotBBQ","ReelHeist","ReelKeeper","ReelKingMega","RegalBeasts","ReptizillionsPowerReels","RiddleOfTheSphinx","RisqueMegaWays","RobinHoodsWildForest","RocketMen","ShadowSociety","SheepGoneWild","SnowWildAndThe7Features","SpinTown","StolenTreasures","SumoSpins","SunFortune","TenElements","TheEqualizer","TheGreatestTrainRobbery","TheWildHatter","TheWishMasterMegaWays","ThorsLightning","ThorsVengeance","ThreeKingdoms","ThreeMusketeers","TotemLightning","TotemLightningPowerReels","TransylvaniaNightOfBlood","TreasureMine","TreasureMinePowerReels","Trillionaire","VaultCracker","VickyVentura","ViralSpiral","WarOfGods","WellOfWishes","WheelOfAmp","WildCircus","WildElements","WildFight","WildHotChilliReels","WildNords","WildTundra","WildWildChest","WinEscalator","WingsOfRa","WinterWonders","ZaidasFortune","ZeusLightningPowerReels","ZillardKing","AgeOfAkkadiaParser","hasBonusTitle","scatters","bonusReels","wins","AGENT_TILE_ID","_handleLockedTiles","filteredData","MAX_MULTIPLIER","fatTiles","otherFeatures","AncientScriptParser","_handleExpandingTiles","expandingTiles","expandTile","filteredLockedTiles","lockedTile","ArcadeBombParser","bomb","explosions","explosion","positions","autoFinishRes","restResponses","parsedAutoFinishResponses","isInitialSpin","shouldAddToRespins","pendingWin","hasCollect","hasRedDiamond","collectedAmount","progress","nextWin","takeAll","startReelRow","to","startReelCol","_handleFatTilesExpand","_handleBanditTiles","BullsRunWildParser","MysteryReelsMegaWaysParser","_handleCloningTile","CinderellaParser","_handleConnectingTiles","_handleExpandSymbols","expandData","ClashOfTheBeastsParser","_handleMultiDirectionalNudge","isVisible","feauteName","_handleHorizontalNudge","_handleVerticalNudge","topBuffer","bottomBuffer","verticalBuffer","startIndex","endIndex","leftBuffer","bufferLeft","rightBuffer","bufferRight","horizontalBuffer","newBuffer","_handleGenieActivator","genieActivator","FS_SCREEN_ID","FEATURES","WAYS_MULTIPLIER","FILL_POSITION","_get$call","parsedMultipliers","singleData","jpTiles","jp","waysMultiplier","fillPositions","_removeMultipliers","_showFsWinScreen","mplr","some","_handleUpgradeTiles","upgradeTiles","instant","DiamondBlitzParser","_handleMovingWilds","randomWildsData","skipMulti","maxMultiplier","finalMultiplier","DiceDiceDiceParser","distanceMultiplier","DivineWaysParser","cloningTileData","cloningTile","toTileC","clones","fatTilesData","fill","DragonKingLegendOfTheSeasParser","tileData","FS_FAT_TILE_ID","DEFAULT_FAT_TILE_ID","dataId","DragonsFireMegaWaysParser","DynamiteRichesParser","_handleFatWilds","_alterIndex","FEATURE_NAME","FAT_TILE_ID","TRANSPARENT_POS_ID","EMPTY_POS_ID","JP_TILE","_replaceAreaUnderFT","fatTile","ft","ElvenMagicParser","_handleIceTiles","arrowsOrder","arrow","_addJackpotTiles","EpicJourneyParser","_goldBonusTileId","_journeyBonusTileId","featName","_hasBonusMismatch","_alterTilesOnBonusMismatch","bonusTileIndex","bonusType","_countTilesWithId","horizontalReel","featureReelsData","FlodderParser","FortuneCatParser","randomWildsMega","randomWildsSuper","randomWildsBig","randomWilds","FortuneCharmParser","_wildTileId","_handleFortuneCharms","_alterWinWaysData","winWaysData","tileIdToRemove","_reCalcTilesMatrix","winWayData","tileMatrixCopy","activePosIndices","reelData","_getOnlyActivePosIndices","tileFlag","_reelHasMoreWilds","flag","tileIndices","wildsCount","FortuneHouseParser","_modifierFeaturesList","_generateRespinData","fortuneRespin","featureTiles","respinsCount","capitalizedFeature","toUpperCase","featureRespin","_getModifiedBuffer","GemsGoneWildPowerReelsParser","lockedTiles","GemsGoneWildParser","lockedWildGems","lockedTilesData","rainbowGem","diamonds","_this2$_handleMultipl","_this2$_handleMultipl2","GemtasticParser","GenieNightsParser","hasLampBonus","activator","features","SCATTERS","TEXT_SCATTERS_IDS","scatter","_handleWreaths","GoldenLeprechaunMegaWaysParser","_handleLuckyLine","_handleWildStacks","wildStacksData","currentReel","stack","GoldenOfferParser","GonzosQuestMegaWaysParser","_alterRespinsResult","indexOfEntryWithFs","findIndex","_handleInstantWinJackpot","featureData","bonusWheelSymbolsCount","_getBonusSymbolsCount","bonusSymbolsCount","HammerGodsParser","_handleSwapData","DIAMOND_APPLE_ID","_handleDiamondApples","HoardOfPoseidonParser","_handleExpandTiles","_handleCloningTiles","expandTiles","cloningTiles","HotHotChilliPotParser","ImperialPalaceParser","_handleRandomTilesBeer","_handlePipeTiles","randomTilesBeer","tileLeft","min","minBottomTile","JewelScarabsParser","reelsData","JingleBellsPowerReelsParser","JingleWaysMegaWaysParser","JoeExoticParser","screenExpand","_trimEmpty","_trimEmptyColumns","_trimEmptyRows","firstColumn","lastColumn","_isEmpty","times","tilesPerReel","firstRow","lastRow","columnEmpty","_getFirstTile","LastChanceSaloonParser","_getSelectedChoice","hasJackpotWins","modifier","bonusAmount","LegendaryExcaliburParser","fatTilesOnReel","where","flat","LionDanceParser","MYSTERY_TILE","LionsHoardParser","_handleMysterySwap","_data$featureName","swappedPositions","LOCKED_TILES","hasInstantWin","hasWaysMultiplier","hasBonus","prioritizedValue","multi","model","multiPrefix","f","_this3$_handleMultipl","LuckyDevilParser","LuckyMrGreenParser","_handleactOfGenerosity","raogData","_handleSwapTiles","swapTiles","LunaFortunaParser","_moveTile","movedTile","FAT_TILES_IDS","swapFatTiles","MajesticMysteriesPowerReelsParser","MasqueradeParser","tilesCount","MayanGodsParser","_handleFeatureTiles","featData","MegaDragonParser","flatData","_alterReelsTiles","_getStartReelIndex2","_getStartReelIndex","cloningData","_toWays","newWinLines","mainData","hasWheel","_hasFeature","selectedChoice","price","direction","_clearConsecutiveIndexes","lastIndex","mysterySwap","_handleMysteryTiles","NarcosMexicoParser","zonesToTiles","8","9","hasWinExchange","freeSpinsPrice","winExchangeBonus","NeonLinksParser","_handleRandomRandomRows","randomRows","sequenceArray","tileArray","PaddyPowerGoldMegaWaysParser","PeggySweetsParser","PersianFortuneParser","_handleMovingTiles","_handleFirstRow","unlocked","PiratesPlentyMegaWaysParser","_handleSixthReel","hasRespinProgress","lastProgress","PussNBootsParser","RAsLegendParser","freeSpinsMega","freeSpinMega","RainbowJackpotsParser","ReelHeistParser","_handleCop","_handleThieves","saveCop","copCheck","cop","reelTo","ReelKingSlotParser","_handleLinesLength","visible","ReptizillionsPowerReelsParser","_handleFsScatters","_ref$to","_getScatterData2","_getScatterData","_setTileIds","visibleTiles","EMPTY_TILES_ID","REDUNDANT_TILES_ID","TOP_HORIZONTAL_REEL_INDEX","BOTTOM_HORIZONTAL_REEL_INDEX","maxReelHeight","RobinHoodsWildForestParser","_applyTiles","locksData","_parseData","targetTiles","parsed","extraPositions","RocketMenParser","_donGolfClub","_handleNuclearSpins","respinArray","nukeSpinsData","kimsNukes","missiles","Kim","donsNukes","Don","explode","bonusTypes","senior","reelType","rowType","_data$progress","currentReels","activeReels","currentRows","activeRows","_data$progressBonus","progressBonus","progressType","progressValue","_data$reels","featuresData","dwarf","_handleDwarf","toLocaleLowerCase","_handleDwarf3","wild","dwarf3","SpinTownParser","_handleWildMultiplier","filterItem","SCATTER_TILE","EMPTY_FS_TILE","ACTIVATED_SCATTER_TILE","_replaceTiles","_handleScatters","fromId","toId","SunFortuneParser","TenElementsParser","TenThousandAndOneNightsParser","mysteryTiles","hatterSwaps","lastSwapId","batchIndex","_handleLockedShields","lockedShields","shield","ThorsVengeanceParser","ThreeKingdomsParser","linesWin","porthosWilds","aramisWilds","athosWilds","TotemLightningPowerReelsParser","TotemLightningParser","FAT_TILES","RANDOM_WILDS","RANDOM_WAYS","randomWays","_handleFatWild","fatWild","currReel","currIndex","PREFIX_ID","VaultCrackerParser","TILE_ID","WellOfWishesParser","EXPAND_TYPES","REEL","ROW","WheelOfAmpParser","wheelBonus","_ref$progress","expandType","visibleReelsCount","visibleRowsCount","WildCircusParser","_handleJesters","flameBreatherData","bearBalanceData","WildElementsParser","_handleSwapFatTiles","cachedLockedTiles","_cacheLockedTiles","cachedTile","WildHotChilliReelsParser","WildNordsParser","WildWildChestParser","maxChests","_handleNudgeFatTiles","respinId","lockedTilesId","nudgeFatTilesData","nudgeFatTiles","WinEscalatorParser","batchOfTiles","WinterWondersParser","_expandReels","_data$expandReels","expandReels","expandedReels","NSGParser","_instance","_code","freespin_id","_gameConfig","_response","_config","Manager","getTile","getResponse","reelTypeFS","flip","sc","Y2X","setResponse","setGameData","nsp","mwg","raw","getLines","multiWays","reelsManager","isLinesGame","lineIds","highlighTiles","winningMul","winning","_calcLine","winSingleMul","winMul","lineCells","winStart","winCount","hit","injectReelPosition","injectReel","historyReelTiles","sy","Number","mul","collectorReels","cols","reel_id","manager","gameType","ReelsManager","isCollector","_convertCollectorToReels","c1","c2","overlayTile","t","randomWildOverlay","mysteryOverlay","randomSymbolsOverlay","lockedSymbolsOverlay","overlay","longTilesOverlay","fatTileOverlay","match","flipCoin","flipSymbol","reelsCashBefore","remapBonusSymbols","tileParse","scope","totalWinning","spinsLen","_Manager","isMWG","success","_getOtherWins","isInteger","_getReels","_getFreeSpins","reactions","types","accumulate","g","multiplierBonusWin","_getMultiplierBonus","expand","expandTileOverlayWin","tilesMod","action","cashCollector","gameResult","featureBuy","win_correction","collector","_getJackpotsWin","toFixed","NSGSlotParser","LeprechaunsMagicSlotParser","GoldenLampsSlotParser","GoldenToadSlotParser","NeptunesRichesSlotParser","ChineseWildsSlotParser","ElephantTreasureSlotParser","RedHotSlotSlotParser","MacauRacingSlotParser","LuckyCarnivalSlotParser","AsianFortuneSlotParser","DragonPearlSlotParser","AliBabasLuckSlotParser","CasinoSpinSlotParser","LeprechaunsMagicMegawaysSlotParser","AliBabasLuckMegawaysSlotParser","AliBabasLuckPowerReelsSlotParser","LeprechaunsMagicPowerReelsSlotParser","CobraQueenSlotParser","DreamDestinySlotParser","AmazonIslandMegaWaysSlotParser","EpicTreasureSlotParser","EightysSpinsSlotParser","WantedWildzSlotParser","CottonGangAffairSlotParser","DesertLegendsSpinsSlotParser","JellyMULTIHOPSSlotParser","BigBassAdventureSlotParser","setGameConfig","max","translateTile","GottonGangAffairSlotParser","flippedReels","M","Cards","InfoRoulette","KeyValueMap","CayTableParser","_getPartials","outcome","_mapKeys","_data$responses$","combine","actualWins","_filterWins","_extractSubKeys","_parseObject","winner","cards","number","ballPosition","stakes","groups","numbers","names","color","pattern","extractFn","orderIndex","small_big","even_odd","matches","dozen","six_line","straight","street","trio","corner","lower","second","matched","groupName","order","sortedGroups","splice","totalStake","sub","group","acc","_extractGroup","collection","BlackJackParser","ThreeCardBragParser","VideoPokerParser","Hands","InfoBlackJack","HANDS_ORDER","currData","nextResponse","hands","extractHands","extractWinDetails","sideBets","extractSideBets","handScores","extractHandInfo","extractTotalStake","totalSideBetsStake","totalWins","responseHandled","userData","dealer","dealerHand","lastPayouts","playersHand","handPosition","key_str","key_split","hasInsurance","isInsured","playersSplitHand","handsObj","sortHandsOrder","hand","uniqueAction","hasBlackjack","isDoubled","score","sum","handName","sideBet","winObj","mappedWinObj","splitted","insuranceArray","handObj","playerHand","ante","fixCardsFormat","fixedCards","card","HANDS_TYPE","something","playerHands","handId","combinationName","winningCombination","InfoPuntoBanco","DopTableParser","ClassicBlackjack","DONDBlackjack","PlatinumBlackjack","PlatinumBlackjackSideBetsPA","handsData","extractSidebetTotalStake","offerState","isSurrendered","Boolean","flatMap","sidebetsArray","handType","CacheHelper","_args$lang","onProgress","onError","promises","override","parseGameName","getTranslationsFile","translations","subLang","substring","Promise","all","catch","imageType","getManifestFile","file","images","localized","src","getImages","tilesDataParser","overrides","provider","timestamp","cache","resolve","manifest","locale","RIGHT_POSITION_CURRENCIES","_symbol","_position","_thousands","_decimals","_digits","_formatting","_exists","cfg","singleton","format","digits","currency","assetsHelper","getTranslations","currenrFbName","EXCLUDED_PROPS","pow","prop","isFinite","decPoint","thousandsSep","prec","sep","dec","tail","_texts","supported","_default","baseCode","substr","trim","BlackjackOriginal","BlackjackOriginalSideBets","BlackjackOriginalCashOut","BlackjackClassic","RouletteClassic","RouletteOriginalMoneyBack","RouletteOriginalStats","paddyMars","BlackjackPremiumSideBets","toSlash","ROULETTE_COLORS","red","black","SUITS","v1","v2","hideDecimal","hideZero","lvalue","operator","rvalue","+","-","*","/","%","comparator",">=","<=","selectedIndex","currentIndex","timeStringUTC","utc","local","num","isNumber","keyword","loose","text","getCardSuit","suit","mode","_root$data$winDetails","_root$data$winDetails2","_options$type","getSpecific","_options$type2","_getSpecific2","image","asset","objects","found","suitCode","HandlebarsCompiler","depth0","stack1","alias1","alias2","helperMissing","alias3","translate","player","getCardAsset","banker","formatSum","unless","getCardSuitAsset","getCardRank","10","isBonusRound","transactionDetails","12","13","14","16","18","localTime","19","notUndefinedOrNull","20","translateTableWinner","translateFromKey","11","15","getNumberColor","limitedWinTotal","detailsData","ifNot","compactView","regulationsData","helper","alias4","prefix","label","winLinesDetails","lineIdPrefix","linesData","math","hasMultiplierFeature","getTileAsset","getMultipliers","hasHorizontalReels","gId","afterBet","isVoucher","17","ifNum","validNumber","isWays","compare","isCluster","isScatter","alias5","22","24","translateScratchGameText","25","26","27","translateOtherWin","29","30","31","33","34","36","37","38","40","41","42","44","46","47","49","spinScreen","aPath","23","isDemo","demoRoundNote","freeRoundNote","43","45","isFreeSpinsScatterWin","48","50","51","52","54","55","56","58","60","62","63","65","66","spinDetails","67","68","70","71","73","74","75","76","77","78","80","82","83","84","jackpotDetails","86","88","89","90","92","94","96","21","28","32","39","98","99"],"mappings":"AAAA;ACyBA,QAASA,gBACFC,KAAKC,SAAYC,OAAOC,UAAUC,eAAeC,KAAKL,KAAM,aAC/DA,KAAKC,QAAUK,aAAa,MAC5BN,KAAKO,aAAe,GAGtBP,KAAKQ,cAAgBR,KAAKQ,mBAAiBC,GA+C7C,QAASC,kBAAiBC,GACxB,WAA2BF,KAAvBE,EAAKH,cACAT,aAAaa,oBACfD,EAAKH,cAYd,QAASK,UAASC,EAASC,EAAMC,GAC/B,GAAID,EACFD,EAAQT,KAAKW,OAIb,KAAK,GAFDC,GAAMH,EAAQI,OACdC,EAAYC,WAAWN,EAASG,GAC3BI,EAAI,EAAGA,EAAIJ,IAAOI,EACzBF,EAAUE,GAAGhB,KAAKW,GAGxB,QAASM,SAAQR,EAASC,EAAMC,EAAMO,GACpC,GAAIR,EACFD,EAAQT,KAAKW,EAAMO,OAInB,KAAK,GAFDN,GAAMH,EAAQI,OACdC,EAAYC,WAAWN,EAASG,GAC3BI,EAAI,EAAGA,EAAIJ,IAAOI,EACzBF,EAAUE,GAAGhB,KAAKW,EAAMO,GAG9B,QAASC,SAAQV,EAASC,EAAMC,EAAMO,EAAME,GAC1C,GAAIV,EACFD,EAAQT,KAAKW,EAAMO,EAAME,OAIzB,KAAK,GAFDR,GAAMH,EAAQI,OACdC,EAAYC,WAAWN,EAASG,GAC3BI,EAAI,EAAGA,EAAIJ,IAAOI,EACzBF,EAAUE,GAAGhB,KAAKW,EAAMO,EAAME,GAGpC,QAASC,WAAUZ,EAASC,EAAMC,EAAMO,EAAME,EAAME,GAClD,GAAIZ,EACFD,EAAQT,KAAKW,EAAMO,EAAME,EAAME,OAI/B,KAAK,GAFDV,GAAMH,EAAQI,OACdC,EAAYC,WAAWN,EAASG,GAC3BI,EAAI,EAAGA,EAAIJ,IAAOI,EACzBF,EAAUE,GAAGhB,KAAKW,EAAMO,EAAME,EAAME,GAI1C,QAASC,UAASd,EAASC,EAAMC,EAAMa,GACrC,GAAId,EACFD,EAAQgB,MAAMd,EAAMa,OAIpB,KAAK,GAFDZ,GAAMH,EAAQI,OACdC,EAAYC,WAAWN,EAASG,GAC3BI,EAAI,EAAGA,EAAIJ,IAAOI,EACzBF,EAAUE,GAAGS,MAAMd,EAAMa,GA6D/B,QAASE,cAAaC,EAAQC,EAAMC,EAAUC,GAC5C,GAAIC,GACAC,EACAC,CAEJ,IAAwB,kBAAbJ,GACT,KAAM,IAAIK,WAAU,yCAoBtB,IAlBAF,EAASL,EAAO/B,QACXoC,GAMCA,EAAOG,cACTR,EAAOS,KAAK,cAAeR,EACvBC,EAASA,SAAWA,EAASA,SAAWA,GAI5CG,EAASL,EAAO/B,SAElBqC,EAAWD,EAAOJ,KAblBI,EAASL,EAAO/B,QAAUK,aAAa,MACvC0B,EAAOzB,aAAe,GAenB+B,GAmBH,GAdwB,kBAAbA,GAETA,EAAWD,EAAOJ,GACdE,GAAWD,EAAUI,IAAaA,EAAUJ,GAG5CC,EACFG,EAASI,QAAQR,GAEjBI,EAASK,KAAKT,IAKbI,EAASM,SACZR,EAAI1B,iBAAiBsB,KACZI,EAAI,GAAKE,EAASpB,OAASkB,EAAG,CACrCE,EAASM,QAAS,CAClB,IAAIC,GAAI,GAAIC,OAAM,+CACdR,EAASpB,OAAS,KAAO6B,OAAOd,GAAQ,sEAG5CY,GAAEG,KAAO,8BACTH,EAAEI,QAAUjB,EACZa,EAAEZ,KAAOA,EACTY,EAAEK,MAAQZ,EAASpB,OACI,gBAAZiC,UAAwBA,QAAQC,MACzCD,QAAQC,KAAK,SAAUP,EAAEG,KAAMH,EAAEQ,cA9BvCf,GAAWD,EAAOJ,GAAQC,IACxBF,EAAOzB,YAmCX,OAAOyB,GAcT,QAASsB,eACP,IAAKtD,KAAKuD,MAGR,OAFAvD,KAAKgC,OAAOwB,eAAexD,KAAKiC,KAAMjC,KAAKyD,QAC3CzD,KAAKuD,OAAQ,EACLG,UAAUxC,QAChB,IAAK,GACH,MAAOlB,MAAKkC,SAAS7B,KAAKL,KAAKgC,OACjC,KAAK,GACH,MAAOhC,MAAKkC,SAAS7B,KAAKL,KAAKgC,OAAQ0B,UAAU,GACnD,KAAK,GACH,MAAO1D,MAAKkC,SAAS7B,KAAKL,KAAKgC,OAAQ0B,UAAU,GAAIA,UAAU,GACjE,KAAK,GACH,MAAO1D,MAAKkC,SAAS7B,KAAKL,KAAKgC,OAAQ0B,UAAU,GAAIA,UAAU,GAC3DA,UAAU,GAChB,SAEE,IAAK,GADD7B,GAAO,GAAI8B,OAAMD,UAAUxC,QACtBG,EAAI,EAAGA,EAAIQ,EAAKX,SAAUG,EACjCQ,EAAKR,GAAKqC,UAAUrC,EACtBrB,MAAKkC,SAASJ,MAAM9B,KAAKgC,OAAQH,IAKzC,QAAS+B,WAAU5B,EAAQC,EAAMC,GAC/B,GAAI2B,IAAUN,OAAO,EAAOE,WAAQhD,GAAWuB,OAAQA,EAAQC,KAAMA,EAAMC,SAAUA,GACjF4B,EAAUC,KAAK1D,KAAKiD,YAAaO,EAGrC,OAFAC,GAAQ5B,SAAWA,EACnB2B,EAAMJ,OAASK,EACRA,EA0HT,QAASE,YAAWhC,EAAQC,EAAMgC,GAChC,GAAI5B,GAASL,EAAO/B,OAEpB,KAAKoC,EACH,QAEF,IAAI6B,GAAa7B,EAAOJ,EACxB,OAAKiC,GAGqB,kBAAfA,GACFD,GAAUC,EAAWhC,UAAYgC,IAAeA,GAElDD,EAASE,gBAAgBD,GAAc9C,WAAW8C,EAAYA,EAAWhD,WAoBlF,QAASkD,eAAcnC,GACrB,GAAII,GAASrC,KAAKC,OAElB,IAAIoC,EAAQ,CACV,GAAI6B,GAAa7B,EAAOJ,EAExB,IAA0B,kBAAfiC,GACT,MAAO,EACF,IAAIA,EACT,MAAOA,GAAWhD,OAItB,MAAO,GAQT,QAASmD,WAAUC,EAAMC,GACvB,IAAK,GAAIlD,GAAIkD,EAAOC,EAAInD,EAAI,EAAGoD,EAAIH,EAAKpD,OAAQsD,EAAIC,EAAGpD,GAAK,EAAGmD,GAAK,EAClEF,EAAKjD,GAAKiD,EAAKE,EACjBF,GAAKI,MAGP,QAAStD,YAAWuD,EAAKF,GAEvB,IAAK,GADDG,GAAO,GAAIjB,OAAMc,GACZpD,EAAI,EAAGA,EAAIoD,IAAKpD,EACvBuD,EAAKvD,GAAKsD,EAAItD,EAChB,OAAOuD,GAGT,QAAST,iBAAgBQ,GAEvB,IAAK,GADDE,GAAM,GAAIlB,OAAMgB,EAAIzD,QACfG,EAAI,EAAGA,EAAIwD,EAAI3D,SAAUG,EAChCwD,EAAIxD,GAAKsD,EAAItD,GAAGa,UAAYyC,EAAItD,EAElC,OAAOwD,GAGT,QAASC,sBAAqBC,GAC5B,GAAIC,GAAI,YAER,OADAA,GAAE7E,UAAY4E,EACP,GAAIC,GAEb,QAASC,oBAAmBC,GAC1B,GAAIC,KACJ,KAAK,GAAIX,KAAKU,GAAShF,OAAOC,UAAUC,eAAeC,KAAK6E,EAAKV,IAC/DW,EAAKxC,KAAK6B,EAEZ,OAAOA,GAET,QAASY,sBAAqBC,GAC5B,GAAIC,GAAKtF,IACT,OAAO,YACL,MAAOsF,GAAGxD,MAAMuD,EAAS3B,YAnf7B,GAAIpD,cAAeJ,OAAOqF,QAAUT,qBAChCU,WAAatF,OAAOiF,MAAQF,mBAC5BlB,KAAO0B,SAAStF,UAAU4D,MAAQqB,oBAUtCM,QAAOC,QAAU5F,aAGjBA,aAAaA,aAAeA,aAE5BA,aAAaI,UAAUF,YAAUQ,GACjCV,aAAaI,UAAUK,kBAAgBC,EAIvC,IAAIG,qBAAsB,GAEtBgF,iBACJ,KACE,GAAIC,KACA3F,QAAO4F,gBAAgB5F,OAAO4F,eAAeD,EAAG,KAAOE,MAAO,IAClEH,kBAA4B,IAARC,EAAEG,EACtB,MAAOC,GAAOL,mBAAoB,EAChCA,kBACF1F,OAAO4F,eAAe/F,aAAc,uBAClCmG,YAAY,EACZC,IAAK,WACH,MAAOvF,sBAETwF,IAAK,SAASC,GAGZ,GAAmB,gBAARA,IAAoBA,EAAM,GAAKA,IAAQA,EAChD,KAAM,IAAI9D,WAAU,kDACtB3B,qBAAsByF,KAI1BtG,aAAaa,oBAAsBA,oBAKrCb,aAAaI,UAAUmG,gBAAkB,SAAyB7B,GAChE,GAAiB,gBAANA,IAAkBA,EAAI,GAAK8B,MAAM9B,GAC1C,KAAM,IAAIlC,WAAU,yCAEtB,OADAvC,MAAKQ,cAAgBiE,EACdzE,MASTD,aAAaI,UAAUqG,gBAAkB,WACvC,MAAO9F,kBAAiBV,OA4D1BD,aAAaI,UAAUsC,KAAO,SAAcR,GAC1C,GAAIwE,GAAI3F,EAASG,EAAKY,EAAMR,EAAGgB,EAC3BqE,EAAoB,UAATzE,CAGf,IADAI,EAASrC,KAAKC,QAEZyG,EAAWA,GAA2B,MAAhBrE,EAAOsE,UAC1B,KAAKD,EACR,OAAO,CAGT,IAAIA,EAAS,CAGX,GAFIhD,UAAUxC,OAAS,IACrBuF,EAAK/C,UAAU,IACb+C,YAAc3D,OAChB,KAAM2D,EAGN,IAAIR,GAAM,GAAInD,OAAM,6BAA+B2D,EAAK,IAExD,MADAR,GAAIZ,QAAUoB,EACRR,EAOV,KAFAnF,EAAUuB,EAAOJ,IAGf,OAAO,CAET,IAAIlB,GAA0B,kBAAZD,EAElB,QADAG,EAAMyC,UAAUxC,QAGd,IAAK,GACHL,SAASC,EAASC,EAAMf,KACxB,MACF,KAAK,GACHsB,QAAQR,EAASC,EAAMf,KAAM0D,UAAU,GACvC,MACF,KAAK,GACHlC,QAAQV,EAASC,EAAMf,KAAM0D,UAAU,GAAIA,UAAU,GACrD,MACF,KAAK,GACHhC,UAAUZ,EAASC,EAAMf,KAAM0D,UAAU,GAAIA,UAAU,GAAIA,UAAU,GACrE,MAEF,SAEE,IADA7B,EAAO,GAAI8B,OAAM1C,EAAM,GAClBI,EAAI,EAAGA,EAAIJ,EAAKI,IACnBQ,EAAKR,EAAI,GAAKqC,UAAUrC,EAC1BO,UAASd,EAASC,EAAMf,KAAM6B,GAGlC,OAAO,GAsET9B,aAAaI,UAAUyG,YAAc,SAAqB3E,EAAMC,GAC9D,MAAOH,cAAa/B,KAAMiC,EAAMC,GAAU,IAG5CnC,aAAaI,UAAU0G,GAAK9G,aAAaI,UAAUyG,YAEnD7G,aAAaI,UAAU2G,gBACnB,SAAyB7E,EAAMC,GAC7B,MAAOH,cAAa/B,KAAMiC,EAAMC,GAAU,IAkChDnC,aAAaI,UAAU4G,KAAO,SAAc9E,EAAMC,GAChD,GAAwB,kBAAbA,GACT,KAAM,IAAIK,WAAU,yCAEtB,OADAvC,MAAK6G,GAAG5E,EAAM2B,UAAU5D,KAAMiC,EAAMC,IAC7BlC,MAGTD,aAAaI,UAAU6G,oBACnB,SAA6B/E,EAAMC,GACjC,GAAwB,kBAAbA,GACT,KAAM,IAAIK,WAAU,yCAEtB,OADAvC,MAAK8G,gBAAgB7E,EAAM2B,UAAU5D,KAAMiC,EAAMC,IAC1ClC,MAIbD,aAAaI,UAAUqD,eACnB,SAAwBvB,EAAMC,GAC5B,GAAIoC,GAAMjC,EAAQ4E,EAAU5F,EAAG6F,CAE/B,IAAwB,kBAAbhF,GACT,KAAM,IAAIK,WAAU,yCAGtB,MADAF,EAASrC,KAAKC,SAEZ,MAAOD,KAGT,MADAsE,EAAOjC,EAAOJ,IAEZ,MAAOjC,KAET,IAAIsE,IAASpC,GAAYoC,EAAKpC,WAAaA,EACb,KAAtBlC,KAAKO,aACTP,KAAKC,QAAUK,aAAa,aAErB+B,GAAOJ,GACVI,EAAOmB,gBACTxD,KAAKyC,KAAK,iBAAkBR,EAAMqC,EAAKpC,UAAYA,QAElD,IAAoB,kBAAToC,GAAqB,CAGrC,IAFA2C,GAAY,EAEP5F,EAAIiD,EAAKpD,OAAS,EAAGG,GAAK,EAAGA,IAChC,GAAIiD,EAAKjD,KAAOa,GAAYoC,EAAKjD,GAAGa,WAAaA,EAAU,CACzDgF,EAAmB5C,EAAKjD,GAAGa,SAC3B+E,EAAW5F,CACX,OAIJ,GAAI4F,EAAW,EACb,MAAOjH,KAEQ,KAAbiH,EACF3C,EAAK6C,QAEL9C,UAAUC,EAAM2C,GAEE,IAAhB3C,EAAKpD,SACPmB,EAAOJ,GAAQqC,EAAK,IAElBjC,EAAOmB,gBACTxD,KAAKyC,KAAK,iBAAkBR,EAAMiF,GAAoBhF,GAG1D,MAAOlC,OAGbD,aAAaI,UAAUiH,mBACnB,SAA4BnF,GAC1B,GAAId,GAAWkB,EAAQhB,CAGvB,MADAgB,EAASrC,KAAKC,SAEZ,MAAOD,KAGT,KAAKqC,EAAOmB,eAUV,MATyB,KAArBE,UAAUxC,QACZlB,KAAKC,QAAUK,aAAa,MAC5BN,KAAKO,aAAe,GACX8B,EAAOJ,KACY,KAAtBjC,KAAKO,aACTP,KAAKC,QAAUK,aAAa,YAErB+B,GAAOJ,IAEXjC,IAIT,IAAyB,IAArB0D,UAAUxC,OAAc,CAC1B,GACImG,GADAlC,EAAOK,WAAWnD,EAEtB,KAAKhB,EAAI,EAAGA,EAAI8D,EAAKjE,SAAUG,EAEjB,oBADZgG,EAAMlC,EAAK9D,KAEXrB,KAAKoH,mBAAmBC,EAK1B,OAHArH,MAAKoH,mBAAmB,kBACxBpH,KAAKC,QAAUK,aAAa,MAC5BN,KAAKO,aAAe,EACbP,KAKT,GAAyB,mBAFzBmB,EAAYkB,EAAOJ,IAGjBjC,KAAKwD,eAAevB,EAAMd,OACrB,IAAIA,EAET,IAAKE,EAAIF,EAAUD,OAAS,EAAGG,GAAK,EAAGA,IACrCrB,KAAKwD,eAAevB,EAAMd,EAAUE,GAIxC,OAAOrB,OAmBbD,aAAaI,UAAUgB,UAAY,SAAmBc,GACpD,MAAO+B,YAAWhE,KAAMiC,GAAM,IAGhClC,aAAaI,UAAUmH,aAAe,SAAsBrF,GAC1D,MAAO+B,YAAWhE,KAAMiC,GAAM,IAGhClC,aAAaqE,cAAgB,SAASnB,EAAShB,GAC7C,MAAqC,kBAA1BgB,GAAQmB,cACVnB,EAAQmB,cAAcnC,GAEtBmC,cAAc/D,KAAK4C,EAAShB,IAIvClC,aAAaI,UAAUiE,cAAgBA,cAiBvCrE,aAAaI,UAAUoH,WAAa,WAClC,MAAOvH,MAAKO,aAAe,EAAIiH,QAAQC,QAAQzH,KAAKC;;oQCpdtD,QAASsF,UACP,GAAImC,GAAK,GAAIC,MAAKC,qBAalB,OAXAC,OAAMC,OAAOJ,EAAIC,MACjBD,EAAGK,WAAUC,uBAAA,QACbN,EAAGO,UAASC,sBAAA,QACZR,EAAGG,MAAQA,MACXH,EAAGS,iBAAmBN,MAAMM,iBAE5BT,EAAGU,GAAKC,QACRX,EAAGY,SAAW,SAASC,GACrB,MAAOF,SAAQC,SAASC,EAAMb,IAGzBA,oDA1Ba,qBAAVC,KAAIa,wBAAAC,+CAIO,8HACD,sHACC,sBAAXZ,MAAKW,wBAAAE,6CACQ,wBAAbL,QAAOG,wBAAAG,kDAEI,iGAoBnBC,KAAOrD,QACXqD,MAAKrD,OAASA,OAEdsD,uBAAA,QAAWD,MAEXA,KAAc,QAAIA,qBAEHA;;qFCfR,QAAShB,uBAAsBkB,EAASC,EAAUC,GACvDhJ,KAAK8I,QAAUA,MACf9I,KAAK+I,SAAWA,MAChB/I,KAAKgJ,WAAaA,MAElBC,SAAAC,uBAAuBlJ,MACvBmJ,YAAAC,0BAA0BpJ,mGA3BgB,8BACtB,+EACe,iCACG,gCACrB,qDAENqJ,QAAU,+BAChB,IAAMC,mBAAoB,6CAE1B,IAAMC,mBACXC,EAAG,cACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,WACHC,EAAG,mBACHC,EAAG,kBACHC,EAAG,qDAGL,IAAMC,YAAa,iBAWnBnC,uBAAsBzH,WACpB6J,YAAapC,sBAEbqC,OAAMC,SAAA,QACNC,IAAKD,SAAA,QAAOC,IAEZC,eAAgB,SAASpH,EAAMsC,GAC7B,GAAI+E,OAAAC,SAASjK,KAAK2C,KAAU+G,WAAY,CACtC,GAAIzE,EAAM,KAAM,IAAAiF,aAAA,QAAc,0CAC9BF,QAAAvC,OAAO9H,KAAK8I,QAAS9F,OAErBhD,MAAK8I,QAAQ9F,GAAQsC,GAGzBkF,iBAAkB,SAASxH,SAClBhD,MAAK8I,QAAQ9F,IAGtByH,gBAAiB,SAASzH,EAAM0H,GAC9B,GAAIL,OAAAC,SAASjK,KAAK2C,KAAU+G,WAC1BM,OAAAvC,OAAO9H,KAAK+I,SAAU/F,OACjB,CACL,OAAuB,KAAZ0H,EACT,KAAM,IAAAH,aAAA,QAAA,4CAA0DvH,EAAI,iBAEtEhD,MAAK+I,SAAS/F,GAAQ0H,IAG1BC,kBAAmB,SAAS3H,SACnBhD,MAAK+I,SAAS/F,IAGvB4H,kBAAmB,SAAS5H,EAAMsC,GAChC,GAAI+E,OAAAC,SAASjK,KAAK2C,KAAU+G,WAAY,CACtC,GAAIzE,EAAM,KAAM,IAAAiF,aAAA,QAAc,6CAC9BF,QAAAvC,OAAO9H,KAAKgJ,WAAYhG,OAExBhD,MAAKgJ,WAAWhG,GAAQsC,GAG5BuF,oBAAqB,SAAS7H,SACrBhD,MAAKgJ,WAAWhG,IAIpB,IAAImH,KAAMD,SAAA,QAAOC,4BAEhBW,YAAWT,OAAAS,oBAAEb,OAAMC,SAAA;;qFC3EpB,QAASd,2BAA0B2B,GACxCC,mBAAA,QAAeD,mHAHU;;sDCAN,4BAEN,SAASA,GACtBA,EAASH,kBAAkB,SAAU,SAAStF,EAAI2F,EAAOC,EAAWC,GAClE,GAAItG,GAAMS,CAeV,OAdK2F,GAAMlC,WACTkC,EAAMlC,YACNlE,EAAM,SAASQ,EAAS8F,GAEtB,GAAIC,GAAWF,EAAUnC,QACzBmC,GAAUnC,SAAWsB,OAAAvC,UAAWsD,EAAUH,EAAMlC,SAChD,IAAIlE,GAAMS,EAAGD,EAAS8F,EAEtB,OADAD,GAAUnC,SAAWqC,EACdvG,IAIXoG,EAAMlC,SAASoC,EAAQtJ,KAAK,IAAMsJ,EAAQ7F,GAEnCT;;YChBX,SAASoD,WAAU5E,EAASgI,GAC1B,GAAIC,GAAMD,GAAQA,EAAKC,IACnBC,MAAI9K,GACJ+K,MAAM/K,EACN6K,KACFC,EAAOD,EAAIG,MAAMF,KACjBC,EAASF,EAAIG,MAAMD,OAEnBnI,GAAW,MAAQkI,EAAO,IAAMC,EAMlC,KAAK,GAHDE,GAAM5I,MAAM3C,UAAU6J,YAAY3J,KAAKL,KAAMqD,GAGxCsI,EAAM,EAAGA,EAAMC,WAAW1K,OAAQyK,IACzC3L,KAAK4L,WAAWD,IAAQD,EAAIE,WAAWD,GAIrC7I,OAAM+I,mBACR/I,MAAM+I,kBAAkB7L,KAAMiI,UAGhC,KACMqD,IACFtL,KAAK8L,WAAaP,EAIdrL,OAAO4F,eACT5F,OAAO4F,eAAe9F,KAAM,UAC1B+F,MAAOyF,EACPtF,YAAY,IAGdlG,KAAKwL,OAASA,GAGlB,MAAOO,0BAxCX,IAAMH,aAAc,cAAe,WAAY,aAAc,UAAW,OAAQ,SAAU,QA6C1F3D,WAAU9H,UAAY,GAAI2C,uBAEXmF;;qFCxCR,QAASiB,wBAAuB6B,GACrCiB,4BAAA,QAA2BjB,GAC3BkB,cAAA,QAAalB,GACbmB,uBAAA,QAAsBnB,GACtBoB,YAAA,QAAWpB,GACXqB,aAAA,QAAYrB,GACZsB,gBAAA,QAAetB,GACfuB,cAAA,QAAavB,sHAfwB,sIACd,mGACS,oHACX,mFACC,yFACG,gGACF;;sDCN6B,4BAEvC,SAASA,GACtBA,EAASX,eAAe,qBAAsB,SAAS/E,EAAS8F,GAC9D,GAAIoB,GAAUpB,EAAQoB,QAClBjH,EAAK6F,EAAQ7F,EAEjB,KAAgB,IAAZD,EACF,MAAOC,GAAGtF,KACL,KAAgB,IAAZqF,GAAgC,MAAXA,EAC9B,MAAOkH,GAAQvM,KACV,IAAIqK,OAAAmC,QAAQnH,GACjB,MAAIA,GAAQnE,OAAS,GACfiK,EAAQsB,MACVtB,EAAQsB,KAAOtB,EAAQnI,OAGlB+H,EAASjC,QAAQ4D,KAAKrH,EAAS8F,IAE/BoB,EAAQvM,KAGjB,IAAImL,EAAQwB,MAAQxB,EAAQsB,IAAK,CAC/B,GAAIE,GAAOtC,OAAAS,YAAYK,EAAQwB,KAC/BA,GAAKC,YAAcvC,OAAAwC,kBAAkB1B,EAAQwB,KAAKC,YAAazB,EAAQnI,MACvEmI,GAAWwB,KAAMA,GAGnB,MAAOrH,GAAGD,EAAS8F;;8HC5BsD,+BACzD,+EAEP,SAASJ,GACtBA,EAASX,eAAe,OAAQ,SAAS/E,EAAS8F,GAsBhD,QAAS2B,GAAcC,EAAOxI,EAAOyI,GAC/BL,IACFA,EAAKtF,IAAM0F,EACXJ,EAAKpI,MAAQA,EACboI,EAAKM,MAAkB,IAAV1I,EACboI,EAAKK,OAASA,EAEVJ,IACFD,EAAKC,YAAcA,EAAcG,IAIrClI,GAAYS,EAAGD,EAAQ0H,IACrBJ,KAAMA,EACNO,YAAa7C,OAAA6C,aAAa7H,EAAQ0H,GAAQA,IAASH,EAAcG,EAAO,SAnC5E,IAAK5B,EACH,KAAM,IAAAZ,aAAA,QAAc,8BAGtB,IAAIjF,GAAK6F,EAAQ7F,GACbiH,EAAUpB,EAAQoB,QAClBlL,EAAI,EACJwD,EAAM,GACN8H,MAAIlM,GACJmM,MAAWnM,EA8Bf,IA5BI0K,EAAQwB,MAAQxB,EAAQsB,MAC1BG,EAAcvC,OAAAwC,kBAAkB1B,EAAQwB,KAAKC,YAAazB,EAAQsB,IAAI,IAAM,KAG1EpC,OAAA8C,WAAW9H,KAAYA,EAAUA,EAAQhF,KAAKL,OAE9CmL,EAAQwB,OACVA,EAAOtC,OAAAS,YAAYK,EAAQwB,OAqBzBtH,GAA8B,gBAAZA,GACpB,GAAIgF,OAAAmC,QAAQnH,GACV,IAAK,GAAI+H,GAAI/H,EAAQnE,OAAQG,EAAI+L,EAAG/L,IAC9BA,IAAKgE,IACPyH,EAAczL,EAAGA,EAAGA,IAAMgE,EAAQnE,OAAS,OAG1C,CACL,GAAImM,OAAQ5M,EAEZ,KAAK,GAAI4G,KAAOhC,GACVA,EAAQjF,eAAeiH,SAIR5G,KAAb4M,GACFP,EAAcO,EAAUhM,EAAI,GAE9BgM,EAAWhG,EACXhG,SAGaZ,KAAb4M,GACFP,EAAcO,EAAUhM,EAAI,GAAG,GASrC,MAJU,KAANA,IACFwD,EAAM0H,EAAQvM,OAGT6E;;kIC5EW,+EAEP,SAASkG,GACtBA,EAASX,eAAe,gBAAiB,WACvC,GAAyB,IAArB1G,UAAUxC,OAKZ,KAAM,IAAAqJ,aAAA,QAAc,oBAAsB7G,UAAUA,UAAUxC,OAAS,GAAG8B,KAAO;;sDCTrD,4BAEnB,SAAS+H,GACtBA,EAASX,eAAe,KAAM,SAASkD,EAAanC,GAMlD,MALId,QAAA8C,WAAWG,KAAgBA,EAAcA,EAAYjN,KAAKL,QAKxDmL,EAAQoC,KAAKC,cAAgBF,GAAgBjD,OAAAoD,QAAQH,GAClDnC,EAAQoB,QAAQvM,MAEhBmL,EAAQ7F,GAAGtF,QAItB+K,EAASX,eAAe,SAAU,SAASkD,EAAanC,GACtD,MAAOJ,GAASjC,QAAY,GAAEzI,KAAKL,KAAMsN,GAAchI,GAAI6F,EAAQoB,QAASA,QAASpB,EAAQ7F,GAAIiI,KAAMpC,EAAQoC;;mDCjBpG,SAASxC,GACtBA,EAASX,eAAe,MAAO,WAG7B,IAAK,GAFDvI,QAAQpB,IACR0K,EAAUzH,UAAUA,UAAUxC,OAAS,GAClCG,EAAI,EAAGA,EAAIqC,UAAUxC,OAAS,EAAGG,IACxCQ,EAAKc,KAAKe,UAAUrC,GAGtB,IAAIqM,GAAQ,CACc,OAAtBvC,EAAQoC,KAAKG,MACfA,EAAQvC,EAAQoC,KAAKG,MACZvC,EAAQwB,MAA8B,MAAtBxB,EAAQwB,KAAKe,QACtCA,EAAQvC,EAAQwB,KAAKe,OAEvB7L,EAAK,GAAK6L,EAEV3C,EAASZ,IAAGrI,MAAZiJ,EAAiBlJ;;mDChBN,SAASkJ,GACtBA,EAASX,eAAe,SAAU,SAASlF,EAAK6H,GAC9C,MAAO7H,IAAOA,EAAI6H;;sDCFyD,4BAEhE,SAAShC,GACtBA,EAASX,eAAe,OAAQ,SAAS/E,EAAS8F,GAC5Cd,OAAA8C,WAAW9H,KAAYA,EAAUA,EAAQhF,KAAKL,MAElD,IAAIsF,GAAK6F,EAAQ7F,EAEjB,IAAK+E,OAAAoD,QAAQpI,GAYX,MAAO8F,GAAQoB,QAAQvM,KAXvB,IAAI2M,GAAOxB,EAAQwB,IAMnB,OALIxB,GAAQwB,MAAQxB,EAAQsB,MAC1BE,EAAOtC,OAAAS,YAAYK,EAAQwB,MAC3BA,EAAKC,YAAcvC,OAAAwC,kBAAkB1B,EAAQwB,KAAKC,YAAazB,EAAQsB,IAAI,KAGtEnH,EAAGD,GACRsH,KAAMA,EACNO,YAAa7C,OAAA6C,aAAa7H,IAAWsH,GAAQA,EAAKC;;sDCjBpC,WAElB3C,QACF0D,WAAY,QAAS,OAAQ,OAAQ,SACrCD,MAAO,OAGPE,YAAa,SAASF,GACpB,GAAqB,gBAAVA,GAAoB,CAC7B,GAAIG,GAAWxD,OAAAyD,QAAQ7D,OAAO0D,UAAWD,EAAMK,cAE7CL,GADEG,GAAY,EACNA,EAEAG,SAASN,EAAO,IAI5B,MAAOA,IAITvD,IAAK,SAASuD,GAGZ,GAFAA,EAAQzD,OAAO2D,YAAYF,GAEJ,mBAAZvK,UAA2B8G,OAAO2D,YAAY3D,OAAOyD,QAAUA,EAAO,CAC/E,GAAIO,GAAShE,OAAO0D,UAAUD,EACzBvK,SAAQ8K,KACXA,EAAS,kCANS5K,EAAOM,MAAAuK,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAP9K,EAAO8K,EAAA,GAAAzK,UAAAyK,EAQ3BhL,SAAQ8K,GAAMnM,MAAdqB,QAAmBE,sBAKV4G;;;mDCjCA,SAASmE,GAEtB,GAAIC,GAAyB,mBAAXC,QAAyBA,OAASC,OAChDC,EAAcH,EAAKD,UAEvBA,GAAWK,WAAa,WAItB,MAHIJ,GAAKD,aAAeA,IACtBC,EAAKD,WAAaI,GAEbJ;;;;oQCNJ,QAASM,eAAcC,GAC5B,GAAMC,GAAmBD,GAAgBA,EAAa,IAAM,EACtDE,EAAeC,MAAAxF,iBAErB,IAAIsF,IAAqBC,EAAiB,CACxC,GAAID,EAAmBC,EAAiB,CACtC,GAAME,GAAkBD,MAAAvF,iBAAiBsF,GACnCG,EAAmBF,MAAAvF,iBAAiBqF,EAC1C,MAAM,IAAArE,aAAA,QAAc,6IAC0CwE,EAAkB,oDAAsDC,EAAmB,MAGzJ,KAAM,IAAAzE,aAAA,QAAc,wIACsCoE,EAAa,GAAK,OAK3E,QAASrG,UAAS2G,EAAcC,GAerC,QAASC,GAAqBzE,EAASrF,EAAS8F,GAC1CA,EAAQoC,OACVlI,EAAUwC,MAAMC,UAAWzC,EAAS8F,EAAQoC,MACxCpC,EAAQsB,MACVtB,EAAQsB,IAAI,IAAK,IAIrB/B,EAAUwE,EAAI9G,GAAGgH,eAAe/O,KAAKL,KAAM0K,EAASrF,EAAS8F,EAC7D,IAAIkE,GAASH,EAAI9G,GAAGkH,cAAcjP,KAAKL,KAAM0K,EAASrF,EAAS8F,EAM/D,IAJc,MAAVkE,GAAkBH,EAAIK,UACxBpE,EAAQpC,SAASoC,EAAQnI,MAAQkM,EAAIK,QAAQ7E,EAASuE,EAAaO,gBAAiBN,GACpFG,EAASlE,EAAQpC,SAASoC,EAAQnI,MAAMqC,EAAS8F,IAErC,MAAVkE,EAAgB,CAClB,GAAIlE,EAAQsE,OAAQ,CAElB,IAAK,GADDC,GAAQL,EAAOM,MAAM,MAChBtO,EAAI,EAAGuO,EAAIF,EAAMxO,OAAQG,EAAIuO,IAC/BF,EAAMrO,IAAMA,EAAI,IAAMuO,GADYvO,IAKvCqO,EAAMrO,GAAK8J,EAAQsE,OAASC,EAAMrO,EAEpCgO,GAASK,EAAMG,KAAK,MAEtB,MAAOR,GAEP,KAAM,IAAA9E,aAAA,QAAc,eAAiBY,EAAQnI,KAAO,4DAmExD,QAAS6B,GAAIQ,GAiBX,QAASyK,GAAKzK,GACZ,MAAO,GAAK4J,EAAaa,KAAK5E,EAAW7F,EAAS6F,EAAUpC,QAASoC,EAAUnC,SAAU4D,EAAMO,EAAa6C,MAlB1F5E,GAAOzH,UAAAxC,QAAA,OAAAT,KAAAiD,UAAA,MAAKA,UAAA,GAC5BiJ,EAAOxB,EAAQwB,IAEnB9H,GAAImL,OAAO7E,IACNA,EAAQT,SAAWuE,EAAagB,UACnCtD,EAAOuD,SAAS7K,EAASsH,GAE3B,IAAIoD,OAAMtP,GACNyM,EAAc+B,EAAakB,sBAAsB1P,EAarD,OAZIwO,GAAamB,YAEbL,EADE5E,EAAQ4E,OACD1K,GAAW8F,EAAQ4E,OAAO,IAAM1K,GAASgL,OAAOlF,EAAQ4E,QAAU5E,EAAQ4E,QAEzE1K,KAOdyK,EAAOQ,kBAAkBrB,EAAaa,KAAMA,EAAM5E,EAAWC,EAAQ4E,WAAcpD,EAAMO,IAC7E7H,EAAS8F,GAlIvB,IAAK+D,EACH,KAAM,IAAA3E,aAAA,QAAc,oCAEtB,KAAK0E,IAAiBA,EAAaa,KACjC,KAAM,IAAAvF,aAAA,QAAc,kCAAqC0E,GAG3DA,GAAaa,KAAKS,UAAYtB,EAAauB,OAI3CtB,EAAI9G,GAAGsG,cAAcO,EAAawB,SAoClC,IAAIvF,IACFwF,OAAQ,SAASxL,EAAKlC,GACpB,KAAMA,IAAQkC,IACZ,KAAM,IAAAqF,aAAA,QAAc,IAAMvH,EAAO,oBAAsBkC,EAEzD,OAAOA,GAAIlC,IAEb2N,OAAQ,SAASZ,EAAQ/M,GAEvB,IAAK,GADC/B,GAAM8O,EAAO7O,OACVG,EAAI,EAAGA,EAAIJ,EAAKI,IACvB,GAAI0O,EAAO1O,IAAyB,MAAnB0O,EAAO1O,GAAG2B,GACzB,MAAO+M,GAAO1O,GAAG2B,IAIvB4N,OAAQ,SAASC,EAASxL,GACxB,MAA0B,kBAAZwL,GAAyBA,EAAQxQ,KAAKgF,GAAWwL,GAGjE1I,iBAAkBN,MAAMM,iBACxBmH,cAAeH,EAEf7J,GAAI,SAASjE,GACX,GAAIwD,GAAMoK,EAAa5N,EAEvB,OADAwD,GAAI0L,UAAYtB,EAAa5N,EAAI,MAC1BwD,GAGTiM,YACAC,QAAS,SAAS1P,EAAGsL,EAAMqE,EAAqB9D,EAAa6C,GAC3D,GAAIkB,GAAiBjR,KAAK8Q,SAASzP,GAC/BiE,EAAKtF,KAAKsF,GAAGjE,EAMjB,OALIsL,IAAQoD,GAAU7C,GAAe8D,EACnCC,EAAiBC,YAAYlR,KAAMqB,EAAGiE,EAAIqH,EAAMqE,EAAqB9D,EAAa6C,GACxEkB,IACVA,EAAiBjR,KAAK8Q,SAASzP,GAAK6P,YAAYlR,KAAMqB,EAAGiE,IAEpD2L,GAGTtE,KAAM,SAAS5G,EAAOoL,GACpB,KAAOpL,GAASoL,KACdpL,EAAQA,EAAMqL,OAEhB,OAAOrL,IAETsL,MAAO,SAASC,EAAOC,GACrB,GAAIrM,GAAMoM,GAASC,CAMnB,OAJID,IAASC,GAAWD,IAAUC,IAChCrM,EAAM2C,MAAMC,UAAWyJ,EAAQD,IAG1BpM,GAGTsM,YAAatR,OAAOuR,SAEpBC,KAAMxC,EAAI9G,GAAGsJ,KACb/C,aAAcM,EAAawB,SAuD7B,OA7BA5L,GAAI8M,OAAQ,EAEZ9M,EAAImL,OAAS,SAAS7E,GACfA,EAAQT,SAUXQ,EAAUpC,QAAUqC,EAAQrC,QAC5BoC,EAAUnC,SAAWoC,EAAQpC,SAC7BmC,EAAUlC,WAAamC,EAAQnC,aAX/BkC,EAAUpC,QAAUoC,EAAUmG,MAAMlG,EAAQrC,QAASoG,EAAIpG,SAErDmG,EAAa2C,aACf1G,EAAUnC,SAAWmC,EAAUmG,MAAMlG,EAAQpC,SAAUmG,EAAInG,YAEzDkG,EAAa2C,YAAc3C,EAAa4C,iBAC1C3G,EAAUlC,WAAakC,EAAUmG,MAAMlG,EAAQnC,WAAYkG,EAAIlG,eASrEnE,EAAIiN,OAAS,SAASzQ,EAAGsL,EAAMO,EAAa6C,GAC1C,GAAId,EAAakB,iBAAmBjD,EAClC,KAAM,IAAA3C,aAAA,QAAc,yBAEtB,IAAI0E,EAAamB,YAAcL,EAC7B,KAAM,IAAAxF,aAAA,QAAc,0BAGtB,OAAO2G,aAAYhG,EAAW7J,EAAG4N,EAAa5N,GAAIsL,EAAM,EAAGO,EAAa6C,IAEnElL,EAGF,QAASqM,aAAYhG,EAAW7J,EAAGiE,EAAIqH,EAAMqE,EAAqB9D,EAAa6C,GACpF,QAASgC,GAAK1M,MAAS8F,GAAOzH,UAAAxC,QAAA,OAAAT,KAAAiD,UAAA,MAAKA,UAAA,GAC7BsO,EAAgBjC,CAKpB,QAJIA,GAAU1K,GAAW0K,EAAO,IAAQ1K,IAAY6F,EAAUsG,aAA6B,OAAdzB,EAAO,KAClFiC,GAAiB3M,GAASgL,OAAON,IAG5BzK,EAAG4F,EACN7F,EACA6F,EAAUpC,QAASoC,EAAUnC,SAC7BoC,EAAQwB,MAAQA,EAChBO,IAAgB/B,EAAQ+B,aAAamD,OAAOnD,GAC5C8E,GAQN,MALAD,GAAOzB,kBAAkBhL,EAAIyM,EAAM7G,EAAW6E,EAAQpD,EAAMO,GAE5D6E,EAAKhB,QAAU1P,EACf0Q,EAAKZ,MAAQpB,EAASA,EAAO7O,OAAS,EACtC6Q,EAAK7E,YAAc8D,GAAuB,EACnCe,EAGF,QAAS3C,gBAAe1E,EAASrF,EAAS8F,GAY/C,MAXKT,GAMOA,EAAQrK,MAAS8K,EAAQnI,OAEnCmI,EAAQnI,KAAO0H,EACfA,EAAUS,EAAQpC,SAAS2B,IAPzBA,EADmB,mBAAjBS,EAAQnI,KACAmI,EAAQwB,KAAK,iBAEbxB,EAAQpC,SAASoC,EAAQnI,MAOhC0H,EAGF,QAAS4E,eAAc5E,EAASrF,EAAS8F,GAE9C,GAAM8G,GAAsB9G,EAAQwB,MAAQxB,EAAQwB,KAAK,gBACzDxB,GAAQT,SAAU,EACdS,EAAQsB,MACVtB,EAAQwB,KAAKC,YAAczB,EAAQsB,IAAI,IAAMtB,EAAQwB,KAAKC,YAG5D,IAAIsF,OAAYzR,EAsBhB,IArBI0K,EAAQ7F,IAAM6F,EAAQ7F,KAAOoM,iBAC/BvG,EAAQwB,KAAOmC,MAAAhE,YAAYK,EAAQwB,KAEnC,IAAIrH,GAAK6F,EAAQ7F,EACjB4M,GAAe/G,EAAQwB,KAAK,iBAAmB,SAA6BtH,MAAS8F,GAAOzH,UAAAxC,QAAA,OAAAT,KAAAiD,UAAA,MAAKA,UAAA,EAM/F,OAFAyH,GAAQwB,KAAOmC,MAAAhE,YAAYK,EAAQwB,MACnCxB,EAAQwB,KAAK,iBAAmBsF,EACzB3M,EAAGD,EAAS8F,IAEjB7F,EAAGyD,WACLoC,EAAQpC,SAAWlB,MAAMC,UAAWqD,EAAQpC,SAAUzD,EAAGyD,kBAI7CtI,KAAZiK,GAAyBwH,IAC3BxH,EAAUwH,OAGIzR,KAAZiK,EACF,KAAM,IAAAH,aAAA,QAAc,eAAiBY,EAAQnI,KAAO,sBAC/C,IAAI0H,YAAmBjF,UAC5B,MAAOiF,GAAQrF,EAAS8F,GAIrB,QAASuG,QAAS,MAAO,GAEhC,QAASxB,UAAS7K,EAASsH,GAKzB,MAJKA,IAAU,QAAUA,KACvBA,EAAOA,EAAOmC,MAAAhE,YAAY6B,MAC1BA,EAAK0B,KAAOhJ,GAEPsH,EAGT,QAAS2D,mBAAkBhL,EAAIyM,EAAM7G,EAAW6E,EAAQpD,EAAMO,GAC5D,GAAI5H,EAAGiL,UAAW,CAChB,GAAItF,KACJ8G,GAAOzM,EAAGiL,UAAUwB,EAAM9G,EAAOC,EAAW6E,GAAUA,EAAO,GAAIpD,EAAMO,EAAa6C,GACpFlI,MAAMC,OAAOiK,EAAM9G,GAErB,MAAO8G,sOAvRc,WAAXlK,MAAKW,wBAAA6B,2BACK,4EAC2C;;YCDjE,SAAStC,YAAWoK,GAClBnS,KAAKmS,OAASA,wBAGhBpK,WAAW5H,UAAUmK,SAAWvC,WAAW5H,UAAUiS,OAAS,WAC5D,MAAO,GAAKpS,KAAKmS,wBAGJpK;;YCIf,SAASsK,YAAWC,GAClB,MAAOC,QAAOD,GAGT,QAASxK,QAAO5C,GACrB,IAAK,GAAI7D,GAAI,EAAGA,EAAIqC,UAAUxC,OAAQG,IACpC,IAAK,GAAIgG,KAAO3D,WAAUrC,GACpBnB,OAAOC,UAAUC,eAAeC,KAAKqD,UAAUrC,GAAIgG,KACrDnC,EAAImC,GAAO3D,UAAUrC,GAAGgG,GAK9B,OAAOnC,GA2BF,QAAS4I,SAAQ0E,EAAOzM,GAC7B,IAAK,GAAI1E,GAAI,EAAGJ,EAAMuR,EAAMtR,OAAQG,EAAIJ,EAAKI,IAC3C,GAAImR,EAAMnR,KAAO0E,EACf,MAAO1E,EAGX,QAAQ,EAIH,QAAS8G,kBAAiBgK,GAC/B,GAAsB,gBAAXA,GAAqB,CAE9B,GAAIA,GAAUA,EAAOC,OACnB,MAAOD,GAAOC,QACT,IAAc,MAAVD,EACT,MAAO,EACF,KAAKA,EACV,MAAOA,GAAS,EAMlBA,GAAS,GAAKA,EAGhB,MAAKM,UAASC,KAAKP,GACZA,EAAOQ,QAAQC,SAAUP,YADKF,EAIhC,QAAS1E,SAAQ1H,GACtB,OAAKA,GAAmB,IAAVA,MAEHyG,QAAQzG,IAA2B,IAAjBA,EAAM7E,QAO9B,QAAS4J,aAAY+H,GAC1B,GAAIC,GAAQhL,UAAW+K,EAEvB,OADAC,GAAM1B,QAAUyB,EACTC,EAGF,QAAS5F,aAAY6F,EAAQtG,GAElC,MADAsG,GAAOC,KAAOvG,EACPsG,EAGF,QAASlG,mBAAkBD,EAAaqG,GAC7C,OAAQrG,EAAcA,EAAc,IAAM,IAAMqG,mPA1GlD,IAAMV,SACJW,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAGDZ,SAAW,aACXH,SAAW,YAkBNnI,SAAWpK,OAAOC,UAAUmK,kCAKvC,IAAI6C,YAAa,SAASpH,GACxB,MAAwB,kBAAVA,GAIZoH,YAAW,OACbxH,QAIMwH,WAJNA,WAAa,SAASpH,GACpB,MAAwB,kBAAVA,IAAiD,sBAAzBuE,SAASjK,KAAK0F,aAGhDoH,WAAAA,UAID,IAAMX,SAAU7I,MAAM6I,SAAW,SAASzG,GAC/C,SAAOA,GAA2B,gBAAVA,KAA+C,mBAAzBuE,SAASjK,KAAK0F;;AC/C9DL,OAAOC,QAAU8N,QAAQ,iCAA0C;;ACFnE/N,OAAOC,QAAU8N,QAAQ,sBAA+B;;unCCAlD1T,aAAe0T,QAAQ,UASvBpR,QACFqR,cAAe,iBAGbC,sBAEF,QAAAA,KAAaC,gBAAA5T,KAAA2T,EAAA,IAAAE,GAAAC,2BAAA9T,MAAA2T,EAAAI,WAAA7T,OAAA8T,eAAAL,IAAAtT,KAAAL,MAAA,OAET6T,GAAKxR,OAASnC,OAAO+T,OAAO5R,QAFnBwR,mEAWRK,GAAwB,GAAbnB,GAAarP,UAAAxC,OAAA,OAAAT,KAAAiD,UAAA,GAAAA,UAAA,KACzB,KAAIwQ,EAAW,KAAMpR,OAAM,mCAAqCoR,EAChE,QAA0B,KAAhBnB,EAAO9Q,MAAwB8Q,EAAO9Q,OAASiS,EAAW,KAAMpR,OAAM,8HAEhF,OADAiQ,GAAO9Q,KAAOiS,EACdC,KAAAR,EAAAxT,UAAA4T,WAAA7T,OAAA8T,eAAAL,EAAAxT,WAAA,OAAAH,MAAAK,KAAAL,KAAkBkU,EAAWnB,UAjBbhT,aAsBxB2F,QAAOC,QAAU,GAAIgO;;43BCnCfS,OAASX,QAAQ,mBACjBY,cAAgBZ,QAAQ,0BACxB1T,aAAe0T,QAAQ,UACvBE,UAAYF,QAAQ,eACpBa,SAAWb,QAAS,oBACpBc,SAAWd,QAAQ,oBACnBe,aAAef,QAAQ,yBAEvBgB,aAAehB,QAAQ,yBACvBiB,aAAejB,QAAQ,yBACvBkB,gBAAkBlB,QAAQ,4BAC1BmB,cAAgBnB,QAAQ,0BACxBoB,aAAepB,QAAQ,yBACvBqB,cAAgBrB,QAAQ,0BACxBsB,gBAAkBtB,QAAQ,4BAC1BuB,aAAevB,QAAQ,yBAEvBwB,QACLC,QAAST,aACTU,QAAST,aACTU,WAAYT,gBACZU,QAASL,aACTM,aAAcV,cACdW,YAAaX,cACbY,YAAaZ,cACba,QAASZ,aACTa,WAAYX,gBACZY,YAAab,cACbc,aAAcd,cACde,aAAcf,cACdgB,cAAehB,eAGViB,oBAWL,QAAAA,GAAY5K,GAASyI,gBAAA5T,KAAA+V,EAAA,IAAAlC,GAAAC,2BAAA9T,MAAA+V,EAAAhC,WAAA7T,OAAA8T,eAAA+B,IAAA1V,KAAAL,MAGpB6T,GAAKmC,OAAS5B,OACdP,EAAKxR,OAASsR,UAAUtR,OAExBwR,EAAKoC,UAAY9K,EAAQ+K,UAAY,GACrCrC,EAAKsC,UAAYhL,EAAQiL,UAAY,GACrCvC,EAAKwC,YAAclL,EAAQmL,YAAc,GACzCzC,EAAK0C,iBAAmBpL,EAAQqL,gBAChC3C,EAAK4C,wBAA0BtL,EAAQuL,uBAEvC,GAAInC,UAASpJ,EAAQiL,UAMrBvC,EAAK3I,UAAYyL,SAASC,cAAc,OACxC/C,EAAK3I,UAAU2L,UAAY,8BAC3BhD,EAAKiD,WAAaC,EAAElD,EAAK3I,WAEzByI,UAAUvM,mBAAmBuM,UAAUtR,OAAOqR,eAC9CC,UAAU9M,GAAG8M,UAAUtR,OAAOqR,cAAe,SAAC1Q,EAAM2J,GAAP,MAAgBkH,GAAKpR,KAAKO,EAAKf,KAAM0K,IAElF,IAAIqK,GAAOxC,gBAzBS,OA2BpBX,GAAKiD,WAAWE,KAAKA,GACrB7T,QAAQgH,IAAI,4BAA8B+L,SAAU/K,EAAQ+K,SAAUhL,UAAW2I,EAAK3I,YA5BlE2I,0EAuCToD,EAAQtK,GAEnB,GADIjJ,UAAU,IAAIP,QAAQC,KAAK,8GAC1BpD,KAAK8W,WAAY,MAAO3T,SAAQC,KAAK,oEAGtCiR,eAAcjU,eAAe6W,KAChCA,EAAS5C,cAAc4C,GAAQC,OAGhC,IAAIC,GAAU,EACd,KAAK,GAAInU,KAAQoR,QAAOgD,OACqB,IAAxChD,OAAOgD,MAAMpU,GAAM8K,QAAQmJ,KAC9BE,EAAUnU,EAIZ,KAAKmU,EACJ,MAAOhU,SAAQC,KAAR,aAA0B6T,EAA1B,iGAIJtK,IAAQA,EAAK0C,QAAU1C,EAAK0C,OAAOgI,UAAS1K,EAAOA,EAAK0C,OAAOgI,SAC/D1K,GAAQA,EAAK0C,SAAQ1C,EAAOA,EAAK0C,OAErC,IAAMiI,KAAetX,KAAKuX,gBAAiBtC,QAAOkC,GAkBlD,OAhBKnX,MAAKuX,QAASD,IAClBtX,KAAKuX,OAASvX,KAAKuX,MAAMC,iBAAmBxX,KAAKuX,MAAMC,kBACvDxX,KAAKuX,MAAQ,GAAItC,QAAOkC,IAGzBnX,KAAK8W,WAAWE,KAAKhX,KAAKuX,MAAME,OAC/BR,EACAtK,EACAwK,EACAnX,KAAKiW,UACLjW,KAAKmW,UACLnW,KAAKqW,YACLrW,KAAKuW,iBACLvW,KAAKyW,0BAGCzW,KAAKuX,MAAMG,qDAUDC,EAAMC,EAAQC,EAAWC,GAC1CxD,SAASlO,KAAMuR,KAAAA,EAAMC,OAAAA,EAAQC,UAAAA,EAAWC,SAAAA,mCAGlCC,GACD/X,KAAKuX,OAAUvX,KAAKuX,MAAMS,QAE/BhY,KAAKuX,MAAMS,OAAOD,UA7GEhY,aAmHtB2F,QAAOC,QAAUoQ;;ACpJjB,YAEA,IAAM3B,SACJ6D,UAAYC,KAAM,MAClBC,kBACE,YACA,YACA,gBACA,sBACA,aACA,YACA,YACA,UACA,kBACA,kBAEFC,MACE,sBACA,WACA,oBACA,uBACA,uBACA,iBACA,qBACA,uBACA,8BACA,uBACA,uBACA,aACA,sBACA,cACA,sBACA,yBACA,sBACA,sBACA,yBACA,gCACA,gBACA,eACA,YACA,sBACA,wBACA,2BACA,sBACA,qBACA,kBACA,qBACA,aACA,2BACA,aACA,sBACA,YACA,cACA,oBACA,uBACA,cACA,qBACA,eACA,YACA,yBACA,sBACA,6BACA,wBACA,iBACA,0BACA,gBACA,wBACA,iBACA,2BACA,eACA,sBACA,qBACA,aACA,qBACA,iBAEFC,SACE,SACA,eACA,kBACA,yBACA,YACA,uBACA,YACA,wBACA,cACA,iBACA,kBACA,aACA,cACA,aACA,cACA,mBACA,YACA,UACA,eACA,iBACA,aACA,wBACA,gBACA,wBAEFC,aACE,cACA,iBACA,cACA,oBAEFC,qBAAuB,iBACvBC,WAAa,4BAA6B,qBAC1CC,gBACE,cACA,wBACA,kBACA,aACA,sBACA,2BACA,uBAEFC,eACE,oBACA,aACA,oBACA,cACA,gBACA,eACA,eACA,YACA,aACA,eACA,eAEFC,iBACEC,KAAO,qBAAsB,sBAAuB,eACpDC,UACAC,cAAgB,mBAElBC,aAAe,yBAA0B,yBACzCC,eACE,sBACA,SACA,eACA,oBACA,uBACA,uBACA,iBACA,qBACA,uBACA,8BACA,kBACA,yBACA,uBACA,cACA,YACA,uBACA,aACA,sBACA,cACA,sBACA,uBACA,yBACA,sBACA,sBACA,yBACA,gCACA,gBACA,iBACA,YACA,eACA,YACA,YACA,sBACA,wBACA,2BACA,gBACA,sBACA,wBACA,aACA,cACA,YACA,iBACA,kBACA,aACA,qBACA,kBACA,qBACA,aACA,2BACA,aACA,cACA,sBACA,YACA,aACA,YACA,cACA,oBACA,mBACA,uBACA,cACA,qBACA,eACA,YACA,yBACA,cACA,sBACA,6BACA,mBACA,wBACA,aACA,iBACA,YACA,UACA,eACA,0BACA,gBACA,wBACA,iBACA,iBACA,aACA,wBACA,2BACA,gBACA,uBACA,eACA,sBACA,qBACA,aACA,qBACA,iBAEFC,mBAAsBhC,OAAQ,aAAciC,SAAW,EAAG,GAAK,EAAG,GAAK,KACvEC,mBACE,WACA,yBACA,aACA,sBACA,4BACA,uBACA,UACA,yBACA,aACA,kBACA,WACA,YACA,aACA,gBACA,eACA,qBACA,2BACA,0BAEFC,iBAAmB,aAAc,aAAc,aAC/CC,SACE,UAAgB,UAChB,cAAgB,cAChB,eAAgB,UAChB,UAAgB,cAChB,eAAgB,eAChB,aAAgB,iBAElBjC,OACElC,SAAW,YACXC,SACE,cACA,qBACA,sBACA,iBACA,kBACA,SACA,YACA,YACA,eACA,cACA,oBACA,eACA,gBACA,mBACA,YACA,aACA,YACA,iBACA,WACA,aACA,aACA,WACA,WACA,WACA,kBACA,qBACA,mBACA,uBACA,8BACA,kBACA,yBACA,uBACA,cACA,YACA,aACA,cACA,oBACA,uBACA,YACA,eACA,aACA,kBACA,sBACA,gBACA,eACA,WACA,mBACA,aACA,oBACA,mBACA,aACA,gBACA,cACA,kBACA,eACA,eACA,gBACA,eACA,aACA,sBACA,mBACA,4BACA,uBACA,cACA,yBACA,sBACA,cACA,oBACA,sBACA,oBACA,iBACA,wBACA,yBACA,gCACA,cACA,gBACA,aACA,iBACA,cACA,oBACA,aACA,WACA,qBACA,aACA,UACA,YACA,aACA,eACA,cACA,eACA,yBACA,YACA,YACA,eACA,yBACA,sBACA,YACA,cACA,wBACA,cACA,aACA,WACA,gBACA,2BACA,cACA,cACA,aACA,gBACA,sBACA,wBACA,aACA,YACA,aACA,cACA,YACA,iBACA,kBACA,yBACA,iBACA,kBACA,eACA,WACA,iBACA,kBACA,aACA,eACA,aACA,cACA,eACA,cACA,qBACA,wBACA,qBACA,YACA,kBACA,qBACA,aACA,mBACA,iBACA,qBACA,YACA,aACA,aACA,iBACA,aACA,cACA,kBACA,eACA,iBACA,eACA,mBACA,iBACA,cACA,cACA,YACA,sBACA,cACA,8BACA,aACA,YACA,SACA,aACA,WACA,cACA,WACA,YACA,cACA,oBACA,mBACA,eACA,sBACA,qBACA,uBACA,yBACA,cACA,cACA,cACA,qBACA,eACA,YACA,cACA,YACA,eACA,yBACA,gBACA,cACA,iBACA,wBACA,eACA,sBACA,6BACA,mBACA,gBACA,6BACA,wBACA,cACA,qBACA,aACA,YACA,kBACA,4BACA,UACA,aACA,YACA,mBACA,YACA,aACA,oBACA,uBACA,eACA,cACA,cACA,0BACA,oBACA,WACA,iBACA,uBACA,YACA,YACA,YACA,aACA,gBACA,UACA,gBACA,0BACA,WACA,WACA,YACA,kBACA,eACA,YACA,aACA,0BACA,gBACA,eACA,cACA,eACA,0BACA,gBACA,uBACA,0BACA,iBACA,iBACA,gBACA,kBACA,qBACA,aACA,wBACA,iBACA,2BACA,2BACA,eACA,yBACA,kBACA,eACA,eACA,gBACA,uBACA,eACA,cACA,YACA,sBACA,eACA,qBACA,aACA,oBACA,aACA,eACA,iBACA,YACA,qBACA,YACA,aACA,eACA,aACA,gBACA,eACA,YACA,gBACA,UACA,gBACA,kBACA,gBACA,0BACA,eAEFC,YAAc,wBAAyB,qBAAsB,mBAC7DK,SACE,gBACA,cACA,mBACA,cACA,cACA,qBACA,eACA,qBACA,kBACA,aACA,YACA,iBACA,gBACA,gBACA,YACA,iBACA,gBACA,cACA,eACA,eACA,UACA,aACA,kBACA,cACA,cACA,cACA,cACA,gBACA,WACA,eACA,cACA,kBACA,kBACA,aACA,aACA,YACA,aACA,qBACA,wBACA,mBACA,uBACA,gBACA,4BACA,UACA,WACA,eACA,YACA,gBACA,eACA,YACA,gBACA,YACA,YACA,YACA,YACA,WACA,YACA,eACA,UACA,iBACA,cACA,aACA,kBACA,gBACA,eACA,yBACA,gBACA,sBACA,eACA,cACA,eACA,eACA,aACA,kBACA,aACA,eACA,eACA,gBACA,cACA,mBACA,eACA,aACA,aACA,mBACA,aACA,YACA,cACA,cACA,qBACA,iBACA,2BACA,qBACA,uBACA,wBACA,qBACA,kBACA,oBACA,qCACA,oBACA,eACA,eACA,cACA,8BACA,kBACA,cACA,cACA,aACA,eACA,cACA,sBACA,aACA,yBACA,eACA,cACA,cACA,cACA,kBACA,cACA,SACA,iBACA,gBACA,YACA,YACA,eACA,mBACA,aACA,aACA,aACA,WACA,eACA,WACA,aACA,cACA,cACA,yBACA,cACA,WACA,YACA,cACA,YACA,cACA,WACA,iBACA,YAEFH,cACE,mBACA,gBACA,oBACA,+BAEFC,aACE,mBACA,mBACA,8BAEFC,aAAe,cACfH,SACE,uBACA,yBACA,uBACA,mBACA,eACA,mBACA,eACA,cACA,aACA,2BACA,6BACA,gBACA,cACA,iBACA,aACA,eACA,cACA,eACA,aACA,aACA,eACA,cACA,WACA,mBACA,qBACA,iBACA,oBAEFO,cACE,sBACA,qBACA,yBACA,4BACA,mBACA,oBACA,2BACA,4BACA,4BAEFD,aACE,mBACA,kBACA,oBACA,sBACA,2BACA,sBACA,kBACA,4BACA,mBACA,yBAEFD,YACE,4BACA,+BACA,yBACA,yBACA,yBACA,0BACA,iBACA,qBACA,qBACA,yBAEFG,cAAgB,aAChBC,eAAiB,kCAEnBpG,OACE4J,KACE,cACA,qBACA,iBACA,kBACA,YACA,YACA,cACA,eACA,gBACA,mBACA,YACA,aACA,YACA,WACA,aACA,aACA,WACA,WACA,WACA,kBACA,mBACA,cACA,aACA,cACA,oBACA,YACA,eACA,kBACA,gBACA,eACA,WACA,mBACA,aACA,oBACA,mBACA,aACA,gBACA,kBACA,eACA,eACA,gBACA,eACA,aACA,mBACA,4BACA,cACA,cACA,oBACA,oBACA,iBACA,wBACA,cACA,aACA,iBACA,cACA,oBACA,aACA,WACA,qBACA,aACA,UACA,YACA,cACA,eACA,yBACA,kBACA,eACA,yBACA,YACA,cACA,cACA,aACA,WACA,gBACA,cACA,cACA,aACA,gBACA,aACA,YACA,aACA,YACA,kBACA,yBACA,iBACA,eACA,WACA,iBACA,kBACA,eACA,aACA,cACA,eACA,cACA,qBACA,wBACA,YACA,mBACA,iBACA,qBACA,YACA,aACA,iBACA,aACA,cACA,kBACA,eACA,iBACA,eACA,mBACA,iBACA,cACA,YACA,cACA,8BACA,aACA,YACA,SACA,WACA,cACA,WACA,YACA,mBACA,eACA,sBACA,qBACA,uBACA,yBACA,cACA,cACA,YACA,cACA,eACA,gBACA,iBACA,wBACA,eACA,gBACA,6BACA,cACA,qBACA,aACA,YACA,kBACA,4BACA,UACA,aACA,YACA,mBACA,YACA,aACA,oBACA,uBACA,eACA,cACA,cACA,0BACA,oBACA,WACA,uBACA,YACA,YACA,aACA,gBACA,gBACA,0BACA,WACA,kBACA,YACA,aACA,eACA,cACA,eACA,0BACA,gBACA,uBACA,0BACA,gBACA,kBACA,qBACA,aACA,iBACA,2BACA,eACA,yBACA,kBACA,eACA,eACA,cACA,YACA,eACA,aACA,oBACA,aACA,eACA,iBACA,YACA,qBACA,YACA,aACA,eACA,gBACA,eACA,YACA,gBACA,UACA,kBACA,gBACA,0BACA,gBAKN5T,QAAOC,QAAUyO;;YC/9BjB1O,QAAOC,SAEL+J,QACIuD,GAAI,cAAe1F,KAAM,eACzB0F,GAAI,qBAAsB1F,KAAM,eAChC0F,GAAI,iBAAkB1F,KAAM,eAC5B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BACfiI,UAAWhI,oBACXiI,SAAUhI,mBACViI,WAAYhI,qBACZiI,iBAAkBhI,2BAClBiI,YAAahI,sBACbiI,YAAahI,sBACbiI,WAAYhI,qBACZiI,YAAahI,sBACbiI,aAAchI,uBACdiI,mBAAoBhI,6BACpBiI,eAAgB/H,yBAChBgI,iBAAkBjI,2BAClBkI,cAAehI,wBACfiI,YAAahI,sBACbiI,OAAQhI,iBACRiI,WAAYhI,qBACZiI,YAAahI,sBACbiI,gBAAiBhI,0BACjBiI,UAAWhI,oBACXiI,YAAahI,sBACbiI,YAAahI,sBACbiI,UAAWhI,oBACXiI,YAAahI,sBACbiI,UAAWhI,oBACXiI,QAAShI,kBACTiI,UAAWhI,oBACXiI,gBAAiBhI,0BACjBiI,aAAchI,uBACdiI,aAAchI,uBACdiI,mBAAoBhI,6BACpBiI,WAAYhI,qBACZiI,QAAShI,kBACTiI,cAAe/H,wBACfgI,aAAcjI,uBACdkI,WAAYhI,qBACZiI,UAAWhI,oBACXiI,aAAchI,uBACdiI,WAAYhI,4BACZiI,SAAUhI,mBACViI,gBAAiBhI,0BACjBiI,gBAAiBhI,0BACjBiI,UAAWhI,oBACXiI,QAAS/H,kBACTgI,UAAWjI,oBACXkI,cAAehI,wBACfiI,cAAehI,wBACfiI,YAAa/H,sBACbgI,gBAAiB/H,0BACjBgI,cAAelI,wBACfmI,YAAahI,sBACbiI,4BAA6BhI,sCAC7BiI,aAAchI,uBACdiI,WAAYhI,qBACZiI,aAAchI,uBACdiI,aAAchI,uBACdiI,aAAchI,uBACdiI,WAAYhI,qBACZiI,iBAAkBhI,2BAClBiI,YAAahI,sBACbiI,kBAAmBhI,4BACnBiI,aAAchI,uBACdiI,YAAahI,sBACbiI,aAAchI,uBACdiI,YAAahI,sBACbiI,WAAYhI,qBACZiI,SAAUhI,mBACViI,UAAWhI,oBACXiI,eAAgBhI,yBAChBiI,0BAA2BhI,oCAC3BiI,uBAAwBhI,iCACxBiI,gBAAiBhI,0BACjBiI,aAAchI,uBACdiI,sBAAuBhI,gCACvBiI,aAAchI,uBACdiI,cAAehI,wBACfiI,aAAchI,uBACdiI,U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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n    this._events = objectCreate(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n  var o = {};\n  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n  hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function() {\n      return defaultMaxListeners;\n    },\n    set: function(arg) {\n      // check whether the input is a positive number (whose value is zero or\n      // greater and not a NaN).\n      if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n        throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n      defaultMaxListeners = arg;\n    }\n  });\n} else {\n  EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    if (arguments.length > 1)\n      er = arguments[1];\n    if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n      // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n      // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = objectCreate(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener) {\n      target.emit('newListener', type,\n          listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (!existing) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n          prepend ? [listener, existing] : [existing, listener];\n    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\n        var w = new Error('Possible EventEmitter memory leak detected. ' +\n            existing.length + ' \"' + String(type) + '\" listeners ' +\n            'added. Use emitter.setMaxListeners() to ' +\n            'increase limit.');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        if (typeof console === 'object' && console.warn) {\n          console.warn('%s: %s', w.name, w.message);\n        }\n      }\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    switch (arguments.length) {\n      case 0:\n        return this.listener.call(this.target);\n      case 1:\n        return this.listener.call(this.target, arguments[0]);\n      case 2:\n        return this.listener.call(this.target, arguments[0], arguments[1]);\n      case 3:\n        return this.listener.call(this.target, arguments[0], arguments[1],\n            arguments[2]);\n      default:\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i)\n          args[i] = arguments[i];\n        this.listener.apply(this.target, args);\n    }\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = bind.call(onceWrapper, state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = objectCreate(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else\n          spliceOne(list, position);\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = objectCreate(null);\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = objectCreate(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = objectKeys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = objectCreate(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (!events)\n    return [];\n\n  var evlistener = events[type];\n  if (!evlistener)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\n}\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n  var F = function() {};\n  F.prototype = proto;\n  return new F;\n}\nfunction objectKeysPolyfill(obj) {\n  var keys = [];\n  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n    keys.push(k);\n  }\n  return k;\n}\nfunction functionBindPolyfill(context) {\n  var fn = this;\n  return function () {\n    return fn.apply(context, arguments);\n  };\n}\n","import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n  let hb = new base.HandlebarsEnvironment();\n\n  Utils.extend(hb, base);\n  hb.SafeString = SafeString;\n  hb.Exception = Exception;\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n\n  hb.VM = runtime;\n  hb.template = function(spec) {\n    return runtime.template(spec, hb);\n  };\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n","import {createFrame, extend, toString} from './utils';\nimport Exception from './exception';\nimport {registerDefaultHelpers} from './helpers';\nimport {registerDefaultDecorators} from './decorators';\nimport logger from './logger';\n\nexport const VERSION = '4.1.0';\nexport const COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  registerDefaultHelpers(this);\n  registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n\n  logger: logger,\n  log: logger.log,\n\n  registerHelper: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) { throw new Exception('Arg not supported with multiple helpers'); }\n      extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function(name) {\n    delete this.helpers[name];\n  },\n\n  registerPartial: function(name, partial) {\n    if (toString.call(name) === objectType) {\n      extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new Exception(`Attempting to register a partial called \"${name}\" as undefined`);\n      }\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function(name) {\n    delete this.partials[name];\n  },\n\n  registerDecorator: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) { throw new Exception('Arg not supported with multiple decorators'); }\n      extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function(name) {\n    delete this.decorators[name];\n  }\n};\n\nexport let log = logger.log;\n\nexport {createFrame, logger};\n","import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n  registerInline(instance);\n}\n\n","import {extend} from '../utils';\n\nexport default function(instance) {\n  instance.registerDecorator('inline', function(fn, props, container, options) {\n    let ret = fn;\n    if (!props.partials) {\n      props.partials = {};\n      ret = function(context, options) {\n        // Create a new partials stack frame prior to exec.\n        let original = container.partials;\n        container.partials = extend({}, original, props.partials);\n        let ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n\n    return ret;\n  });\n}\n","\nconst errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n  let loc = node && node.loc,\n      line,\n      column;\n  if (loc) {\n    line = loc.start.line;\n    column = loc.start.column;\n\n    message += ' - ' + line + ':' + column;\n  }\n\n  let tmp = Error.prototype.constructor.call(this, message);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (let idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n\n  /* istanbul ignore else */\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n\n      // Work around issue under safari where we can't directly set the column value\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\n\nexport default Exception;\n","import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n  registerBlockHelperMissing(instance);\n  registerEach(instance);\n  registerHelperMissing(instance);\n  registerIf(instance);\n  registerLog(instance);\n  registerLookup(instance);\n  registerWith(instance);\n}\n","import {appendContextPath, createFrame, isArray} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('blockHelperMissing', function(context, options) {\n    let inverse = options.inverse,\n        fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        let data = createFrame(options.data);\n        data.contextPath = appendContextPath(options.data.contextPath, options.name);\n        options = {data: data};\n      }\n\n      return fn(context, options);\n    }\n  });\n}\n","import {appendContextPath, blockParams, createFrame, isArray, isFunction} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('each', function(context, options) {\n    if (!options) {\n      throw new Exception('Must pass iterator to #each');\n    }\n\n    let fn = options.fn,\n        inverse = options.inverse,\n        i = 0,\n        ret = '',\n        data,\n        contextPath;\n\n    if (options.data && options.ids) {\n      contextPath = appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (isFunction(context)) { context = context.call(this); }\n\n    if (options.data) {\n      data = createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret = ret + fn(context[field], {\n        data: data,\n        blockParams: blockParams([context[field], field], [contextPath + field, null])\n      });\n    }\n\n    if (context && typeof context === 'object') {\n      if (isArray(context)) {\n        for (let j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else {\n        let priorKey;\n\n        for (let key in context) {\n          if (context.hasOwnProperty(key)) {\n            // We're running the iterations one step out of sync so we can detect\n            // the last iteration without have to scan the object twice and create\n            // an itermediate keys array.\n            if (priorKey !== undefined) {\n              execIteration(priorKey, i - 1);\n            }\n            priorKey = key;\n            i++;\n          }\n        }\n        if (priorKey !== undefined) {\n          execIteration(priorKey, i - 1, true);\n        }\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n}\n","import Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new Exception('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n    }\n  });\n}\n","import {isEmpty, isFunction} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('if', function(conditional, options) {\n    if (isFunction(conditional)) { conditional = conditional.call(this); }\n\n    // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n    if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n\n  instance.registerHelper('unless', function(conditional, options) {\n    return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('log', function(/* message, options */) {\n    let args = [undefined],\n        options = arguments[arguments.length - 1];\n    for (let i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    let level = 1;\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n    args[0] = level;\n\n    instance.log(... args);\n  });\n}\n","export default function(instance) {\n  instance.registerHelper('lookup', function(obj, field) {\n    return obj && obj[field];\n  });\n}\n","import {appendContextPath, blockParams, createFrame, isEmpty, isFunction} from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('with', function(context, options) {\n    if (isFunction(context)) { context = context.call(this); }\n\n    let fn = options.fn;\n\n    if (!isEmpty(context)) {\n      let data = options.data;\n      if (options.data && options.ids) {\n        data = createFrame(options.data);\n        data.contextPath = appendContextPath(options.data.contextPath, options.ids[0]);\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n}\n","import {indexOf} from './utils';\n\nlet logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function(level) {\n    if (typeof level === 'string') {\n      let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n\n  // Can be overridden in the host environment\n  log: function(level, ...message) {\n    level = logger.lookupLevel(level);\n\n    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n      let method = logger.methodMap[level];\n      if (!console[method]) { // eslint-disable-line no-console\n        method = 'log';\n      }\n      console[method](...message); // eslint-disable-line no-console\n    }\n  }\n};\n\nexport default logger;\n","/* global window */\nexport default function(Handlebars) {\n  /* istanbul ignore next */\n  let root = typeof global !== 'undefined' ? global : window,\n      $Handlebars = root.Handlebars;\n  /* istanbul ignore next */\n  Handlebars.noConflict = function() {\n    if (root.Handlebars === Handlebars) {\n      root.Handlebars = $Handlebars;\n    }\n    return Handlebars;\n  };\n}\n","import * as Utils from './utils';\nimport Exception from './exception';\nimport { COMPILER_REVISION, REVISION_CHANGES, createFrame } from './base';\n\nexport function checkRevision(compilerInfo) {\n  const compilerRevision = compilerInfo && compilerInfo[0] || 1,\n        currentRevision = COMPILER_REVISION;\n\n  if (compilerRevision !== currentRevision) {\n    if (compilerRevision < currentRevision) {\n      const runtimeVersions = REVISION_CHANGES[currentRevision],\n            compilerVersions = REVISION_CHANGES[compilerRevision];\n      throw new Exception('Template was precompiled with an older version of Handlebars than the current runtime. ' +\n            'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n    } else {\n      // Use the embedded version info since the runtime doesn't know about this revision yet\n      throw new Exception('Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n            'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n    }\n  }\n}\n\nexport function template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new Exception('No environment passed to template');\n  }\n  if (!templateSpec || !templateSpec.main) {\n    throw new Exception('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d;\n\n  // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as psuedo-supported APIs.\n  env.VM.checkRevision(templateSpec.compiler);\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n    let result = env.VM.invokePartial.call(this, partial, context, options);\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n      result = options.partials[options.name](context, options);\n    }\n    if (result != null) {\n      if (options.indent) {\n        let lines = result.split('\\n');\n        for (let i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n        result = lines.join('\\n');\n      }\n      return result;\n    } else {\n      throw new Exception('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n    }\n  }\n\n  // Just add water\n  let container = {\n    strict: function(obj, name) {\n      if (!(name in obj)) {\n        throw new Exception('\"' + name + '\" not defined in ' + obj);\n      }\n      return obj[name];\n    },\n    lookup: function(depths, name) {\n      const len = depths.length;\n      for (let i = 0; i < len; i++) {\n        if (depths[i] && depths[i][name] != null) {\n          return depths[i][name];\n        }\n      }\n    },\n    lambda: function(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n\n    fn: function(i) {\n      let ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n\n    programs: [],\n    program: function(i, data, declaredBlockParams, blockParams, depths) {\n      let programWrapper = this.programs[i],\n          fn = this.fn(i);\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n      return programWrapper;\n    },\n\n    data: function(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n      return value;\n    },\n    merge: function(param, common) {\n      let obj = param || common;\n\n      if (param && common && (param !== common)) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context, options = {}) {\n    let data = options.data;\n\n    ret._setup(options);\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n    let depths,\n        blockParams = templateSpec.useBlockParams ? [] : undefined;\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context/*, options*/) {\n      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n    }\n    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n    return main(context, options);\n  }\n  ret.isTop = true;\n\n  ret._setup = function(options) {\n    if (!options.partial) {\n      container.helpers = container.merge(options.helpers, env.helpers);\n\n      if (templateSpec.usePartial) {\n        container.partials = container.merge(options.partials, env.partials);\n      }\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = container.merge(options.decorators, env.decorators);\n      }\n    } else {\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n    }\n  };\n\n  ret._child = function(i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new Exception('must pass block params');\n    }\n    if (templateSpec.useDepths && !depths) {\n      throw new Exception('must pass parent depths');\n    }\n\n    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n  };\n  return ret;\n}\n\nexport function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n  function prog(context, options = {}) {\n    let currentDepths = depths;\n    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(container,\n        context,\n        container.helpers, container.partials,\n        options.data || data,\n        blockParams && [options.blockParams].concat(blockParams),\n        currentDepths);\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n\nexport function resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = options.data['partial-block'];\n    } else {\n      partial = options.partials[options.name];\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = options.partials[partial];\n  }\n  return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  const currentPartialBlock = options.data && options.data['partial-block'];\n  options.partial = true;\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  let partialBlock;\n  if (options.fn && options.fn !== noop) {\n    options.data = createFrame(options.data);\n    // Wrapper function to get access to currentPartialBlock from the closure\n    let fn = options.fn;\n    partialBlock = options.data['partial-block'] = function partialBlockWrapper(context, options = {}) {\n\n      // Restore the partial-block from the closure for the execution of the block\n      // i.e. the part inside the block of the partial call.\n      options.data = createFrame(options.data);\n      options.data['partial-block'] = currentPartialBlock;\n      return fn(context, options);\n    };\n    if (fn.partials) {\n      options.partials = Utils.extend({}, options.partials, fn.partials);\n    }\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new Exception('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nexport function noop() { return ''; }\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    let props = {};\n    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n    Utils.extend(prog, props);\n  }\n  return prog;\n}\n","// Build out our basic SafeString type\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n  return '' + this.string;\n};\n\nexport default SafeString;\n","const escape = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nconst badChars = /[&<>\"'`=]/g,\n      possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nexport function extend(obj/* , ...source */) {\n  for (let i = 1; i < arguments.length; i++) {\n    for (let key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n  return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n  isFunction = function(value) {\n    return typeof value === 'function' && toString.call(value) === '[object Function]';\n  };\n}\nexport {isFunction};\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray = Array.isArray || function(value) {\n  return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;\n};\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n  for (let i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n\nexport function escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) { return string; }\n  return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nexport function createFrame(object) {\n  let frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nexport function blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","module.exports = require(\"handlebars/runtime\")[\"default\"];\n","const EventEmitter = require('events');\n\n/**\n * A list of all publicly emitted events. To listen to these events you must attach a listener to the History instance.\n * This class should not be used directly\n *\n * @property {String} ASSETS_LOADED         - assets in history panel are finished loading\n * @type {Object}\n */\nconst events = {\n    ASSETS_LOADED: 'assets_loaded',\n};\n\nclass EventsHub extends EventEmitter {\n\n    constructor(){\n        super();\n        this.events = Object.freeze(events);\n    }\n\n    /**\n     * @param {string} eventName\n     * @param {Object} params - the params.type is always added\n     *\n     * @return {Boolean} - Indication if we've emitted an event.\n     */\n    emit(eventName, params = {}) {\n        if(!eventName) throw Error('Trying to emit undefined event: ' + eventName);\n        if(typeof params.type !== 'undefined' && params.type !== eventName) throw Error('The \"type\" property is restricted and should be the same as the eventName. If you not pass it it will be automatically set!');\n        params.type = eventName;\n        return super.emit(eventName, params)\n    }\n}\n\n\nmodule.exports = new EventsHub();\n","const Config = require('./config/Config');\nconst GamesMappings = require('./config/GamesMappings');\nconst EventEmitter = require('events');\nconst EventsHub = require('./EventsHub');\nconst Currency = require ('./utils/Currency');\nconst Language = require('./utils/Language');\nconst templateInit = require('../templates/init.hbs');\n\nconst DefaultPanel = require('./panels/DefaultPanel');\nconst DopSlotPanel = require('./panels/DopSlotPanel');\nconst TigEntSlotPanel = require('./panels/TigEntSlotPanel');\nconst DopTablePanel = require('./panels/DopTablePanel');\nconst CaySlotPanel = require('./panels/CaySlotPanel');\nconst CayTablePanel = require('./panels/CayTablePanel');\nconst CayScratchPanel = require('./panels/CayScratchPanel');\nconst NSGSlotPanel = require('./panels/NSGSlotPanel');\n\nconst panels = {\n\tdefault: DefaultPanel,\n\tdopSlot: DopSlotPanel,\n\ttigEntSlot: TigEntSlotPanel,\n\tnsgSlot: NSGSlotPanel,\n\tdopBlackjack: DopTablePanel,\n\tdopRoulette: DopTablePanel,\n\tdopBaccarat: DopTablePanel,\n\tcaySlot: CaySlotPanel,\n\tcayScratch: CayScratchPanel,\n\tcayRoulette: CayTablePanel,\n\tcayBlackjack: CayTablePanel,\n\tcay3CardBrag: CayTablePanel,\n\tcayVideoPoker: CayTablePanel\n};\n\nclass History extends EventEmitter {\n\n\t/**\n\t * Create instance of the history app and render it inside the container\n\t * @param {Object} options\n\t * @param {String} options.basePath - the base path to the dist files (used for loading of the images)\n\t * @param {String} options.language - language code - like \"en\"\n\t * @param {String} options.assetsPath - the cdn path to the assets project\n\t * @param {Boolean} options.hideGameDetails - whether to hide Game Details\n\t * @param {Boolean} options.hideTransactionDetails - whether to hide Transaction Details\n\t */\n\tconstructor(options) {\n\t\tsuper();\n\n\t\tthis.config = Config;\n\t\tthis.events = EventsHub.events;\n\n\t\tthis._basePath = options.basePath || '';\n\t\tthis._language = options.language || '';\n\t\tthis._assetsPath = options.assetsPath || '';\n\t\tthis._hideGameDetails = options.hideGameDetails;\n\t\tthis._hideTransactionDetails = options.hideTransactionDetails;\n\n\t\tnew Language(options.language);\n\t\t/**\n\t\t * The container where the history will be rendered.\n\t\t * Note it should be appended inside some external DOM container\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.container = document.createElement('div');\n\t\tthis.container.className = 'history-component-container';\n\t\tthis.$container = $(this.container);\n\n\t\tEventsHub.removeAllListeners(EventsHub.events.ASSETS_LOADED);\n\t\tEventsHub.on(EventsHub.events.ASSETS_LOADED, (name, data) => this.emit(name.type, data));\n\n\t\tlet html = templateInit({});\n\n\t\tthis.$container.html(html);\n\t\tconsole.log('#History is initialized:', { basePath: options.basePath, container: this.container });\n\t}\n\n\t// Public methods -------------------------------------------------------\n\t\n\t/**\n\t * Parse data and display history visual representation\n\t * @param {string} gameId\n\t * @param {object} data\n\t * @returns {Object} parsed data - you could use for example gameDetails.prevRoundId / gameDetails.nextRoundId for button Next / Prev\n\t */\n\tshowHistory(gameId, data) {\n\t\tif (arguments[2]) console.warn('The third argument of showHistory(gameId, data) is deprecated and is not necessary to be provided anymore')\n\t\tif (!this.$container) return console.warn('#History is not initialized. Please call method \"init(container)\"');\n\n\t\t// skin to source game id\n\t\tif (GamesMappings.hasOwnProperty(gameId)) {\n\t\t\tgameId = GamesMappings[gameId].source;\n\t\t}\n\n\t\tlet adapter = '';\n\t\tfor (let name in Config.games) {\n\t\t\tif (Config.games[name].indexOf(gameId) !== -1) {\n\t\t\t\tadapter = name;\n\t\t\t}\n\t\t}\n\n\t\tif (!adapter) {\n\t\t\treturn console.warn(`The game \"${gameId}\" is not found in any of the available parsers. Please add it inside Config.games[parser] list`);\n\t\t}\n\n\t\t// TODO: this temporary here for backward compatibility. Remove it when the bars AND GPanel pass clean data\n\t\tif (data && data.result && data.result.history) data = data.result.history;\n\t\tif (data && data.result) data = data.result;\n\n\t\tconst isNewPanel = !(this.panel instanceof panels[adapter]);\n\n\t\tif (!this.panel || isNewPanel) {\n\t\t\tthis.panel && this.panel.removeListeners && this.panel.removeListeners();\n\t\t\tthis.panel = new panels[adapter]();\n\t\t}\n\n\t\tthis.$container.html(this.panel.render(\n\t\t\tgameId,\n\t\t\tdata,\n\t\t\tadapter,\n\t\t\tthis._basePath,\n\t\t\tthis._language,\n\t\t\tthis._assetsPath,\n\t\t\tthis._hideGameDetails,\n\t\t\tthis._hideTransactionDetails\n\t\t));\n\n\t\treturn this.panel.parsedData;\n\t}\n\n\t/**\n\t * Set correct currency format\n\t * @param {String} [code] - like \"USD\"\n\t * @param {String} [symbol] - like \"$\"\n\t * @param {String} [thousands] - like \",\"\n\t * @param {String} [decimals] - like \".\"\n\t */\n\tsetCurrencyFormat(code, symbol, thousands, decimals) {\n\t\tCurrency.set({ code, symbol, thousands, decimals });\n\t}\n\n\tresize(e) {\n\t\tif (!this.panel || !this.panel.resize) return;\n\n\t\tthis.panel.resize(e);\n\t}\n\n\t// Private methods ------------------------------------------------------\n}\n\nmodule.exports = History;\n","'use strict';\n\nconst Config = {\n  defaults: { lang: 'en' },\n  respinWinEndOnly: [\n    'ApacheWay',\n    'Astronaut',\n    'CashOrNothing',\n    'GemsInfernoMegaWays',\n    'MegaDragon',\n    'MidasGold',\n    'RockNLock',\n    'ShahMat',\n    'StolenTreasures',\n    'ThorsLightning'\n  ],\n  ways: [\n    '10001NightsMegaWays',\n    '80sSpins',\n    'AlexanderTheGreat',\n    'AliBabasLuckMegaways',\n    'AmazonIslandMegaWays',\n    'AthensMegaWays',\n    'Bets10FarmMegaWays',\n    'BigCatRescueMegaWays',\n    'BigCatRescueMegaWaysLimited',\n    'BloodSuckersMegaWays',\n    'BuffaloManiaMegaWays',\n    'CaiShen168',\n    'CaptainRizkMegaWays',\n    'CyberAttack',\n    'DoggyRichesMegaWays',\n    'DragonsFireInfiniReels',\n    'DragonsFireMegaWays',\n    'DragonsLuckMegaWays',\n    'DynamiteRichesMegaWays',\n    'DynamiteRichesMegaWaysLimited',\n    'EgyptMegaWays',\n    'FortuneCharm',\n    'FruitBlox',\n    'GemsInfernoMegaWays',\n    'GetTheGoldInfiniReels',\n    'GoldenLeprechaunMegaWays',\n    'GonzosQuestMegaWays',\n    'JingleWaysMegaWays',\n    'KnightsOfAvalon',\n    'KultaJaskaMegaWays',\n    'LaserFruit',\n    'LeprechaunsMagicMegaways',\n    'LondonTube',\n    'MagicPowersMegaWays',\n    'MidasGold',\n    'MixAndMatch',\n    'MonstersUnchained',\n    'MysteryReelsMegaWays',\n    'NFTMegaWays',\n    'NFTMegaWaysLimited',\n    'NarcosMexico',\n    'NinjaWays',\n    'PaddyPowerGoldMegaWays',\n    'PiggyRichesMegaWays',\n    'PiggyRichesMegaWaysLimited',\n    'PiratesPlentyMegaWays',\n    'RisqueMegaWays',\n    'SupremoFortunesMegaWays',\n    'SylvanSpirits',\n    'TheWishMasterMegaWays',\n    'ThorsVengeance',\n    'TransylvaniaNightOfBlood',\n    'VickyVentura',\n    'WellOfWildsMegaWays',\n    'WhatTheFoxMegaWays',\n    'WildTundra',\n    'WildTurkeyMegaWays',\n    'WrigleysWorld'\n  ],\n  cluster: [\n    '4Squad',\n    'AgeOfAkkadia',\n    'BlazingClusters',\n    'BlobstersClusterbuster',\n    'Bombuster',\n    'DragonsClusterbuster',\n    'FruitSnap',\n    'GoodLuckClusterbuster',\n    'HappyApples',\n    'HereKittyKitty',\n    'HotHotChilliPot',\n    'JackInAPot',\n    'LunaFortuna',\n    'MegaDragon',\n    'PeggySweets',\n    'PinatasAndPonies',\n    'RoyalGems',\n    'ShahMat',\n    'SugarMonster',\n    'ThorsLightning',\n    'TikiFruits',\n    'TikiFruitsTotemFrenzy',\n    'VaultOfAnubis',\n    'VaultOfAnubisLimited'\n  ],\n  scatterWins: [\n    'HappyApples',\n    'HereKittyKitty',\n    'PeggySweets',\n    'PinatasAndPonies'\n  ],\n  freeSpinsScatterWin: [ 'WrigleysWorld' ],\n  multiline: [ 'RainbowJackpotsPowerLines', 'WildCatsMultiline' ],\n  hasMultipliers: [\n    'CyberAttack',\n    'GetTheGoldInfiniReels',\n    'KnightsOfAvalon',\n    'LondonTube',\n    'MagicPowersMegaWays',\n    'TransylvaniaNightOfBlood',\n    'GemsInfernoMegaWays'\n  ],\n  resizableSlot: [\n    'AlexanderTheGreat',\n    'LaserFruit',\n    'MonstersUnchained',\n    'PrimateKing',\n    'ShadowSociety',\n    'TheEqualizer',\n    'VickyVentura',\n    'WarOfGods',\n    'WheelOfAmp',\n    'WinEscalator',\n    'ZillardKing'\n  ],\n  horizontalReels: {\n    top: [ 'Bets10FarmMegaWays', 'GemsInfernoMegaWays', 'MixAndMatch' ],\n    bottom: [],\n    topAndBottom: [ 'RisqueMegaWays' ]\n  },\n  infiniReels: [ 'DragonsFireInfiniReels', 'GetTheGoldInfiniReels' ],\n  dontDrawLines: [\n    '10001NightsMegaWays',\n    '4Squad',\n    'AgeOfAkkadia',\n    'AlexanderTheGreat',\n    'AliBabasLuckMegaways',\n    'AmazonIslandMegaWays',\n    'AthensMegaWays',\n    'Bets10FarmMegaWays',\n    'BigCatRescueMegaWays',\n    'BigCatRescueMegaWaysLimited',\n    'BlazingClusters',\n    'BlobstersClusterbuster',\n    'BloodSuckersMegaWays',\n    'BlueDiamond',\n    'Bombuster',\n    'BuffaloManiaMegaWays',\n    'CaiShen168',\n    'CaptainRizkMegaWays',\n    'CyberAttack',\n    'DoggyRichesMegaWays',\n    'DragonsClusterbuster',\n    'DragonsFireInfiniReels',\n    'DragonsFireMegaWays',\n    'DragonsLuckMegaWays',\n    'DynamiteRichesMegaWays',\n    'DynamiteRichesMegaWaysLimited',\n    'EgyptMegaWays',\n    'EmeraldDiamond',\n    'Forever7s',\n    'FortuneCharm',\n    'FruitBlox',\n    'FruitSnap',\n    'GemsInfernoMegaWays',\n    'GetTheGoldInfiniReels',\n    'GoldenLeprechaunMegaWays',\n    'GonzitasQuest',\n    'GonzosQuestMegaWays',\n    'GoodLuckClusterbuster',\n    'GrandWheel',\n    'HappyApples',\n    'HarleCoin',\n    'HereKittyKitty',\n    'HotHotChilliPot',\n    'JackInAPot',\n    'JingleWaysMegaWays',\n    'KnightsOfAvalon',\n    'KultaJaskaMegaWays',\n    'LaserFruit',\n    'LeprechaunsMagicMegaways',\n    'LondonTube',\n    'LunaFortuna',\n    'MagicPowersMegaWays',\n    'MayanGods',\n    'MegaDragon',\n    'MidasGold',\n    'MixAndMatch',\n    'MonstersUnchained',\n    'MultiplierRiches',\n    'MysteryReelsMegaWays',\n    'NFTMegaWays',\n    'NFTMegaWaysLimited',\n    'NarcosMexico',\n    'NinjaWays',\n    'PaddyPowerGoldMegaWays',\n    'PeggySweets',\n    'PiggyRichesMegaWays',\n    'PiggyRichesMegaWaysLimited',\n    'PinatasAndPonies',\n    'PiratesPlentyMegaWays',\n    'RedDiamond',\n    'RisqueMegaWays',\n    'RoyalGems',\n    'ShahMat',\n    'SugarMonster',\n    'SupremoFortunesMegaWays',\n    'SylvanSpirits',\n    'TheWishMasterMegaWays',\n    'ThorsLightning',\n    'ThorsVengeance',\n    'TikiFruits',\n    'TikiFruitsTotemFrenzy',\n    'TransylvaniaNightOfBlood',\n    'VaultOfAnubis',\n    'VaultOfAnubisLimited',\n    'VickyVentura',\n    'WellOfWildsMegaWays',\n    'WhatTheFoxMegaWays',\n    'WildTundra',\n    'WildTurkeyMegaWays',\n    'WrigleysWorld'\n  ],\n  gameReelsOffsets: [ { gameId: 'Masquerade', offsets: [ 1, 0.5, 0, 0.5, 1 ] } ],\n  assembledFatTiles: [\n    'BassBoss',\n    'BlobstersClusterbuster',\n    'CaiShen168',\n    'DoggyRichesMegaWays',\n    'DragonKingLegendOfTheSeas',\n    'DragonsClusterbuster',\n    'Flodder',\n    'FortuneHousePowerReels',\n    'HammerGods',\n    'HotHotChilliPot',\n    'Hustling',\n    'JoeExotic',\n    'LionsHoard',\n    'ShadowSociety',\n    'SugarMonster',\n    'TigerKingJoeExotic',\n    'TransylvaniaNightOfBlood',\n    'TreasureMinePowerReels'\n  ],\n  noJackpotScreen: [ 'CrazyGenie', 'GrandWheel', 'RAsLegend' ],\n  parsers: [\n    'default',      'dopSlot',\n    'dopBaccarat',  'dopRoulette',\n    'dopBlackjack', 'nsgSlot',\n    'caySlot',      'cayRoulette',\n    'cayBlackjack', 'cay3CardBrag',\n    'cayScratch',   'cayVideoPoker'\n  ],\n  games: {\n    default: [ 'GameName' ],\n    dopSlot: [\n      '10001Nights',\n      '10001NightsLimited',\n      '10001NightsMegaWays',\n      '1942SkyWarrior',\n      '24HourGrandPrix',\n      '4Squad',\n      '5Families',\n      '777Strike',\n      'AgeOfAkkadia',\n      'AgentRoyale',\n      'AlexanderTheGreat',\n      'AncientDisco',\n      'AncientScript',\n      'AncientsBlessing',\n      'ApacheWay',\n      'ArcadeBomb',\n      'Astronaut',\n      'AthensMegaWays',\n      'Atlantis',\n      'AurumCodex',\n      'AztecSpins',\n      'BaseGame',\n      'BassBoss',\n      'Beriched',\n      'BerichedLimited',\n      'Bets10FarmMegaWays',\n      'BettyBorisAndBoo',\n      'BigCatRescueMegaWays',\n      'BigCatRescueMegaWaysLimited',\n      'BlazingClusters',\n      'BlobstersClusterbuster',\n      'BloodSuckersMegaWays',\n      'BlueDiamond',\n      'Bombuster',\n      'BountyRaid',\n      'BountyRaid2',\n      'BountyRaidLimited',\n      'BuffaloManiaMegaWays',\n      'BugsysBar',\n      'BullsRunWild',\n      'CaiShen168',\n      'CakeAndIceCream',\n      'CaptainRizkMegaWays',\n      'CashOrNothing',\n      'CashUltimate',\n      'CashVolt',\n      'ChineseTreasures',\n      'Cinderella',\n      'CirqueDeLaFortune',\n      'ClashOfTheBeasts',\n      'CrazyGenie',\n      'CrystalMirror',\n      'CyberAttack',\n      'DaVincisMystery',\n      'DevilsNumber',\n      'DiamondBlitz',\n      'DiamondRoyale',\n      'DiceDiceDice',\n      'DivineWays',\n      'DoggyRichesMegaWays',\n      'DraculaAwakening',\n      'DragonKingLegendOfTheSeas',\n      'DragonsClusterbuster',\n      'DragonsFire',\n      'DragonsFireInfiniReels',\n      'DragonsFireMegaWays',\n      'DragonsLuck',\n      'DragonsLuckDeluxe',\n      'DragonsLuckMegaWays',\n      'DragonsLuckStacks',\n      'DynamiteRiches',\n      'DynamiteRichesLimited',\n      'DynamiteRichesMegaWays',\n      'DynamiteRichesMegaWaysLimited',\n      'EagleRiches',\n      'EgyptMegaWays',\n      'ElvenMagic',\n      'EmeraldDiamond',\n      'EpicJourney',\n      'EsqueletoMariachi',\n      'FaFaBabies',\n      'FiveStar',\n      'FiveStarPowerReels',\n      'FlamingFox',\n      'Flodder',\n      'Forever7s',\n      'FortuneCat',\n      'FortuneCharm',\n      'FortuneFest',\n      'FortuneHouse',\n      'FortuneHousePowerReels',\n      'FruitBlox',\n      'FruitSnap',\n      'GemsGoneWild',\n      'GemsGoneWildPowerReels',\n      'GemsInfernoMegaWays',\n      'Gemtastic',\n      'GenieNights',\n      'GetTheGoldInfiniReels',\n      'GodOfWealth',\n      'GodsOfTroy',\n      'GoldStar',\n      'GoldenCryptex',\n      'GoldenLeprechaunMegaWays',\n      'GoldenLotus',\n      'GoldenOffer',\n      'GoldenTsar',\n      'GonzitasQuest',\n      'GonzosQuestMegaWays',\n      'GoodLuckClusterbuster',\n      'GrandWheel',\n      'GreatGold',\n      'HammerGods',\n      'HappyApples',\n      'HarleCoin',\n      'HereKittyKitty',\n      'HoardOfPoseidon',\n      'HoardOfPoseidonLimited',\n      'HonoluluNights',\n      'HotHotChilliPot',\n      'HundredKDrop',\n      'Hustling',\n      'ImperialPalace',\n      'InTheRabbitHole',\n      'JackInAPot',\n      'JackpotQuest',\n      'JadeCharms',\n      'JesterSpins',\n      'JewelScarabs',\n      'JingleBells',\n      'JingleBellsLimited',\n      'JingleBellsPowerReels',\n      'JingleWaysMegaWays',\n      'JoeExotic',\n      'KnightsOfAvalon',\n      'KultaJaskaMegaWays',\n      'LaserFruit',\n      'LastChanceSaloon',\n      'LegendOfAthena',\n      'LegendaryExcalibur',\n      'LionDance',\n      'LionsHoard',\n      'LondonTube',\n      'LordOfTheWilds',\n      'LuckyDevil',\n      'LuckyEaster',\n      'LuckyFortuneCat',\n      'LuckyFridays',\n      'LuckyHalloween',\n      'LuckyMrGreen',\n      'LuckyOktoberfest',\n      'LuckyValentine',\n      'LuckyWizard',\n      'LunaFortuna',\n      'MagicGate',\n      'MagicPowersMegaWays',\n      'MagicTricks',\n      'MajesticMysteriesPowerReels',\n      'Masquerade',\n      'MayanGods',\n      'Mayhem',\n      'MegaDragon',\n      'MegaJade',\n      'MegaPyramid',\n      'MegaRise',\n      'MidasGold',\n      'MixAndMatch',\n      'MonstersUnchained',\n      'MultiplierRiches',\n      'MysteryFruit',\n      'MysteryFruitLimited',\n      'MysteryReelsDeluxe',\n      'MysteryReelsMegaWays',\n      'MysteryReelsPowerReels',\n      'MysticStaxx',\n      'MysticWheel',\n      'NFTMegaWays',\n      'NFTMegaWaysLimited',\n      'NarcosMexico',\n      'NeonLinks',\n      'NightRoller',\n      'NinjaWays',\n      'OceanFortune',\n      'PaddyPowerGoldMegaWays',\n      'PathOfDestiny',\n      'PeggySweets',\n      'PersianFortune',\n      'PhoenixFirePowerReels',\n      'PiggyPirates',\n      'PiggyRichesMegaWays',\n      'PiggyRichesMegaWaysLimited',\n      'PinatasAndPonies',\n      'PiratesPlenty',\n      'PiratesPlentyBattleForGold',\n      'PiratesPlentyMegaWays',\n      'PrimateKing',\n      'PrimateKingLimited',\n      'PussNBoots',\n      'RAsLegend',\n      'RainbowJackpots',\n      'RainbowJackpotsPowerLines',\n      'Reactor',\n      'RedDiamond',\n      'RedHotBBQ',\n      'RedPhoenixRising',\n      'ReelHeist',\n      'ReelKeeper',\n      'ReelKeeperLimited',\n      'ReelKeeperPowerReels',\n      'ReelKingMega',\n      'RegalBeasts',\n      'RegalStreak',\n      'ReptizillionsPowerReels',\n      'RiddleOfTheSphinx',\n      'RioStars',\n      'RisqueMegaWays',\n      'RobinHoodsWildForest',\n      'RockNLock',\n      'RocketMen',\n      'RoyalGems',\n      'SantaSpins',\n      'ShadowSociety',\n      'ShahMat',\n      'SheepGoneWild',\n      'SnowWildAndThe7Features',\n      'SpinTown',\n      'Stage888',\n      'StarsLuck',\n      'StolenTreasures',\n      'SugarMonster',\n      'SumoSpins',\n      'SunFortune',\n      'SupremoFortunesMegaWays',\n      'SylvanSpirits',\n      'TempleOfGold',\n      'TenElements',\n      'TheEqualizer',\n      'TheGreatestTrainRobbery',\n      'TheWildHatter',\n      'TheWildHatterLimited',\n      'TheWisecrackerLightning',\n      'ThorsLightning',\n      'ThorsVengeance',\n      'ThreeKingdoms',\n      'ThreeMusketeers',\n      'TigerKingJoeExotic',\n      'TikiFruits',\n      'TikiFruitsTotemFrenzy',\n      'TotemLightning',\n      'TotemLightningPowerReels',\n      'TransylvaniaNightOfBlood',\n      'TreasureMine',\n      'TreasureMinePowerReels',\n      'TricksAndTreats',\n      'Trillionaire',\n      'VaultCracker',\n      'VaultOfAnubis',\n      'VaultOfAnubisLimited',\n      'VickyVentura',\n      'ViralSpiral',\n      'WarOfGods',\n      'WellOfWildsMegaWays',\n      'WellOfWishes',\n      'WhatTheFoxMegaWays',\n      'WheelOfAmp',\n      'WildCatsMultiline',\n      'WildCircus',\n      'WildElements',\n      'WildExpedition',\n      'WildFight',\n      'WildHotChilliReels',\n      'WildNords',\n      'WildOClock',\n      'WildSpartans',\n      'WildTundra',\n      'WildWildChest',\n      'WinEscalator',\n      'WingsOfRa',\n      'WinterWonders',\n      'Wolfkin',\n      'WrigleysWorld',\n      'YucatansMystery',\n      'ZaidasFortune',\n      'ZeusLightningPowerReels',\n      'ZillardKing'\n    ],\n    tigEntSlot: [ 'TheWishMasterMegaWays', 'WildTurkeyMegaWays', 'FruitShopFrenzy' ],\n    caySlot: [\n      'AgesOfFortune',\n      'AladinsLamp',\n      'AliBabasTreasure',\n      'AsianRiches',\n      'BallOfShame',\n      'BarbarianTreasures',\n      'BeautysBeast',\n      'BetfairsWildArcade',\n      'BianconeriWilds',\n      'BigFishing',\n      'BigRacing',\n      'BombTheJackpot',\n      'BookOfDragons',\n      'BuffaloRespin',\n      'Bullfight',\n      'CastlePillager',\n      'CaveMegaBlast',\n      'ClassyVegas',\n      'CloningSheep',\n      'CrazySuper7s',\n      'Crusade',\n      'DarkJungle',\n      'DetectiveWilder',\n      'DiamondRush',\n      'DiscoFruits',\n      'DragonsWild',\n      'EasterMoney',\n      'EgyptianWilds',\n      'Fantasia',\n      'FlirtingTang',\n      'FootyFrenzy',\n      'FootyFrenzy2020',\n      'FootyFrenzy2022',\n      'ForestRush',\n      'FrootShoot',\n      'FruitPops',\n      'FruitStack',\n      'FruitStackBigSpins',\n      'FruitStackCashMachine',\n      'FruitStackDeluxe',\n      'FruitStackMysteryWin',\n      'FruitStackOne',\n      'FruitStackSuperDoubleWild',\n      'FunFair',\n      'GemBlast',\n      'GhostsNReels',\n      'GiftsOfRa',\n      'GoldenKingdom',\n      'GoldenPlanet',\n      'GoldenPot',\n      'GoldenThunder',\n      'GoldErado',\n      'Goldheads',\n      'GreatGems',\n      'GypsyLuck',\n      'HalloWin',\n      'HappyHour',\n      'HappyRooster',\n      'HotSlot',\n      'IndianPrincess',\n      'IrishClover',\n      'JadeDragon',\n      'JapaneseMystery',\n      'JoustingWilds',\n      'JigsAndReels',\n      'KeepingUpWithThePaddys',\n      'LeagueOfWilds',\n      'LittleRedRidingHood',\n      'LuckyCabaret',\n      'LuckyLadies',\n      'LuckyMahjong',\n      'MagicFairies',\n      'MagicMoney',\n      'MagnificentWild',\n      'ManekiGold',\n      'MaximusReels',\n      'MayanMystery',\n      'MazeOfFortune',\n      'MineCrusher',\n      'MississippiQueen',\n      'MoneyMachine',\n      'MoneyNight',\n      'MoneyTower',\n      'MonteCarloRacing',\n      'MrDiamonds',\n      'NeonWilds',\n      'NudgingGems',\n      'OstrichLuck',\n      'PaddyPowerFanatics',\n      'PaddyPowerGold',\n      'PaddyPowerGoldBookOfLuck',\n      'PaddyPowerGoldHaxe',\n      'PaddyPowerGoldOnTour',\n      'PaddyPowerMysteryGold',\n      'PaddyPowerShowtime',\n      'PaddysLuckyMine',\n      'PaddysLuckyPigeon',\n      'PaddysWonderWheelUnderConstruction',\n      'ParadiseTreasures',\n      'PearlRespins',\n      'PersianGlory',\n      'PiratesHold',\n      'PiratesHoldDavyLockersCoins',\n      'PoseidonFortune',\n      'PyramidGold',\n      'RacingWilds',\n      'RedEmperor',\n      'ReelsOfEgypt',\n      'RhinoRumble',\n      'RobinHoodGoldenLoot',\n      'RoyalGoose',\n      'RubyWalshChampionsGold',\n      'RussianGlory',\n      'SafariDream',\n      'SantasSpins',\n      'ShamanSpins',\n      'ShowtimeSpinner',\n      'SinbadsGold',\n      'Skulls',\n      'SlottingSlopes',\n      'SmoothieSmash',\n      'SnowWhite',\n      'SolarSnap',\n      'SonsOfAsgard',\n      'SparklingJackpot',\n      'SphinxGold',\n      'SpyAffairs',\n      'SuperFuego',\n      'ThaiThai',\n      'TheGreatWild',\n      'TheHeist',\n      'TotemsWild',\n      'TrickOTreat',\n      'TumbleDwarf',\n      'TumbleDwarfMysteryGold',\n      'WheelOrDeal',\n      'WildBugs',\n      'WildEgypt',\n      'WildSheriff',\n      'WildStars',\n      'WildWildWeb',\n      'WishAWin',\n      'WorldOfWizards',\n      'WormKing'\n    ],\n    dopBlackjack: [\n      'ClassicBlackjack',\n      'DONDBlackjack',\n      'PlatinumBlackjack',\n      'PlatinumBlackjackSideBetsPA'\n    ],\n    dopRoulette: [\n      'EuropeanRoulette',\n      'PlatinumRoulette',\n      'PlatinumRouletteSingleZero'\n    ],\n    dopBaccarat: [ 'PuntoBanco' ],\n    nsgSlot: [\n      'AliBabasLuckMegaways',\n      'AliBabasLuckPowerReels',\n      'AmazonIslandMegaWays',\n      'LeprechaunsMagic',\n      'ChineseWilds',\n      'ElephantTreasure',\n      'EpicTreasure',\n      'GoldenLamps',\n      'GoldenToad',\n      'LeprechaunsMagicMegaways',\n      'LeprechaunsMagicPowerReels',\n      'LuckyCarnival',\n      'MacauRacing',\n      'NeptunesRiches',\n      'RedHotSlot',\n      'AsianFortune',\n      'DragonPearl',\n      'AliBabasLuck',\n      'CasinoSpin',\n      'CobraQueen',\n      'DreamDestiny',\n      'WantedWildz',\n      '80sSpins',\n      'CottonGangAffair',\n      'DesertLegendsSpins',\n      'JellyMULTIHOPS',\n      'BigBassAdventure'\n    ],\n    cayBlackjack: [\n      'BlackjackStandard3H',\n      'BlackjackPremium3H',\n      'BlackjackPremium3HPlus',\n      'BlackjackPremium3HCashOut',\n      'BlackjackClassic',\n      'BlackjackOriginal',\n      'BlackjackOriginalCashOut',\n      'BlackjackOriginalSideBets',\n      'BlackjackPremiumSideBets'\n    ],\n    cayRoulette: [\n      'RouletteEuropean',\n      'RoulettePremium',\n      'RouletteMoneyBack',\n      'RoulettePremiumPlus',\n      'RoulettePremiumMoneyBack',\n      'RoulettePremium2018',\n      'RouletteClassic',\n      'RouletteOriginalMoneyBack',\n      'RouletteOriginal',\n      'RouletteOriginalStats'\n    ],\n    cayScratch: [\n      'ScrRubyWalshChampionsGold',\n      'Scr10pRubyWalshChampionsGold',\n      'FourInOneScratchStake1',\n      'FourInOneScratchStake2',\n      'FourInOneScratchStake5',\n      'FourInOneScratchStake10',\n      'ScrFootyFrenzy',\n      'ScrFootyFrenzy2020',\n      'ScrFootyFrenzy2022',\n      'Scr10pFootyFrenzy2022'\n    ],\n    cay3CardBrag: [ '3CardBrag' ],\n    cayVideoPoker: [ 'VPJacksOrBetterCashoutPremium' ]\n  },\n  lines: {\n    dop: [\n      '10001Nights',\n      '10001NightsLimited',\n      '1942SkyWarrior',\n      '24HourGrandPrix',\n      '5Families',\n      '777Strike',\n      'AgentRoyale',\n      'AncientDisco',\n      'AncientScript',\n      'AncientsBlessing',\n      'ApacheWay',\n      'ArcadeBomb',\n      'Astronaut',\n      'Atlantis',\n      'AurumCodex',\n      'AztecSpins',\n      'BaseGame',\n      'BassBoss',\n      'Beriched',\n      'BerichedLimited',\n      'BettyBorisAndBoo',\n      'BlueDiamond',\n      'BountyRaid',\n      'BountyRaid2',\n      'BountyRaidLimited',\n      'BugsysBar',\n      'BullsRunWild',\n      'CakeAndIceCream',\n      'CashOrNothing',\n      'CashUltimate',\n      'CashVolt',\n      'ChineseTreasures',\n      'Cinderella',\n      'CirqueDeLaFortune',\n      'ClashOfTheBeasts',\n      'CrazyGenie',\n      'CrystalMirror',\n      'DaVincisMystery',\n      'DevilsNumber',\n      'DiamondBlitz',\n      'DiamondRoyale',\n      'DiceDiceDice',\n      'DivineWays',\n      'DraculaAwakening',\n      'DragonKingLegendOfTheSeas',\n      'DragonsFire',\n      'DragonsLuck',\n      'DragonsLuckDeluxe',\n      'DragonsLuckStacks',\n      'DynamiteRiches',\n      'DynamiteRichesLimited',\n      'EagleRiches',\n      'ElvenMagic',\n      'EmeraldDiamond',\n      'EpicJourney',\n      'EsqueletoMariachi',\n      'FaFaBabies',\n      'FiveStar',\n      'FiveStarPowerReels',\n      'FlamingFox',\n      'Flodder',\n      'Forever7s',\n      'FortuneFest',\n      'FortuneHouse',\n      'FortuneHousePowerReels',\n      'FruitShopFrenzy',\n      'GemsGoneWild',\n      'GemsGoneWildPowerReels',\n      'Gemtastic',\n      'GenieNights',\n      'GodOfWealth',\n      'GodsOfTroy',\n      'GoldStar',\n      'GoldenCryptex',\n      'GoldenLotus',\n      'GoldenOffer',\n      'GoldenTsar',\n      'GonzitasQuest',\n      'GrandWheel',\n      'GreatGold',\n      'HammerGods',\n      'HarleCoin',\n      'HoardOfPoseidon',\n      'HoardOfPoseidonLimited',\n      'HonoluluNights',\n      'HundredKDrop',\n      'Hustling',\n      'ImperialPalace',\n      'InTheRabbitHole',\n      'JackpotQuest',\n      'JadeCharms',\n      'JesterSpins',\n      'JewelScarabs',\n      'JingleBells',\n      'JingleBellsLimited',\n      'JingleBellsPowerReels',\n      'JoeExotic',\n      'LastChanceSaloon',\n      'LegendOfAthena',\n      'LegendaryExcalibur',\n      'LionDance',\n      'LionsHoard',\n      'LordOfTheWilds',\n      'LuckyDevil',\n      'LuckyEaster',\n      'LuckyFortuneCat',\n      'LuckyFridays',\n      'LuckyHalloween',\n      'LuckyMrGreen',\n      'LuckyOktoberfest',\n      'LuckyValentine',\n      'LuckyWizard',\n      'MagicGate',\n      'MagicTricks',\n      'MajesticMysteriesPowerReels',\n      'Masquerade',\n      'MayanGods',\n      'Mayhem',\n      'MegaJade',\n      'MegaPyramid',\n      'MegaRise',\n      'MidasGold',\n      'MultiplierRiches',\n      'MysteryFruit',\n      'MysteryFruitLimited',\n      'MysteryReelsDeluxe',\n      'MysteryReelsMegaWays',\n      'MysteryReelsPowerReels',\n      'MysticStaxx',\n      'MysticWheel',\n      'NeonLinks',\n      'NightRoller',\n      'OceanFortune',\n      'PathOfDestiny',\n      'PersianFortune',\n      'PhoenixFirePowerReels',\n      'PiggyPirates',\n      'PiratesPlenty',\n      'PiratesPlentyBattleForGold',\n      'PrimateKing',\n      'PrimateKingLimited',\n      'PussNBoots',\n      'RAsLegend',\n      'RainbowJackpots',\n      'RainbowJackpotsPowerLines',\n      'Reactor',\n      'RedDiamond',\n      'RedHotBBQ',\n      'RedPhoenixRising',\n      'ReelHeist',\n      'ReelKeeper',\n      'ReelKeeperLimited',\n      'ReelKeeperPowerReels',\n      'ReelKingMega',\n      'RegalBeasts',\n      'RegalStreak',\n      'ReptizillionsPowerReels',\n      'RiddleOfTheSphinx',\n      'RioStars',\n      'RobinHoodsWildForest',\n      'RockNLock',\n      'RocketMen',\n      'SantaSpins',\n      'ShadowSociety',\n      'SheepGoneWild',\n      'SnowWildAndThe7Features',\n      'Stage888',\n      'StolenTreasures',\n      'SumoSpins',\n      'SunFortune',\n      'TempleOfGold',\n      'TenElements',\n      'TheEqualizer',\n      'TheGreatestTrainRobbery',\n      'TheWildHatter',\n      'TheWildHatterLimited',\n      'TheWisecrackerLightning',\n      'ThreeKingdoms',\n      'ThreeMusketeers',\n      'TigerKingJoeExotic',\n      'TikiFruits',\n      'TotemLightning',\n      'TotemLightningPowerReels',\n      'TreasureMine',\n      'TreasureMinePowerReels',\n      'TricksAndTreats',\n      'Trillionaire',\n      'VaultCracker',\n      'ViralSpiral',\n      'WarOfGods',\n      'WellOfWishes',\n      'WheelOfAmp',\n      'WildCatsMultiline',\n      'WildCircus',\n      'WildElements',\n      'WildExpedition',\n      'WildFight',\n      'WildHotChilliReels',\n      'WildNords',\n      'WildOClock',\n      'WildSpartans',\n      'WildWildChest',\n      'WinEscalator',\n      'WingsOfRa',\n      'WinterWonders',\n      'Wolfkin',\n      'YucatansMystery',\n      'ZaidasFortune',\n      'ZeusLightningPowerReels',\n      'ZillardKing'\n    ]\n  }\n};\n\nmodule.exports = Config;","module.exports =\n {\n  lines: [\n    { id: '10001Nights', hash: '554c21fc88' },\n    { id: '10001NightsLimited', hash: '1c2de08ba7' },\n    { id: '1942SkyWarrior', hash: 'fd8c30b999' },\n    { id: '24HourGrandPrix', hash: 'abed1feca8' },\n    { id: '5Families', hash: '0e6ab42754' },\n    { id: '777Strike', hash: 'eaad0729de' },\n    { id: 'AgentRoyale', hash: '636f4686e4' },\n    { id: 'AncientDisco', hash: '5d9299fad4' },\n    { id: 'AncientsBlessing', hash: '243e83a2e0' },\n    { id: 'AncientScript', hash: 'efbea6331a' },\n    { id: 'ApacheWay', hash: 'e6559beb50' },\n    { id: 'ArcadeBomb', hash: 'ad1b025536' },\n    { id: 'Astronaut', hash: 'd751713988' },\n    { id: 'Atlantis', hash: '668c6cb757' },\n    { id: 'AurumCodex', hash: '2a129f69b0' },\n    { id: 'AztecSpins', hash: 'abed1feca8' },\n    { id: 'BaseGame', hash: 'd7e7cac7b0' },\n    { id: 'BassBoss', hash: '9d20c9b4d3' },\n    { id: 'Beriched', hash: 'f9fe55b48e' },\n    { id: 'BerichedLimited', hash: 'f9fe55b48e' },\n    { id: 'BettyBorisAndBoo', hash: 'e9335b0fe2' },\n    { id: 'BlueDiamond', hash: '28a54403ba' },\n    { id: 'BountyRaid', hash: '2adf474b9b' },\n    { id: 'BountyRaid2', hash: '9236475494' },\n    { id: 'BountyRaidLimited', hash: '2adf474b9b' },\n    { id: 'BugsysBar', hash: '5c42308bb9' },\n    { id: 'BullsRunWild', hash: 'c858c4efac' },\n    { id: 'CakeAndIceCream', hash: '01a877a880' },\n    { id: 'CashOrNothing', hash: 'b26c48bcfd' },\n    { id: 'CashUltimate', hash: '0196324c27' },\n    { id: 'CashVolt', hash: '57510a97b8' },\n    { id: 'ChineseTreasures', hash: 'ad1b025536' },\n    { id: 'Cinderella', hash: 'ad1b025536' },\n    { id: 'CirqueDeLaFortune', hash: '883da0c260' },\n    { id: 'ClashOfTheBeasts', hash: '896cf6cfcf' },\n    { id: 'CrazyGenie', hash: 'ad1b025536' },\n    { id: 'CrystalMirror', hash: 'd411731ad4' },\n    { id: 'DaVincisMystery', hash: '9e48f6213a' },\n    { id: 'DevilsNumber', hash: '383a0bec8f' },\n    { id: 'DiamondBlitz', hash: '54024c5d75' },\n    { id: 'DiamondRoyale', hash: '30557a4f78' },\n    { id: 'DiceDiceDice', hash: 'eaad0729de' },\n    { id: 'DivineWays', hash: 'ad1b025536' },\n    { id: 'DraculaAwakening', hash: '0196324c27' },\n    { id: 'DragonKingLegendOfTheSeas', hash: '16e06c4bb9' },\n    { id: 'DragonsFire', hash: '6d09ca2fae' },\n    { id: 'DragonsLuck', hash: 'efbea6331a' },\n    { id: 'DragonsLuckDeluxe', hash: 'bb24bf1067' },\n    { id: 'DragonsLuckStacks', hash: 'd0a3fc8ac8' },\n    { id: 'DynamiteRiches', hash: '554c21fc88' },\n    { id: 'DynamiteRichesLimited', hash: '554c21fc88' },\n    { id: 'EagleRiches', hash: 'a737950291' },\n    { id: 'ElvenMagic', hash: 'ad1b025536' },\n    { id: 'EmeraldDiamond', hash: '28a54403ba' },\n    { id: 'EpicJourney', hash: 'ad1b025536' },\n    { id: 'EsqueletoMariachi', hash: '6d09ca2fae' },\n    { id: 'FaFaBabies', hash: 'b26c48bcfd' },\n    { id: 'FiveStar', hash: '3e4c202882' },\n    { id: 'FiveStarPowerReels', hash: '5577e9474c' },\n    { id: 'FlamingFox', hash: 'f89a1408f5' },\n    { id: 'Flodder', hash: '29ecc1fd04' },\n    { id: 'Forever7s', hash: '28a54403ba' },\n    { id: 'FortuneFest', hash: 'efbea6331a' },\n    { id: 'FortuneHouse', hash: 'ad1b025536' },\n    { id: 'FortuneHousePowerReels', hash: 'c4f6bb2b02' },\n    { id: 'FruitShopFrenzy', hash: 'b90e5a00a6' },\n    { id: 'GemsGoneWild', hash: 'ad1b025536' },\n    { id: 'GemsGoneWildPowerReels', hash: 'c4f6bb2b02' },\n    { id: 'Gemtastic', hash: 'bbac199fe3' },\n    { id: 'GenieNights', hash: '764f990495' },\n    { id: 'GodOfWealth', hash: 'ad1b025536' },\n    { id: 'GodsOfTroy', hash: '4288a69cdd' },\n    { id: 'GoldenCryptex', hash: '337b424204' },\n    { id: 'GoldenLotus', hash: 'ad1b025536' },\n    { id: 'GoldenOffer', hash: '467cc2bb3a' },\n    { id: 'GoldenTsar', hash: 'dd3cea1145' },\n    { id: 'GoldStar', hash: 'ad1b025536' },\n    { id: 'GonzitasQuest', hash: '42519bfbba' },\n    { id: 'GrandWheel', hash: 'd2cd8dc755' },\n    { id: 'GreatGold', hash: '4bd82b091c' },\n    { id: 'HammerGods', hash: '3ddeefb8cb' },\n    { id: 'HarleCoin', hash: '28a54403ba' },\n    { id: 'HoardOfPoseidon', hash: '0196324c27' },\n    { id: 'HoardOfPoseidonLimited', hash: '0196324c27' },\n    { id: 'HonoluluNights', hash: 'bac8238f30' },\n    { id: 'HundredKDrop', hash: 'ad1b025536' },\n    { id: 'Hustling', hash: 'bffd40a071' },\n    { id: 'ImperialPalace', hash: 'ad1b025536' },\n    { id: 'InTheRabbitHole', hash: 'ae0b8a32e7' },\n    { id: 'JackpotQuest', hash: '67fa28073b' },\n    { id: 'JadeCharms', hash: 'ad1b025536' },\n    { id: 'JesterSpins', hash: 'bac8238f30' },\n    { id: 'JewelScarabs', hash: 'eb15e59be2' },\n    { id: 'JingleBells', hash: 'ad1b025536' },\n    { id: 'JingleBellsLimited', hash: '5d9299fad4' },\n    { id: 'JingleBellsPowerReels', hash: '3ec973f6f5' },\n    { id: 'JoeExotic', hash: 'ff26084ec3' },\n    { id: 'LastChanceSaloon', hash: 'fd8c30b999' },\n    { id: 'LegendaryExcalibur', hash: 'eaad0729de' },\n    { id: 'LegendOfAthena', hash: '0137f214dc' },\n    { id: 'LionDance', hash: '6d09ca2fae' },\n    { id: 'LionsHoard', hash: 'f9fe55b48e' },\n    { id: 'LordOfTheWilds', hash: '0196324c27' },\n    { id: 'LuckyDevil', hash: 'efbea6331a' },\n    { id: 'LuckyEaster', hash: 'ad1b025536' },\n    { id: 'LuckyFortuneCat', hash: 'ad1b025536' },\n    { id: 'LuckyFridays', hash: '3ddeefb8cb' },\n    { id: 'LuckyHalloween', hash: 'ad1b025536' },\n    { id: 'LuckyMrGreen', hash: 'ad1b025536' },\n    { id: 'LuckyOktoberfest', hash: '90e1e3781d' },\n    { id: 'LuckyValentine', hash: 'ad1b025536' },\n    { id: 'LuckyWizard', hash: '6d09ca2fae' },\n    { id: 'MagicGate', hash: 'ad1b025536' },\n    { id: 'MagicTricks', hash: '6fa1a284f4' },\n    { id: 'MajesticMysteriesPowerReels', hash: '2fde0ff29d' },\n    { id: 'Masquerade', hash: '6bb9f412e7' },\n    { id: 'MayanGods', hash: '989e9c66f1' },\n    { id: 'Mayhem', hash: 'faa30a2f52' },\n    { id: 'MegaJade', hash: 'efbea6331a' },\n    { id: 'MegaPyramid', hash: '383a0bec8f' },\n    { id: 'MegaRise', hash: 'bac8238f30' },\n    { id: 'MidasGold', hash: '4677dd8218' },\n    { id: 'MultiplierRiches', hash: '799f378895' },\n    { id: 'MysteryFruit', hash: 'ad1b025536' },\n    { id: 'MysteryFruitLimited', hash: 'ad1b025536' },\n    { id: 'MysteryReelsDeluxe', hash: 'e6559beb50' },\n    { id: 'MysteryReelsMegaWays', hash: 'd751713988' },\n    { id: 'MysteryReelsPowerReels', hash: '763d398ba0' },\n    { id: 'MysticStaxx', hash: '7dc717d8c6' },\n    { id: 'MysticWheel', hash: '70aa7130f9' },\n    { id: 'NeonLinks', hash: '30557a4f78' },\n    { id: 'NightRoller', hash: 'ac86fec757' },\n    { id: 'OceanFortune', hash: 'ad1b025536' },\n    { id: 'PathOfDestiny', hash: 'f9fe55b48e' },\n    { id: 'PersianFortune', hash: 'ad1b025536' },\n    { id: 'PhoenixFirePowerReels', hash: 'eb9b1feada' },\n    { id: 'PiggyPirates', hash: '02fceeed54' },\n    { id: 'PiratesPlenty', hash: '16ce2bb2cd' },\n    { id: 'PiratesPlentyBattleForGold', hash: '51683b2821' },\n    { id: 'PrimateKing', hash: '3b584f8515' },\n    { id: 'PrimateKingLimited', hash: 'dd3cea1145' },\n    { id: 'PussNBoots', hash: 'ad1b025536' },\n    { id: 'RainbowJackpots', hash: 'ad1b025536' },\n    { id: 'RainbowJackpotsPowerLines', hash: '251f835c6f' },\n    { id: 'RAsLegend', hash: '6d09ca2fae' },\n    { id: 'Reactor', hash: '170725b0d8' },\n    { id: 'RedDiamond', hash: '28a54403ba' },\n    { id: 'RedHotBBQ', hash: '5d9299fad4' },\n    { id: 'RedPhoenixRising', hash: '6d09ca2fae' },\n    { id: 'ReelHeist', hash: 'b169281f06' },\n    { id: 'ReelKeeper', hash: '1ea1dd625b' },\n    { id: 'ReelKeeperLimited', hash: '1ea1dd625b' },\n    { id: 'ReelKeeperPowerReels', hash: 'f11e7d7daf' },\n    { id: 'ReelKingMega', hash: '723c2b89c7' },\n    { id: 'RegalBeasts', hash: '037e87e0b9' },\n    { id: 'RegalStreak', hash: '3e4c202882' },\n    { id: 'ReptizillionsPowerReels', hash: '6c76d4f564' },\n    { id: 'RiddleOfTheSphinx', hash: 'f9fe55b48e' },\n    { id: 'RioStars', hash: '3ddeefb8cb' },\n    { id: 'RobinHoodsWildForest', hash: 'edbd8925ba' },\n    { id: 'RocketMen', hash: 'ad1b025536' },\n    { id: 'RockNLock', hash: '15e64e2d28' },\n    { id: 'SantaSpins', hash: '9236475494' },\n    { id: 'ShadowSociety', hash: 'bc852422f0' },\n    { id: 'SheepGoneWild', hash: '97ac5d6f28' },\n    { id: 'SnowWildAndThe7Features', hash: 'ad1b025536' },\n    { id: 'SpinTown', hash: '6d09ca2fae' },\n    { id: 'Stage888', hash: 'ad1b025536' },\n    { id: 'StarsLuck', hash: 'efbea6331a' },\n    { id: 'StolenTreasures', hash: 'f644ef8964' },\n    { id: 'SumoSpins', hash: '6d09ca2fae' },\n    { id: 'SunFortune', hash: 'efbea6331a' },\n    { id: 'TempleOfGold', hash: 'ad1b025536' },\n    { id: 'TenElements', hash: '6d09ca2fae' },\n    { id: 'TheEqualizer', hash: '904acdf3ab' },\n    { id: 'TheGreatestTrainRobbery', hash: '8989c4ae64' },\n    { id: 'TheWildHatter', hash: '3ddeefb8cb' },\n    { id: 'TheWildHatterLimited', hash: '3ddeefb8cb' },\n    { id: 'TheWisecrackerLightning', hash: '30557a4f78' },\n    { id: 'ThreeKingdoms', hash: 'ad1b025536' },\n    { id: 'ThreeMusketeers', hash: '6d09ca2fae' },\n    { id: 'TigerKingJoeExotic', hash: 'ff26084ec3' },\n    { id: 'TotemLightning', hash: '6d09ca2fae' },\n    { id: 'TotemLightningPowerReels', hash: '956b922e69' },\n    { id: 'TreasureMine', hash: '6d09ca2fae' },\n    { id: 'TreasureMinePowerReels', hash: '6c76d4f564' },\n    { id: 'TricksAndTreats', hash: '0d89bf9cdb' },\n    { id: 'Trillionaire', hash: 'f9fe55b48e' },\n    { id: 'VaultCracker', hash: '16e06c4bb9' },\n    { id: 'ViralSpiral', hash: 'd751713988' },\n    { id: 'WarOfGods', hash: 'e561d99f31' },\n    { id: 'WellOfWishes', hash: '90e1e3781d' },\n    { id: 'WheelOfAmp', hash: 'a2f7ad42e6' },\n    { id: 'WildCatsMultiline', hash: 'c039ff9b37' },\n    { id: 'WildCircus', hash: '6d09ca2fae' },\n    { id: 'WildElements', hash: '3bcaaae6d6' },\n    { id: 'WildExpedition', hash: '0196324c27' },\n    { id: 'WildFight', hash: 'ad1b025536' },\n    { id: 'WildHotChilliReels', hash: '5a25247d01' },\n    { id: 'WildNords', hash: 'ad1b025536' },\n    { id: 'WildOClock', hash: 'cf0f2e3198' },\n    { id: 'WildSpartans', hash: 'efbea6331a' },\n    { id: 'WildWildChest', hash: 'ad1b025536' },\n    { id: 'WinEscalator', hash: '64d873ff50' },\n    { id: 'WingsOfRa', hash: 'e1ae4aea84' },\n    { id: 'WinterWonders', hash: '6d09ca2fae' },\n    { id: 'Wolfkin', hash: '025373914a' },\n    { id: 'YucatansMystery', hash: '0196324c27' },\n    { id: 'ZaidasFortune', hash: '70b7a0978e' },\n    { id: 'ZeusLightningPowerReels', hash: 'c9ea3d4f55' },\n    { id: 'ZillardKing', hash: 'dd3cea1145' }\n  ]\n}","const GamesMappings = {\n    \"BlackjackStandard3H\": {\n        \"source\": \"BlackjackClassic\"\n    },\n    \"PlatinumBlackjack21Plus3PE\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackAnyPair\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackBustorama\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"PlatinumBlackjackSideBets\": {\n        \"source\": \"PlatinumBlackjack\"\n    },\n    \"RouletteEuropean\": {\n        \"source\": \"RouletteClassic\"\n    },\n    \"RouletteMoneyBack\": {\n        \"source\": \"RouletteOriginalMoneyBack\"\n    },\n    \"RoulettePremium\": {\n        \"source\": \"RouletteOriginal\"\n    },\n    \"RoulettePremium2018\": {\n        \"source\": \"RoulettePremium\"\n    },\n    \"RoulettePremiumPlus\": {\n        \"source\": \"RouletteOriginalStats\"\n    },\n    \"BerichedLimited\": {\n        \"source\": \"BerichedLimited\"\n    },\n    \"BountyRaidLimited\": {\n        \"source\": \"BountyRaid\"\n    },\n    \"HoardOfPoseidonLimited\": {\n        \"source\": \"HoardOfPoseidon\"\n    },\n    \"MysteryFruitLimited\": {\n        \"source\": \"MysteryFruit\"\n    },\n    \"PiggyRichesMegaWaysLimited\": {\n        \"source\": \"PiggyRichesMegaWays\"\n    },\n    \"ReelKeeperLimited\": {\n        \"source\": \"ReelKeeper\"\n    },\n    \"TheWildHatterLimited\": {\n        \"source\": \"TheWildHatter\"\n    },\n    \"TigerKingJoeExotic\": {\n        \"source\": \"JoeExotic\"\n    },\n    \"VaultOfAnubisLimited\": {\n        \"source\": \"VaultOfAnubis\"\n    },\n    \"ZeusLightningPowerReelsWheel\": {\n        \"source\":\"ZeusLightningPowerReels\"\n    },\n    \"WellOfWildsMegaWaysWheel\": {\n        \"source\":\"WellOfWildsMegaWays\"\n    },\n    \"PiratesPlentyMegaWaysWheel\": {\n        \"source\":\"PiratesPlentyMegaWays\"\n    },\n    \"GonzosQuestMegaWaysWheel\": {\n        \"source\":\"GonzosQuestMegaWays\"\n    },\n    \"GonzosQuestMegaWaysLimited\": {\n        \"source\":\"GonzosQuestMegaWays\"\n    },\n    \"ClassicBlackjackBetConstruct\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetfair\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetsson\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackBetssonColor\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackLeoVegas\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackMrGreen\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackPaddyPower\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"ClassicBlackjackRank\": {\n        \"source\":\"ClassicBlackjack\"\n    },\n    \"EuropeanRouletteBetConstruct\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteBetfair\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteLeoVegas\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteMrGreen\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRoulettePaddyPower\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteRank\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"EuropeanRouletteWilliamHill\": {\n        \"source\":\"EuropeanRoulette\"\n    },\n    \"PlatinumRoulettePlayStar\": {\n        \"source\":\"PlatinumRoulette\"\n    },\n    \"PuntoBancoBetfair\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoBetsson\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoLeoVegas\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoMrGreen\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoPaddyPower\": {\n        \"source\":\"PuntoBanco\"\n    },\n    \"PuntoBancoRank\": {\n        \"source\":\"PuntoBanco\"\n    }\n};\n\nmodule.exports = GamesMappings;","const keyValueMap = {\n\tPlatinumRoulette: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 00 - 2',\n\t\t\ttrio_2: '00 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_00 : '00',\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '00 - 3',\n\t\t\tsplit_59: '0 - 00',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tbasket_0: ' 0 - 00 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t},\n\tEuropeanRoulette: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '0 - 2',\n\t\t\tsplit_59: '0 - 3',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tcorner_22: ' 0 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t},\n\tPlatinumRouletteSingleZero: {\n\t\t//replacing server object keys with different values, e.g. red_0 becomes color_0, and  black_0 becomes color_1,\n\t\t//so the two values can be grouped\n\t\tpre: {\n\t\t\tred_0: 'color_0',\n\t\t\tblack_0: 'color_1',\n\t\t\teven_0: 'evenOdd_0',\n\t\t\todd_0: 'evenOdd_1',\n\t\t\tsmall_0: 'smallBig_0',\n\t\t\tbig_0: 'smallBig_1'\n\t\t},\n\t\t//replacing server object keys with more readable after parsing, e.g. split_0 becomes '1 - 2'\n\t\tpost: {\n\t\t\t//trios\n\t\t\ttrio_0: '0 - 1 - 2',\n\t\t\ttrio_1: '0 - 2 - 3',\n\t\t\t//straights\n\t\t\tstraight_0 : '0',\n\t\t\tstraight_1 : '1',\n\t\t\tstraight_2 : '2',\n\t\t\tstraight_3 : '3',\n\t\t\tstraight_4 : '4',\n\t\t\tstraight_5 : '5',\n\t\t\tstraight_6 : '6',\n\t\t\tstraight_7 : '7',\n\t\t\tstraight_8 : '8',\n\t\t\tstraight_9 : '9',\n\t\t\tstraight_10 : '10',\n\t\t\tstraight_11 : '11',\n\t\t\tstraight_12 : '12',\n\t\t\tstraight_13 : '13',\n\t\t\tstraight_14 : '14',\n\t\t\tstraight_15 : '15',\n\t\t\tstraight_16 : '16',\n\t\t\tstraight_17 : '17',\n\t\t\tstraight_18 : '18',\n\t\t\tstraight_19 : '19',\n\t\t\tstraight_20 : '20',\n\t\t\tstraight_21 : '21',\n\t\t\tstraight_22 : '22',\n\t\t\tstraight_23 : '23',\n\t\t\tstraight_24 : '24',\n\t\t\tstraight_25 : '25',\n\t\t\tstraight_26 : '26',\n\t\t\tstraight_27 : '27',\n\t\t\tstraight_28 : '28',\n\t\t\tstraight_29 : '29',\n\t\t\tstraight_30 : '30',\n\t\t\tstraight_31 : '31',\n\t\t\tstraight_32 : '32',\n\t\t\tstraight_33 : '33',\n\t\t\tstraight_34 : '34',\n\t\t\tstraight_35 : '35',\n\t\t\tstraight_36 : '36',\n\t\t\t//splits\n\t\t\tsplit_0: '1 - 2',\n\t\t\tsplit_1: '2 - 3',\n\t\t\tsplit_2: '1 - 4',\n\t\t\tsplit_3: '2 - 5',\n\t\t\tsplit_4: '3 - 6',\n\t\t\tsplit_5: '4 - 5',\n\t\t\tsplit_6: '5 - 6',\n\t\t\tsplit_7: '4 - 7',\n\t\t\tsplit_8: '5 - 8',\n\t\t\tsplit_9: '6 - 9',\n\t\t\tsplit_10: '7 - 8',\n\t\t\tsplit_11: '8 - 9',\n\t\t\tsplit_12: '7 - 10',\n\t\t\tsplit_13: '8 - 11',\n\t\t\tsplit_14: '9 - 12',\n\t\t\tsplit_15: '10 - 11',\n\t\t\tsplit_16: '11 - 12',\n\t\t\tsplit_17: '10 - 13',\n\t\t\tsplit_18: '11 - 14',\n\t\t\tsplit_19: '12 - 15',\n\t\t\tsplit_20: '13 - 14',\n\t\t\tsplit_21: '14 - 15',\n\t\t\tsplit_22: '13 - 16',\n\t\t\tsplit_23: '14 - 17',\n\t\t\tsplit_24: '15 - 18',\n\t\t\tsplit_25: '16 - 17',\n\t\t\tsplit_26: '17 - 18',\n\t\t\tsplit_27: '16 - 19',\n\t\t\tsplit_28: '17 - 20',\n\t\t\tsplit_29: '18 - 21',\n\t\t\tsplit_30: '19 - 20',\n\t\t\tsplit_31: '20 - 21',\n\t\t\tsplit_32: '19 - 22',\n\t\t\tsplit_33: '20 - 23',\n\t\t\tsplit_34: '21 - 24',\n\t\t\tsplit_35: '22 - 23',\n\t\t\tsplit_36: '23 - 24',\n\t\t\tsplit_37: '22 - 25',\n\t\t\tsplit_38: '23 - 26',\n\t\t\tsplit_39: '24 - 27',\n\t\t\tsplit_40: '25 - 26',\n\t\t\tsplit_41: '26 - 27',\n\t\t\tsplit_42: '25 - 28',\n\t\t\tsplit_43: '26 - 29',\n\t\t\tsplit_44: '27 - 30',\n\t\t\tsplit_45: '28 - 29',\n\t\t\tsplit_46: '29 - 30',\n\t\t\tsplit_47: '28 - 31',\n\t\t\tsplit_48: '29 - 32',\n\t\t\tsplit_49: '30 - 33',\n\t\t\tsplit_50: '31 - 32',\n\t\t\tsplit_51: '32 - 33',\n\t\t\tsplit_52: '31 - 34',\n\t\t\tsplit_53: '32 - 35',\n\t\t\tsplit_54: '33 - 36',\n\t\t\tsplit_55: '34 - 35',\n\t\t\tsplit_56: '35 - 36',\n\t\t\tsplit_57: '0 - 1',\n\t\t\tsplit_58: '0 - 2',\n\t\t\tsplit_59: '0 - 3',\n\t\t\t\n\t\t\t//streets\n\t\t\tstreet_0 : '1 - 2 - 3',\n\t\t\tstreet_1 : '4 - 5 - 6',\n\t\t\tstreet_2 : '7 - 8 - 9',\n\t\t\tstreet_3 : '10 - 11 - 12',\n\t\t\tstreet_4 : '13 - 14 - 15',\n\t\t\tstreet_5 : '16 - 17 - 18',\n\t\t\tstreet_6 : '19 - 20 - 21',\n\t\t\tstreet_7 : '22 - 23 - 24',\n\t\t\tstreet_8 : '25 - 26 - 27',\n\t\t\tstreet_9 : '28 - 29 - 30',\n\t\t\tstreet_10: '31 - 32 - 33',\n\t\t\tstreet_11: '34 - 35 - 36',\n\t\t\t//corners\n\t\t\tcorner_0: '1 - 2 - 4 - 5 ',\n\t\t\tcorner_1: '2 - 3 - 5 - 6 ',\n\t\t\tcorner_2: '4 - 5 - 7 - 8 ',\n\t\t\tcorner_3: '5 - 6 - 8 - 9 ',\n\t\t\tcorner_4: '7 - 8 - 10 - 11',\n\t\t\tcorner_5: '8 - 9 - 11 - 12',\n\t\t\tcorner_6: '10 - 11 - 13 - 14',\n\t\t\tcorner_7: '11 - 12 - 14 - 15',\n\t\t\tcorner_8: '13 - 14 - 16 - 17',\n\t\t\tcorner_9: '14 - 15 - 17 - 18',\n\t\t\tcorner_10: '16 - 17 - 19 - 20',\n\t\t\tcorner_11: '17 - 18 - 20 - 21',\n\t\t\tcorner_12: '19 - 20 - 22 - 23',\n\t\t\tcorner_13: '20 - 21 - 23 - 24',\n\t\t\tcorner_14: '22 - 23 - 25 - 26',\n\t\t\tcorner_15: '23 - 24 - 26 - 27',\n\t\t\tcorner_16: '25 - 26 - 28 - 29',\n\t\t\tcorner_17: '26 - 27 - 29 - 30',\n\t\t\tcorner_18: '28 - 29 - 31 - 32',\n\t\t\tcorner_19: '29 - 30 - 32 - 33',\n\t\t\tcorner_20: '31 - 32 - 34 - 35',\n\t\t\tcorner_21: '32 - 33 - 35 - 36',\n\t\t\tcorner_22: ' 0 - 1 -  2 -  3',\n\t\t\t//sixLines\n\t\t\tsixLine_0: '1 - 2 - 3 - 4 - 5 - 6 ',\n\t\t\tsixLine_1: '4 - 5 - 6 - 7 - 8 - 9 ',\n\t\t\tsixLine_2: '7 - 8 - 9 - 10 - 11 - 12',\n\t\t\tsixLine_3: '10 - 11 - 12 - 13 - 14 - 15',\n\t\t\tsixLine_4: '13 - 14 - 15 - 16 - 17 - 18',\n\t\t\tsixLine_5: '16 - 17 - 18 - 19 - 20 - 21',\n\t\t\tsixLine_6: '19 - 20 - 21 - 22 - 23 - 24',\n\t\t\tsixLine_7: '22 - 23 - 24 - 25 - 26 - 27',\n\t\t\tsixLine_8: '25 - 26 - 27 - 28 - 29 - 30',\n\t\t\tsixLine_9: '28 - 29 - 30 - 31 - 32 - 33',\n\t\t\tsixLine_10: '31 - 32 - 33 - 34 - 35 - 36',\n\t\t\t//columns\n\t\t\tcolumn_0: 'firstColumn',\n\t\t\tcolumn_1: 'secondColumn',\n\t\t\tcolumn_2: 'thirdColumn',\n\t\t\tdozen_0: 'firstDozen',\n\t\t\tdozen_1: 'secondDozen',\n\t\t\tdozen_2: 'thirdDozen',\n\t\t\t//others\n\t\t\tcolor_0: 'red',\n\t\t\tcolor_1: 'black',\n\t\t\tevenOdd_0: 'even',\n\t\t\tevenOdd_1: 'odd',\n\t\t\tsmallBig_0: 'small',\n\t\t\tsmallBig_1: 'big'\n\t\t}\n\t}\n};\n\nmodule.exports = keyValueMap;","module.exports = {\r\n    GoldenLamps:{\r\n        '11111': 1,\r\n        '00000': 2,\r\n        '22222': 3,\r\n        '21012': 4,\r\n        '01210': 5,\r\n        '00122': 6,\r\n        '22100': 7,\r\n        '10001': 8,\r\n        '12221': 9,\r\n        '01010': 10,\r\n        '21212': 11,\r\n        '12121': 12,\r\n        '10101': 13,\r\n        '11011': 14,\r\n        '11211': 15,\r\n        '01110': 16,\r\n        '21112': 17,\r\n        '02020': 18,\r\n        '20202': 19,\r\n        '20102': 20\r\n    },\r\n    GoldenToad:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '45554':8,\r\n        '43334':9,\r\n        '54545':10\r\n    },\r\n    NeptunesRiches:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    \r\n    ChineseWilds:{\r\n        \"77777\":1,\r\n        \"66666\":2,\r\n        \"55555\":3,\r\n        \"44444\":4,\r\n        \"65456\":5,\r\n        \"56765\":6,\r\n        \"77654\":7,\r\n        \"44567\":8,\r\n        \"67776\":9,\r\n        \"54445\":10,\r\n        \"76544\":11,\r\n        \"45677\":12,\r\n        \"67656\":13,\r\n        \"54565\":14,\r\n        \"76767\":15,\r\n        \"45454\":16,\r\n        \"65676\":17,\r\n        \"56545\":18,\r\n        \"76667\":19,\r\n        \"45554\":20,\r\n        \"66544\":21,\r\n        \"55677\":22,\r\n        \"66766\":23,\r\n        \"55455\":24,\r\n        \"65554\":25,\r\n        \"56667\":26,\r\n        \"77677\":27,\r\n        \"44544\":28,\r\n        \"76554\":29,\r\n        \"45667\":30,\r\n        \"77765\":31,\r\n        \"44456\":32,\r\n        \"67765\":33,\r\n        \"54456\":34,\r\n        \"76654\":35,\r\n        \"45567\":36,\r\n        \"67654\":37,\r\n        \"54567\":38,\r\n        \"76545\":39,\r\n        \"45676\":40\r\n    },\r\n    ElephantTreasure:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    RedHotSlot:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    MacauRacing:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    LuckyCarnival:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '45554':8,\r\n        '43334':9,\r\n        '54545':10\r\n    },\r\n    AsianFortune:{\r\n        '44444':1,\r\n        '55555':2,\r\n        '33333':3,\r\n        '34543':4,\r\n        '54345':5,\r\n        '55433':6,\r\n        '33455':7,\r\n        '54545':8\r\n    },\r\n    DragonPearl:{\r\n        '777': 1\r\n    },\r\n    LeprechaunsMagic:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    AliBabasLuck:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    CasinoSpin:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    LeprechaunsMagicMegaways: {},\r\n    AliBabasLuckMegaways: {},\r\n    CobraQueen:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"43334\":6,\r\n        \"45554\":7,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n    DreamDestiny:{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":4,\r\n        \"54345\":5,\r\n        \"55433\":6,\r\n        \"33455\":7,\r\n        \"45554\":8,\r\n        \"43334\":9,\r\n        \"54545\":10,\r\n        \"34343\":11,\r\n        \"43434\":12,\r\n        \"45454\":13,\r\n        \"44544\":14,\r\n        \"44344\":15,\r\n        \"54445\":16,\r\n        \"34443\":17,\r\n        \"53535\":18,\r\n        \"35353\":19,\r\n        \"35453\":20\r\n    },\r\n    AmazonIslandMegaWays: {},\r\n    \r\n    EpicTreasure: {\r\n        '11111': 1,\r\n        '22222': 2,\r\n        '33333': 3,\r\n        '44444': 4,\r\n        '23432': 5,\r\n        '32123': 6,\r\n        '11234': 7,\r\n        '44321': 8,\r\n        '21112': 9,\r\n        '34443': 10,\r\n        '12344': 11,\r\n        '43211': 12,\r\n        '21232': 13,\r\n        '34323': 14,\r\n        '12121': 15,\r\n        '43434': 16,\r\n        '23212': 17,\r\n        '32343': 18,\r\n        '12221': 19,\r\n        '43334': 20,\r\n        '22344': 21,\r\n        '33211': 22,\r\n        '22122': 23,\r\n        '33433': 24,\r\n        '23334': 25,\r\n        '32221': 26,\r\n        '11211': 27,\r\n        '44344': 28,\r\n        '12334': 29,\r\n        '43221': 30,\r\n        '11123': 31,\r\n        '44432': 32,        \r\n        '21123': 33,\r\n        '34432': 34,\r\n        '12234': 35,\r\n        '43321': 36,\r\n        '21234': 37,\r\n        '34321': 38,\r\n        '12343': 39,\r\n        '43212': 40\r\n    },\r\n\r\n    BigBassAdventure: {\r\n        '11111': 1,\r\n        '22222': 2,\r\n        '33333': 3,\r\n        '44444': 4,\r\n        '23432': 5,\r\n        '32123': 6,\r\n        '11234': 7,\r\n        '44321': 8,\r\n        '21112': 9,\r\n        '34443': 10,\r\n        '12344': 11,\r\n        '43211': 12,\r\n        '21232': 13,\r\n        '34323': 14,\r\n        '12121': 15,\r\n        '43434': 16,\r\n        '23212': 17,\r\n        '32343': 18,\r\n        '12221': 19,\r\n        '43334': 20,\r\n        '22344': 21,\r\n        '33211': 22,\r\n        '22122': 23,\r\n        '33433': 24,\r\n        '23334': 25,\r\n        '32221': 26,\r\n        '11211': 27,\r\n        '44344': 28,\r\n        '12334': 29,\r\n        '43221': 30,\r\n        '11123': 31,\r\n        '44432': 32,        \r\n        '21123': 33,\r\n        '34432': 34,\r\n        '12234': 35,\r\n        '43321': 36,\r\n        '21234': 37,\r\n        '34321': 38,\r\n        '12343': 39,\r\n        '43212': 40\r\n    },\r\n\r\n    '80sSpins':{\r\n\r\n    },\r\n\r\n    'AliBabasLuckPowerReels': {\r\n        \"1111111111111111\": 1,\r\n        \"1010101010101010\": 2,\r\n        \"99999999\": 3,\r\n        \"88888888\": 4,\r\n        \"77777777\": 5,\r\n        \"66666666\": 6,\r\n\r\n        \"1110111011101110\": 7,\r\n        \"109109109109\": 8,\r\n        \"98989898\": 9,\r\n        \"87878787\": 10,\r\n        \"76767676\": 11,\r\n        \"1011101110111011\": 12,\r\n        \r\n        \"910910910910\": 13,\r\n        \"89898989\": 14,\r\n        \"78787878\": 15,\r\n        \"67676767\": 16,\r\n        \"1110987678\": 17,\r\n        \"109876789\": 18,\r\n        \r\n        \"987678910\": 19,\r\n        \"8767891011\": 20,\r\n        \"76789101110\": 21,\r\n        \"67891011109\": 22,\r\n        \"78910111098\": 23,\r\n        \"89101110987\": 24,\r\n\r\n        \"91011109876\": 25,\r\n        \"10111098767\": 26,\r\n        \"111111109876\": 27,\r\n        \"101010109877\": 28,\r\n        \"7777891010\": 29,\r\n        \"6667891011\": 30\r\n    },\r\n\r\n    'LeprechaunsMagicPowerReels': {\r\n        \"1111111111111111\": 1,\r\n        \"1010101010101010\": 2,\r\n        \"99999999\": 3,\r\n        \"88888888\": 4,\r\n        \"77777777\": 5,\r\n        \"66666666\": 6,\r\n\r\n        \"1110111011101110\": 7,\r\n        \"109109109109\": 8,\r\n        \"98989898\": 9,\r\n        \"87878787\": 10,\r\n        \"76767676\": 11,\r\n        \"1011101110111011\": 12,\r\n        \r\n        \"910910910910\": 13,\r\n        \"89898989\": 14,\r\n        \"78787878\": 15,\r\n        \"67676767\": 16,\r\n        \"1110987678\": 17,\r\n        \"109876789\": 18,\r\n        \r\n        \"987678910\": 19,\r\n        \"8767891011\": 20,\r\n        \"76789101110\": 21,\r\n        \"67891011109\": 22,\r\n        \"78910111098\": 23,\r\n        \"89101110987\": 24,\r\n\r\n        \"91011109876\": 25,\r\n        \"10111098767\": 26,\r\n        \"111111109876\": 27,\r\n        \"101010109877\": 28,\r\n        \"7777891010\": 29,\r\n        \"6667891011\": 30\r\n    },\r\n\r\n    'WantedWildz': {\r\n        \"44444\": 1,\r\n        \"33333\": 2,\r\n        \"55555\": 3,\r\n        \"34543\": 4,\r\n        \"54345\": 5,\r\n        \"33533\": 6,\r\n        \"55355\": 7,\r\n        \"43334\": 8,\r\n        \"45554\": 9,\r\n        \"45434\": 10,\r\n        \"43454\": 11,\r\n        \"34343\": 12,\r\n        \"54545\": 13,\r\n        \"44344\": 14,\r\n        \"44544\": 15,\r\n        \"34443\": 16,\r\n        \"54445\": 17,\r\n        \"33455\": 18,\r\n        \"55433\": 19,\r\n        \"35353\": 20\r\n    },\r\n\r\n    'CottonGangAffair' : {},\r\n\r\n    'DesertLegendsSpins':{\r\n        \"44444\":1,\r\n        \"55555\":2,\r\n        \"33333\":3,\r\n        \"34543\":5,\r\n        \"54345\":4,\r\n        \"43334\":7,\r\n        \"45554\":6,\r\n        \"55433\":8,\r\n        \"33455\":9,\r\n        \"43454\":10\r\n    },\r\n\r\n    'JellyMULTIHOPS': {}\r\n}","'use strict';\n\nvar Texts = {\n\ten: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"History\",\n\t\t\"GH_GAME_DETAILS\": \"Game details\",\n\t\t\"GH_GAME_ID\": \"Game ID\",\n\t\t\"GH_ROUND_ID\": \"Round ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Server time start\",\n\t\t\"GH_SERVER_TIME_END\": \"Server time end\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Win Ways\",\n\t\t\"GH_LENGTH\": \"Symbol win length\",\n\t\t\"GH_MULTIPLIER\": \"Multiplier\",\n\t\t\"GH_WIN_WAYS\": \"Win Ways\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Play\",\n\t\t\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Total stake\",\n\t\t\"GH_TOTAL_BET\": \"Total bet\",\n\t\t\"GH_TOTAL_WIN\": \"Total win\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"before stake\",\n\t\t\"GH_AFTER_STAKE\": \"after stake\",\n\t\t\"GH_AT_END\": \"at end\",\n\t\t\"GH_BALANCE\": \"Main balance\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus balance\",\n\t\t\"GH_SESSION_BALANCE\": \"Session balance\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonus balance\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Win details\",\n\t\t\"GH_SPIN_DETAILS\": \"Spin details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Additional Details\",\n\t\t\"GH_GAME_RESULTS\": \"Game results\",\n\t\t\"GH_INITIAL_SPIN\": \"Initial spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot win\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol wins\",\n\t\t\"GH_LINE\": \"Line\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Free spins wins\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Respin wins\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplier win\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier win\",\n\t\t\"GH_BONUS_WIN\": \"Bonus win\",\n\t\t\"GH_INSTANT_WIN\": \"Instant win\",\n\t\t\"GH_NO_HISTORY\": \"No history available\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble wins\",\n\t\t\"GH_NO_WINS\": \"No wins\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rounding correction\",\n\t\t\"GH_LIMITED_WIN\": \"Win (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Free spins price\",\n\t\t\"HALF_COLLECT\": \"Half collected win\",\n\t\t\"FULL_COLLECT\": \"Full collected win\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spins\",\n\t\t\"GH_RESPINS_TITLE\": \"Respins\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek was active for this round. All winnings and bets are demo money.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Free rounds was active for this round.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\n\tzh: {\n\t\t\"TOTAL_COINS_WIN\": \"总硬币奖\",\n\t\t\"GH_HISTORY\": \"历史记录\",\n\t\t\"GH_GAME_DETAILS\": \"游戏详情\",\n\t\t\"GH_GAME_ID\": \"游戏名称\",\n\t\t\"GH_ROUND_ID\": \"游戏ID\",\n\t\t\"GH_SERVER_TIME_START\": \"服务器时间开始\",\n\t\t\"GH_SERVER_TIME_END\": \"服务器时间结束\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"中奖方式\",\n\t\t\"GH_LENGTH\": \"中奖图案大小\",\n\t\t\"GH_MULTIPLIER\": \"奖金倍数\",\n\t\t\"GH_WIN_WAYS\": \"中奖方式\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"中奖区\",\n\t\t\"GH_CLUSTER_COUNT\": \"中奖图案个数\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"交易记录\",\n\t\t\"GH_TOTAL_STAKE\": \"总投注金额\",\n\t\t\"GH_TOTAL_BET\": \"总投注\",\n\t\t\"GH_TOTAL_WIN\": \"总赢额\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"投注前\",\n\t\t\"GH_AFTER_STAKE\": \"投注后\",\n\t\t\"GH_AT_END\": \"最后\",\n\t\t\"GH_BALANCE\": \"主要余额\",\n\t\t\"GH_FREEBETS_BALANCE\": \"红利余额\",\n\t\t\"GH_SESSION_BALANCE\": \"游戏活动余额\",\n\t\t\"GH_SESSION_FREEBETS\": \"游戏活动红利余额\",\n\t\t\"GH_BONUS\": \"红利\",\n\n\t\t\"GH_WIN_DETAILS\": \"中奖详情\",\n\t\t\"GH_SPIN_DETAILS\": \"旋转明细\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"额外详情\",\n\t\t\"GH_GAME_RESULTS\": \"游戏结果\",\n\t\t\"GH_INITIAL_SPIN\": \"初始旋转\",\n\t\t\"GH_JACKPOT_WIN\": \"赢得头奖\",\n\t\t\"GH_SYMBOL_WINS\": \"中奖图案\",\n\t\t\"GH_LINE\": \"连线\",\n\t\t\"GH_FREE_SPIN_WINS\": \"赢得免费旋转机会\",\n\t\t\"GH_FREE_SPIN\": \"免费旋转\",\n\t\t\"GH_RESPIN\": \"免费旋转\",\n\t\t\"GH_RESPIN_WINS\": \"免费旋转盈利\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"乘数胜\",\n\t\t\"GH_MODIFIER_WIN\": \"盈利调整\",\n\t\t\"GH_BONUS_WIN\": \"额外奖\",\n\t\t\"GH_INSTANT_WIN\": \"立即获胜\",\n\t\t\"GH_NO_HISTORY\": \"无历史记录\",\n\t\t\"GH_GAMBLE_WINS\": \"赌赢\",\n\t\t\"GH_NO_WINS\": \"无中奖信息\",\n\t\t\"GH_ROUND_CORRECTION\": \"四舍五入\",\n\t\t\"GH_LIMITED_WIN\": \"赢取（最大限制\",\n\t\t\"WIN_EXCHANGE\": \"免费旋转价格\",\n\t\t\"HALF_COLLECT\": \"已收集一半赢利\",\n\t\t\"FULL_COLLECT\": \"已收集全部赢利\",\n\n\t\t\"GH_TABLE_ID\": \"台桌号\",\n\t\t\"GH_PLAYER\": \"闲\",\n\t\t\"GH_BANKER\": \"庄\",\n\t\t\"GH_TIE\": \"和\",\n\t\t\"GH_PLAYER_PAIR\": \"闲对\",\n\t\t\"GH_BANKER_PAIR\": \"庄对\",\n\t\t\"GH_GAME_WINNER\": \"赢家\",\n\t\t\"GH_GAME_WINSUM\": \"总计\",\n\t\t\"GH_GAME_TOTAL\": \"总共\",\n\t\t\"GH_GAME_STAKE\": \"下注金额\",\n\n\t\t\"GH_SPIN_TITLE\": \"旋转\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"免费旋转\",\n\t\t\"GH_RESPINS_TITLE\": \"免费旋转\",\n\n\t\t\"GH_BALL_POSITION\": \"小球位置：\",\n\t\t\"GH_TRIO\": \"三数总数\",\n\t\t\"GH_SPLIT\": \"分注总数\",\n\t\t\"GH_STREET\": \"街注总数\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"角注总数\",\n\t\t\"GH_SIX_LINE\": \"两竖排\",\n\t\t\"GH_COLUMN\": \"列注总数\",\n\t\t\"GH_FIRST_COLUMN\": \"列注1\",\n\t\t\"GH_SECOND_COLUMN\": \"列注2\",\n\t\t\"GH_THIRD_COLUMN\": \"列注3\",\n\t\t\"GH_DOZEN\": \"12码总数\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"孤丁总数\",\n\t\t\"GH_COLOR\": \"红/黑总数\",\n\t\t\"GH_BLACK\": \"黑\",\n\t\t\"GH_RED\": \"红\",\n\t\t\"GH_EVEN_ODD\": \"单/双总数\",\n\t\t\"GH_EVEN\": \"双\",\n\t\t\"GH_ODD\": \"单\",\n\t\t\"GH_SMALL_BIG\": \"大小总数\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"这一轮为试玩模式，所有的奖金和赌注都是试玩金额。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"此轮的免费回合已激活。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"匹配您的数字\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"总和为7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"匹配3个符号\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"匹配3个金额\",\n\t\t\"SCRATCH_FREE_CARD\": \"免费卡\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'zh-TW': {\n\t\t\"TOTAL_COINS_WIN\": \"總硬幣獎\",\n\t\t\"GH_HISTORY\": \"歷史紀錄\",\n\t\t\"GH_GAME_DETAILS\": \"遊戲詳情\",\n\t\t\"GH_GAME_ID\": \"遊戲帳號\",\n\t\t\"GH_ROUND_ID\": \"回合數\",\n\t\t\"GH_SERVER_TIME_START\": \"伺服器計時開始\",\n\t\t\"GH_SERVER_TIME_END\": \"伺服器計時結束\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"中獎方式\",\n\t\t\"GH_LENGTH\": \"中奖图案大小\",\n\t\t\"GH_MULTIPLIER\": \"獎金倍數\",\n\t\t\"GH_WIN_WAYS\": \"中獎方式\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"中獎區\",\n\t\t\"GH_CLUSTER_COUNT\": \"中獎圖案個數\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"交易\",\n\t\t\"GH_TOTAL_STAKE\": \"總投注金額\",\n\t\t\"GH_TOTAL_BET\": \"总投注\",\n\t\t\"GH_TOTAL_WIN\": \"中獎總計\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"投注前\",\n\t\t\"GH_AFTER_STAKE\": \"投注後\",\n\t\t\"GH_AT_END\": \"最後\",\n\t\t\"GH_BALANCE\": \"主要餘額\",\n\t\t\"GH_FREEBETS_BALANCE\": \"紅利餘額\",\n\t\t\"GH_SESSION_BALANCE\": \"遊戲活動餘額\",\n\t\t\"GH_SESSION_FREEBETS\": \"遊戲活動紅利餘額\",\n\t\t\"GH_BONUS\": \"紅利\",\n\n\t\t\"GH_WIN_DETAILS\": \"中獎詳情\",\n\t\t\"GH_SPIN_DETAILS\": \"旋轉明細\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"補充說明\",\n\t\t\"GH_GAME_RESULTS\": \"遊戲結果\",\n\t\t\"GH_INITIAL_SPIN\": \"初始旋轉\",\n\t\t\"GH_JACKPOT_WIN\": \"贏得頭獎\",\n\t\t\"GH_SYMBOL_WINS\": \"中獎圖案\",\n\t\t\"GH_LINE\": \"連線\",\n\t\t\"GH_FREE_SPIN_WINS\": \"免費拉霸中獎\",\n\t\t\"GH_FREE_SPIN\": \"免費旋轉\",\n\t\t\"GH_RESPIN\": \"免費旋轉\",\n\t\t\"GH_RESPIN_WINS\": \"免費旋轉盈利\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"加倍獎勵\",\n\t\t\"GH_MODIFIER_WIN\": \"盈利調整\",\n\t\t\"GH_BONUS_WIN\": \"額外獎勵\",\n\t\t\"GH_INSTANT_WIN\": \"立即獎項\",\n\t\t\"GH_NO_HISTORY\": \"無歷史紀錄\",\n\t\t\"GH_GAMBLE_WINS\": \"賭注中獎\",\n\t\t\"GH_NO_WINS\": \"未中獎\",\n\t\t\"GH_ROUND_CORRECTION\": \"四舍五入\",\n\t\t\"GH_LIMITED_WIN\": \"贏取（最大限制\",\n\t\t\"WIN_EXCHANGE\": \"免費旋轉價格\",\n\t\t\"HALF_COLLECT\": \"已領取一半贏利\",\n\t\t\"FULL_COLLECT\": \"已領取全部贏利\",\n\n\t\t\"GH_TABLE_ID\": \"臺桌號\",\n\t\t\"GH_PLAYER\": \"閑\",\n\t\t\"GH_BANKER\": \"莊\",\n\t\t\"GH_TIE\": \"和\",\n\t\t\"GH_PLAYER_PAIR\": \"閑對\",\n\t\t\"GH_BANKER_PAIR\": \"莊對\",\n\t\t\"GH_GAME_WINNER\": \"贏家\",\n\t\t\"GH_GAME_WINSUM\": \"總計\",\n\t\t\"GH_GAME_TOTAL\": \"總共\",\n\t\t\"GH_GAME_STAKE\": \"下注金額\",\n\n\t\t\"GH_SPIN_TITLE\": \"旋轉\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"免費旋轉\",\n\t\t\"GH_RESPINS_TITLE\": \"免費旋轉\",\n\n\t\t\"GH_BALL_POSITION\": \"小球位置：\",\n\t\t\"GH_TRIO\": \"三數總數\",\n\t\t\"GH_SPLIT\": \"分注總數\",\n\t\t\"GH_STREET\": \"街注總數\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"角注總數\",\n\t\t\"GH_SIX_LINE\": \"兩豎排\",\n\t\t\"GH_COLUMN\": \"列注總數\",\n\t\t\"GH_FIRST_COLUMN\": \"列注1\",\n\t\t\"GH_SECOND_COLUMN\": \"列注2\",\n\t\t\"GH_THIRD_COLUMN\": \"列注3\",\n\t\t\"GH_DOZEN\": \"12碼總數\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"13-24\",\n\t\t\"GH_THIRD_DOZEN\": \"25-36\",\n\t\t\"GH_STRAIGHT\": \"孤丁總數\",\n\t\t\"GH_COLOR\": \"紅/黑總數\",\n\t\t\"GH_BLACK\": \"黑\",\n\t\t\"GH_RED\": \"紅\",\n\t\t\"GH_EVEN_ODD\": \"單/雙總數\",\n\t\t\"GH_EVEN\": \"雙\",\n\t\t\"GH_ODD\": \"單\",\n\t\t\"GH_SMALL_BIG\": \"大小總數\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"這一輪為試玩模式，所有的獎金和賭注都是試玩金額。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"本回合啟用免費回合功能。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"匹配您的數字\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"總和為7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"匹配3個符號\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"匹配3個金額\",\n\t\t\"SCRATCH_FREE_CARD\": \"免費卡\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tja: {\n\t\t\"TOTAL_COINS_WIN\": \"合計獲得コイン\",\n\t\t\"GH_HISTORY\": \"履歴\",\n\t\t\"GH_GAME_DETAILS\": \"ゲームの詳細\",\n\t\t\"GH_GAME_ID\": \"ゲームID\",\n\t\t\"GH_ROUND_ID\": \"ラウンドID\",\n\t\t\"GH_SERVER_TIME_START\": \"サーバー時間開始\",\n\t\t\"GH_SERVER_TIME_END\": \"サーバー時間終了\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"ウィンウェイ\",\n\t\t\"GH_LENGTH\": \"シンボルの長さ\",\n\t\t\"GH_MULTIPLIER\": \"マルチプライヤー\",\n\t\t\"GH_WIN_WAYS\": \"ウィンウェイ\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"クラスター\",\n\t\t\"GH_CLUSTER_COUNT\": \"シンボルカウント\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"取引\",\n\t\t\"GH_TOTAL_STAKE\": \"合計賭け金\",\n\t\t\"GH_TOTAL_BET\": \"合計ベット額\",\n\t\t\"GH_TOTAL_WIN\": \"当たり合計\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"ベット前\",\n\t\t\"GH_AFTER_STAKE\": \"ベット後\",\n\t\t\"GH_AT_END\": \"終了時\",\n\t\t\"GH_BALANCE\": \"メイン残高\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ボーナス残高\",\n\t\t\"GH_SESSION_BALANCE\": \"セッション残高\",\n\t\t\"GH_SESSION_FREEBETS\": \"セッションボーナス残高\",\n\t\t\"GH_BONUS\": \"ボーナス\",\n\n\t\t\"GH_WIN_DETAILS\": \"勝ちの詳細\",\n\t\t\"GH_SPIN_DETAILS\": \"スピンの詳細\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"追加詳細\",\n\t\t\"GH_GAME_RESULTS\": \"ゲーム結果\",\n\t\t\"GH_INITIAL_SPIN\": \"初期スピン\",\n\t\t\"GH_JACKPOT_WIN\": \"大当たり\",\n\t\t\"GH_SYMBOL_WINS\": \"シンボル当たり\",\n\t\t\"GH_LINE\": \"ライン\",\n\t\t\"GH_FREE_SPIN_WINS\": \"無料スピン当たり\",\n\t\t\"GH_FREE_SPIN\": \"フリースピン\",\n\t\t\"GH_RESPIN\": \"リスピン\",\n\t\t\"GH_RESPIN_WINS\": \"リスピンの勝利\",\n\t\t\"GH_NUDGE\": \"ナッジ\",\n\t\t\"GH_NUDGE_WINS\": \"ナッジウイン\",\n\t\t\"GH_MULTIPLIER_WINS\": \"マルチプライヤーの賞金\",\n\t\t\"GH_MODIFIER_WIN\": \"バンカーの勝ち\",\n\t\t\"GH_BONUS_WIN\": \"ボーナスの賞金\",\n\t\t\"GH_INSTANT_WIN\": \"すぐ勝てる\",\n\t\t\"GH_NO_HISTORY\": \"履歴なし\",\n\t\t\"GH_GAMBLE_WINS\": \"ギャンブル当たり\",\n\t\t\"GH_NO_WINS\": \"勝ちなし\",\n\t\t\"GH_ROUND_CORRECTION\": \"四捨五入\",\n\t\t\"GH_LIMITED_WIN\": \"勝ち(最高リミット)\",\n\t\t\"WIN_EXCHANGE\": \"フリースピン価格\",\n\t\t\"HALF_COLLECT\": \"賞金半分回収済み\",\n\t\t\"FULL_COLLECT\": \"賞金全額回収済み\",\n\n\t\t\"GH_TABLE_ID\": \"テーブルID\",\n\t\t\"GH_PLAYER\": \"プレイヤー\",\n\t\t\"GH_BANKER\": \"バンカー\",\n\t\t\"GH_TIE\": \"タイ\",\n\t\t\"GH_PLAYER_PAIR\": \"プレイヤーペア\",\n\t\t\"GH_BANKER_PAIR\": \"バンカーペア\",\n\t\t\"GH_GAME_WINNER\": \"勝利者\",\n\t\t\"GH_GAME_WINSUM\": \"全額\",\n\t\t\"GH_GAME_TOTAL\": \"合計\",\n\t\t\"GH_GAME_STAKE\": \"ステーク\",\n\n\t\t\"GH_SPIN_TITLE\": \"回す\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"フリースピン\",\n\t\t\"GH_RESPINS_TITLE\": \"リスピン\",\n\n\t\t\"GH_BALL_POSITION\": \"ボールのポジション:\",\n\t\t\"GH_TRIO\": \"トリオ\",\n\t\t\"GH_SPLIT\": \"スプリット\",\n\t\t\"GH_STREET\": \"ストリート\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"コーナー\",\n\t\t\"GH_SIX_LINE\": \"6レーン\",\n\t\t\"GH_COLUMN\": \"コラムの合計\",\n\t\t\"GH_FIRST_COLUMN\": \"第一コラム\",\n\t\t\"GH_SECOND_COLUMN\": \"第二コラム\",\n\t\t\"GH_THIRD_COLUMN\": \"第三コラム\",\n\t\t\"GH_DOZEN\": \"ダーズ\",\n\t\t\"GH_FIRST_DOZEN\": \"1ダース\",\n\t\t\"GH_SECOND_DOZEN\": \"2ダーズ\",\n\t\t\"GH_THIRD_DOZEN\": \"3ダーズ\",\n\t\t\"GH_STRAIGHT\": \"ストレート\",\n\t\t\"GH_COLOR\": \"カラー\",\n\t\t\"GH_BLACK\": \"黒\",\n\t\t\"GH_RED\": \"赤\",\n\t\t\"GH_EVEN_ODD\": \"偶数/奇数\",\n\t\t\"GH_EVEN\": \"偶数\",\n\t\t\"GH_ODD\": \"奇数\",\n\t\t\"GH_SMALL_BIG\": \"小・大\",\n\t\t\"GH_SMALL\": \"小\",\n\t\t\"GH_BIG\": \"大\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"このラウンドではチラ見が起動していました。全賞金とベットはデモマネーとなります。\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"このラウンドではフリーラウンドが有効でした。\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"数字とマッチ\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7の合計\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3つのシンボルをマッチ\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3つの金額をマッチ\",\n\t\t\"SCRATCH_FREE_CARD\": \"フリーカード\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tko: {\n\t\t\"TOTAL_COINS_WIN\": \"획득한 코인 합계\",\n\t\t\"GH_HISTORY\": \"기록\",\n\t\t\"GH_GAME_DETAILS\": \"게임 상세 정보\",\n\t\t\"GH_GAME_ID\": \"게임 ID\",\n\t\t\"GH_ROUND_ID\": \"라운드 ID\",\n\t\t\"GH_SERVER_TIME_START\": \"서버 시간 시작\",\n\t\t\"GH_SERVER_TIME_END\": \"서버 시간 종료\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"승리 방법\",\n\t\t\"GH_LENGTH\": \"심볼 승리 길이\",\n\t\t\"GH_MULTIPLIER\": \"멀티플라이어\",\n\t\t\"GH_WIN_WAYS\": \"승리 방법\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"클러스터\",\n\t\t\"GH_CLUSTER_COUNT\": \"심볼 개수\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"거래\",\n\t\t\"GH_TOTAL_STAKE\": \"총 판돈\",\n\t\t\"GH_TOTAL_BET\": \"Total Bet\",\n\t\t\"GH_TOTAL_WIN\": \"총 승리\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"베팅 전\",\n\t\t\"GH_AFTER_STAKE\": \"베팅 후\",\n\t\t\"GH_AT_END\": \"종료 시\",\n\t\t\"GH_BALANCE\": \"메인 잔액\",\n\t\t\"GH_FREEBETS_BALANCE\": \"보너스 잔액\",\n\t\t\"GH_SESSION_BALANCE\": \"세션 잔액\",\n\t\t\"GH_SESSION_FREEBETS\": \"세션 보너스 잔액\",\n\t\t\"GH_BONUS\": \"보너스\",\n\n\t\t\"GH_WIN_DETAILS\": \"승리 상세 정보\",\n\t\t\"GH_SPIN_DETAILS\": \"스핀 상세 정보\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"추가 세부 정보\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"최초 스핀\",\n\t\t\"GH_JACKPOT_WIN\": \"잭팟 승리\",\n\t\t\"GH_SYMBOL_WINS\": \"우승 심볼\",\n\t\t\"GH_LINE\": \"라인\",\n\t\t\"GH_FREE_SPIN_WINS\": \"무료 스핀 승리\",\n\t\t\"GH_FREE_SPIN\": \"프리 스핀\",\n\t\t\"GH_RESPIN\": \"재스핀\",\n\t\t\"GH_RESPIN_WINS\": \"재스핀 승리\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"배수 승리\",\n\t\t\"GH_MODIFIER_WIN\": \"배수 상금\",\n\t\t\"GH_BONUS_WIN\": \"보너스 승리\",\n\t\t\"GH_INSTANT_WIN\": \"즉시 승리\",\n\t\t\"GH_NO_HISTORY\": \"기록 없음\",\n\t\t\"GH_GAMBLE_WINS\": \"겜블 승리\",\n\t\t\"GH_NO_WINS\": \"승리 없음\",\n\t\t\"GH_ROUND_CORRECTION\": \"반올림 교정값\",\n\t\t\"GH_LIMITED_WIN\": \"승 (맥스제한)\",\n\t\t\"WIN_EXCHANGE\": \"무료 회전 비용\",\n\t\t\"HALF_COLLECT\": \"절반 상금 받음\",\n\t\t\"FULL_COLLECT\": \"전체 상금 받음\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"베팅\",\n\n\t\t\"GH_SPIN_TITLE\": \"스핀\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"프리 스핀\",\n\t\t\"GH_RESPINS_TITLE\": \"재스핀\",\n\n\t\t\"GH_BALL_POSITION\": \"볼 위치\",\n\t\t\"GH_TRIO\": \"트리오 합계\",\n\t\t\"GH_SPLIT\": \"스플릿 합계\",\n\t\t\"GH_STREET\": \"스플릿 합계\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"코너 합계\",\n\t\t\"GH_SIX_LINE\": \"6 라인 합계\",\n\t\t\"GH_COLUMN\": \"컬럼 합계\",\n\t\t\"GH_FIRST_COLUMN\": \"1번째 컬럼\",\n\t\t\"GH_SECOND_COLUMN\": \"2번째 컬럼\",\n\t\t\"GH_THIRD_COLUMN\": \"3번째 컬럼\",\n\t\t\"GH_DOZEN\": \"더즌 합계\",\n\t\t\"GH_FIRST_DOZEN\": \"1번째 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2번째\",\n\t\t\"GH_THIRD_DOZEN\": \"3번째\",\n\t\t\"GH_STRAIGHT\": \"스트레이트 합계\",\n\t\t\"GH_COLOR\": \"컬러 합계\",\n\t\t\"GH_BLACK\": \"블랙\",\n\t\t\"GH_RED\": \"레드\",\n\t\t\"GH_EVEN_ODD\": \"짝/홀 합계\",\n\t\t\"GH_EVEN\": \"짝수\",\n\t\t\"GH_ODD\": \"홀수\",\n\t\t\"GH_SMALL_BIG\": \"스몰/빅 합계\",\n\t\t\"GH_SMALL\": \"소몰\",\n\t\t\"GH_BIG\": \"빅\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"이 라운드에 미리 보기가 활성화 되었습니다. 모든 상금과 베팅은 체험머니 입니다.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"이 라운드에 무료 라운드가 활성화되었습니다.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tth: {\n\t\t\"TOTAL_COINS_WIN\": \"รางวัลเหรียญรวม\",\n\t\t\"GH_HISTORY\": \"ประวัติ\",\n\t\t\"GH_GAME_DETAILS\": \"รายละเอียดเกม\",\n\t\t\"GH_GAME_ID\": \"ID เกม\",\n\t\t\"GH_ROUND_ID\": \"ID รอบ\",\n\t\t\"GH_SERVER_TIME_START\": \"เวลาเซิร์ฟเวอร์เริ่ม\",\n\t\t\"GH_SERVER_TIME_END\": \"เวลาเซิร์ฟเวอร์สิ้นสุด\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"จำนวนเส้นที่ชนะ\",\n\t\t\"GH_LENGTH\": \"สัญลักษณ์ที่ชนะ\",\n\t\t\"GH_MULTIPLIER\": \"ตัวคูณ\",\n\t\t\"GH_WIN_WAYS\": \"จำนวนเส้นที่ชนะ\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"กลุ่ม\",\n\t\t\"GH_CLUSTER_COUNT\": \"จำนวนสัญลักษณ์\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"รายการเปลี่ยนแปลง\",\n\t\t\"GH_TOTAL_STAKE\": \"เดิมพันทั้งหมด\",\n\t\t\"GH_TOTAL_BET\": \"เงินเดิมพันรวม\",\n\t\t\"GH_TOTAL_WIN\": \"ได้รวม\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"ก่อนเดิมพัน\",\n\t\t\"GH_AFTER_STAKE\": \"หลังเดิมพัน\",\n\t\t\"GH_AT_END\": \"หลังจบรอบ\",\n\t\t\"GH_BALANCE\": \"ยอดหลัก\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ยอดโบนัส\",\n\t\t\"GH_SESSION_BALANCE\": \"ยอดเซสชัน\",\n\t\t\"GH_SESSION_FREEBETS\": \"ยอดโบนัสเซสชัน\",\n\t\t\"GH_BONUS\": \"โบนัส\",\n\n\t\t\"GH_WIN_DETAILS\": \"รายละเอียดการชนะ\",\n\t\t\"GH_SPIN_DETAILS\": \"รายละเอียดการสปิน\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"รายละเอียดเพิ่มเติม\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"การหมุนเริ่มแรก\",\n\t\t\"GH_JACKPOT_WIN\": \"ได้แจ็คพอต\",\n\t\t\"GH_SYMBOL_WINS\": \"สัญลักษณ์ชนะ\",\n\t\t\"GH_LINE\": \"ไลน์\",\n\t\t\"GH_FREE_SPIN_WINS\": \"ได้หมุนฟรี\",\n\t\t\"GH_FREE_SPIN\": \"หมุนฟรี\",\n\t\t\"GH_RESPIN\": \"หมุนอีกครั้ง\",\n\t\t\"GH_RESPIN_WINS\": \"รางวัลจากการหมุนอีกครั้ง\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"การชนะตัวเพิ่มชัยชนะ\",\n\t\t\"GH_MODIFIER_WIN\": \"เพิ่มการชนะ\",\n\t\t\"GH_BONUS_WIN\": \"การชนะโบนัส\",\n\t\t\"GH_INSTANT_WIN\": \"ได้รางวัลทันที\",\n\t\t\"GH_NO_HISTORY\": \"ไม่พบประวัติ\",\n\t\t\"GH_GAMBLE_WINS\": \"เงินพนันที่ได้\",\n\t\t\"GH_NO_WINS\": \"ไม่มีการชนะ\",\n\t\t\"GH_ROUND_CORRECTION\": \"แก้ไขการปัดเศษ\",\n\t\t\"GH_LIMITED_WIN\": \"ชนะ (จำกัดสูงสุด)\",\n\t\t\"WIN_EXCHANGE\": \"ราคารอบหมุนฟรี\",\n\t\t\"HALF_COLLECT\": \"สะสมเงินรางวัลครึ่งหนึ่งแล้ว\",\n\t\t\"FULL_COLLECT\": \"สะสมเงินรางวัลทั้งหมดแล้ว\",\n\n\t\t\"GH_TABLE_ID\": \"รหัสโต๊ะเดิมพัน\",\n\t\t\"GH_PLAYER\": \"เพลเยอร์\",\n\t\t\"GH_BANKER\": \"แบงเกอร์\",\n\t\t\"GH_TIE\": \"เสมอ\",\n\t\t\"GH_PLAYER_PAIR\": \"เพลเยอร์คู่\",\n\t\t\"GH_BANKER_PAIR\": \"แบงเกอร์คู่\",\n\t\t\"GH_GAME_WINNER\": \"ผู้ชนะ\",\n\t\t\"GH_GAME_WINSUM\": \"รวม\",\n\t\t\"GH_GAME_TOTAL\": \"รวมทั้งหมด\",\n\t\t\"GH_GAME_STAKE\": \"เงินเดิมพัน\",\n\n\t\t\"GH_SPIN_TITLE\": \"หมุน\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"หมุนฟรี\",\n\t\t\"GH_RESPINS_TITLE\": \"หมุนอีกครั้ง\",\n\n\t\t\"GH_BALL_POSITION\": \"ตำแหน่งบอล:\",\n\t\t\"GH_TRIO\": \"ทริโอรวม\",\n\t\t\"GH_SPLIT\": \"รวมแยก\",\n\t\t\"GH_STREET\": \"รวมสตรีท\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"รวมมุม\",\n\t\t\"GH_SIX_LINE\": \"รวม 6 แถว\",\n\t\t\"GH_COLUMN\": \"คอลัมน์รวม:\",\n\t\t\"GH_FIRST_COLUMN\": \"คอลัมน์ที่หนึ่ง\",\n\t\t\"GH_SECOND_COLUMN\": \"คอลัมน์ที่สอง\",\n\t\t\"GH_THIRD_COLUMN\": \"คอลัมน์ที่สาม\",\n\t\t\"GH_DOZEN\": \"เดิมพันโหลรวม\",\n\t\t\"GH_FIRST_DOZEN\": \"12 ตัวแรก\",\n\t\t\"GH_SECOND_DOZEN\": \"สอง 12\",\n\t\t\"GH_THIRD_DOZEN\": \"สาม 12\",\n\t\t\"GH_STRAIGHT\": \"เดิมพันตรงรวม\",\n\t\t\"GH_COLOR\": \"สีรวม\",\n\t\t\"GH_BLACK\": \"ดำ\",\n\t\t\"GH_RED\": \"แดง\",\n\t\t\"GH_EVEN_ODD\": \"คู่/คี่รวม\",\n\t\t\"GH_EVEN\": \"คู่\",\n\t\t\"GH_ODD\": \"คี่\",\n\t\t\"GH_SMALL_BIG\": \"เล็ก/ใหญ่รวม\",\n\t\t\"GH_SMALL\": \"ใหญ่\",\n\t\t\"GH_BIG\": \"เล็ก\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"เปิดใช้งาน SNEAK PEEKในรอบนี้ เงินรางวัลและการเดิมพันทั้งหมดเป็นเงินทดลอง\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"รอบฟรีถูกเปิดใช้งานสำหรับรอบนี้แล้ว\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tvi: {\n\t\t\"TOTAL_COINS_WIN\": \"Tổng tiền thắng xu\",\n\t\t\"GH_HISTORY\": \"Lược sử\",\n\t\t\"GH_GAME_DETAILS\": \"Chi tiết trò chơi\",\n\t\t\"GH_GAME_ID\": \"Mã trò chơi\",\n\t\t\"GH_ROUND_ID\": \"Mã lượt chơi\",\n\t\t\"GH_SERVER_TIME_START\": \"Giờ bắt đầu của máy chủ\",\n\t\t\"GH_SERVER_TIME_END\": \"Giờ kết thúc của máy chủ\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Phương thức thắng\",\n\t\t\"GH_LENGTH\": \"Số lượng biểu tượng thắng\",\n\t\t\"GH_MULTIPLIER\": \"Hệ số\",\n\t\t\"GH_WIN_WAYS\": \"Phương thức thắng\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Nhóm chiến thắng\",\n\t\t\"GH_CLUSTER_COUNT\": \"Số lượng biểu tượng thắng.\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Giao dịch\",\n\t\t\"GH_TOTAL_STAKE\": \"TỔNG CƯỢC\",\n\t\t\"GH_TOTAL_BET\": \"Tổng cược\",\n\t\t\"GH_TOTAL_WIN\": \"Tổng tiền thắng\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"trước khi cược\",\n\t\t\"GH_AFTER_STAKE\": \"sau khi cược\",\n\t\t\"GH_AT_END\": \"kết thúc vòng chơi\",\n\t\t\"GH_BALANCE\": \"Số dư chính\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Số dư thưởng\",\n\t\t\"GH_SESSION_BALANCE\": \"Số dư phiên\",\n\t\t\"GH_SESSION_FREEBETS\": \"Số dư thưởng phiên\",\n\t\t\"GH_BONUS\": \"Thưởng\",\n\n\t\t\"GH_WIN_DETAILS\": \"Chi tiết thắng\",\n\t\t\"GH_SPIN_DETAILS\": \"Chi tiết lượt quay\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Chi tiết bổ sung\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Lượt quay ban đầu\",\n\t\t\"GH_JACKPOT_WIN\": \"Thắng lớn\",\n\t\t\"GH_SYMBOL_WINS\": \"Biểu Tượng Thắng\",\n\t\t\"GH_LINE\": \"Lượt quay\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Thắng quay tự do\",\n\t\t\"GH_FREE_SPIN\": \"Quay miễn phí\",\n\t\t\"GH_RESPIN\": \"Lượt quay lại\",\n\t\t\"GH_RESPIN_WINS\": \"Thắng trong lượt quay lại\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Thắng nhân đôi\",\n\t\t\"GH_MODIFIER_WIN\": \"Điều chỉnh tiền thắng\",\n\t\t\"GH_BONUS_WIN\": \"Thắng tiền thưởng\",\n\t\t\"GH_INSTANT_WIN\": \"THẮNG NGAY\",\n\t\t\"GH_NO_HISTORY\": \"Không có sẵn lược sử\",\n\t\t\"GH_GAMBLE_WINS\": \"Thắng đánh bài\",\n\t\t\"GH_NO_WINS\": \"Không thắng\",\n\t\t\"GH_ROUND_CORRECTION\": \"Làm tròn số\",\n\t\t\"GH_LIMITED_WIN\": \"Thắng (Giới hạn tối đa\",\n\t\t\"WIN_EXCHANGE\": \"Giá kích hoạt vòng quay miễn phí\",\n\t\t\"HALF_COLLECT\": \"Thu thập một nửa tiền thắng\",\n\t\t\"FULL_COLLECT\": \"Thu thập toàn bộ tiền thắng\",\n\n\t\t\"GH_TABLE_ID\": \"ID bàn cược\",\n\t\t\"GH_PLAYER\": \"TỤ NGƯỜI CHƠI\",\n\t\t\"GH_BANKER\": \"TỤ CÁI\",\n\t\t\"GH_TIE\": \"HOÀ\",\n\t\t\"GH_PLAYER_PAIR\": \"TỤ NGƯỜI CHƠI ĐÔI\",\n\t\t\"GH_BANKER_PAIR\": \"TỤ CÁI ĐÔI\",\n\t\t\"GH_GAME_WINNER\": \"Thắng\",\n\t\t\"GH_GAME_WINSUM\": \"Tổng cược\",\n\t\t\"GH_GAME_TOTAL\": \"Tổng\",\n\t\t\"GH_GAME_STAKE\": \"TIỀN CƯỢC\",\n\n\t\t\"GH_SPIN_TITLE\": \"QUAY\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Quay miễn phí\",\n\t\t\"GH_RESPINS_TITLE\": \"LƯỢT QUAY LẠI\",\n\n\t\t\"GH_BALL_POSITION\": \"Vị trí banh:\",\n\t\t\"GH_TRIO\": \"Tổng nhóm 3 số\",\n\t\t\"GH_SPLIT\": \"Tổng 2 số\",\n\t\t\"GH_STREET\": \"Tổng hàng dọc 3 số\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Tổng góc 4 số\",\n\t\t\"GH_SIX_LINE\": \"Tổng 2 cột 6 số\",\n\t\t\"GH_COLUMN\": \"Tổng hàng\",\n\t\t\"GH_FIRST_COLUMN\": \"Hàng 1\",\n\t\t\"GH_SECOND_COLUMN\": \"Hàng 2\",\n\t\t\"GH_THIRD_COLUMN\": \"Hàng 3\",\n\t\t\"GH_DOZEN\": \"Tổng ô 12 số\",\n\t\t\"GH_FIRST_DOZEN\": \"1-12\",\n\t\t\"GH_SECOND_DOZEN\": \"13-24\",\n\t\t\"GH_THIRD_DOZEN\": \"25-36\",\n\t\t\"GH_STRAIGHT\": \"Tổng cược số\",\n\t\t\"GH_COLOR\": \"Tổng màu sắc\",\n\t\t\"GH_BLACK\": \"Đen\",\n\t\t\"GH_RED\": \"Đỏ\",\n\t\t\"GH_EVEN_ODD\": \"Tổng Chẵn / Lẻ\",\n\t\t\"GH_EVEN\": \"Chẵn\",\n\t\t\"GH_ODD\": \"Lẻ\",\n\t\t\"GH_SMALL_BIG\": \"Tổng Lớn / Nhỏ\",\n\t\t\"GH_SMALL\": \"Nhỏ\",\n\t\t\"GH_BIG\": \"Lớn\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"SNEAK PEEK được hoạt động trong vòng chơi này. Tất cả tiền thắng và tiền cược là tiền chơi thử.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Vòng chơi miễn phí đã kích hoạt cho vòng này.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tid: {\n\t\t\"TOTAL_COINS_WIN\": \"Total koin yang dimenangkan\",\n\t\t\"GH_HISTORY\": \"Riwayat\",\n\t\t\"GH_GAME_DETAILS\": \"Rincian Game\",\n\t\t\"GH_GAME_ID\": \"ID Game\",\n\t\t\"GH_ROUND_ID\": \"ID Babak\",\n\t\t\"GH_SERVER_TIME_START\": \"Waktu Server Mulai\",\n\t\t\"GH_SERVER_TIME_END\": \"Waktu Server Akhir\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Cara kemenangan\",\n\t\t\"GH_LENGTH\": \"Lamanya Simbol Menang\",\n\t\t\"GH_MULTIPLIER\": \"Pengganda\",\n\t\t\"GH_WIN_WAYS\": \"Cara kemenangan\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Hitungan Simbol\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksi\",\n\t\t\"GH_TOTAL_STAKE\": \"Taruhan Total\",\n\t\t\"GH_TOTAL_BET\": \"Total Taruhan\",\n\t\t\"GH_TOTAL_WIN\": \"Menang Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"sebelum taruhan\",\n\t\t\"GH_AFTER_STAKE\": \"setelah taruhan\",\n\t\t\"GH_AT_END\": \"di akhir\",\n\t\t\"GH_BALANCE\": \"Saldo utama\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonus sesi\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Rincian Kemenangan\",\n\t\t\"GH_SPIN_DETAILS\": \"Detail Spin\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detail Tambahan\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Spin Awal\",\n\t\t\"GH_JACKPOT_WIN\": \"Menang Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbol Kemenangan\",\n\t\t\"GH_LINE\": \"Jalur\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Menang Putar Gratis\",\n\t\t\"GH_FREE_SPIN\": \"Putaran Gratis\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Kemenangan Respin\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kemenangan Pengganda\",\n\t\t\"GH_MODIFIER_WIN\": \"Pengubah Kemenangan\",\n\t\t\"GH_BONUS_WIN\": \"Kemenangan bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Kemenangan Instan\",\n\t\t\"GH_NO_HISTORY\": \"Riwayat tidak tersedia\",\n\t\t\"GH_GAMBLE_WINS\": \"Menang judi\",\n\t\t\"GH_NO_WINS\": \"Tanpa kemenangan\",\n\t\t\"GH_ROUND_CORRECTION\": \"Koreksi Pembulatan\",\n\t\t\"GH_LIMITED_WIN\": \"Menang (limit maks)\",\n\t\t\"WIN_EXCHANGE\": \"Harga spin gratis\",\n\t\t\"HALF_COLLECT\": \"Separuh kemenangan dikumpulkan\",\n\t\t\"FULL_COLLECT\": \"Seluruh kemenangan dikumpulkan\",\n\n\t\t\"GH_TABLE_ID\": \"ID Meja\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Seri\",\n\t\t\"GH_PLAYER_PAIR\": \"Pasangan Player\",\n\t\t\"GH_BANKER_PAIR\": \"Pasangan Banker\",\n\t\t\"GH_GAME_WINNER\": \"Pemenang\",\n\t\t\"GH_GAME_WINSUM\": \"Jumlah\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Taruhan\",\n\n\t\t\"GH_SPIN_TITLE\": \"PUTAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Putaran Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posisi Bola:\",\n\t\t\"GH_TRIO\": \"Total Trio\",\n\t\t\"GH_SPLIT\": \"Total Split\",\n\t\t\"GH_STREET\": \"Total Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total Corner\",\n\t\t\"GH_SIX_LINE\": \"Total 6 Baris\",\n\t\t\"GH_COLUMN\": \"Total Kolom\",\n\t\t\"GH_FIRST_COLUMN\": \"Kolom pertama\",\n\t\t\"GH_SECOND_COLUMN\": \"Kolom kedua\",\n\t\t\"GH_THIRD_COLUMN\": \"Kolom ketiga\",\n\t\t\"GH_DOZEN\": \"Total Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"12 pertama\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd\",\n\t\t\"GH_STRAIGHT\": \"Total Straight\",\n\t\t\"GH_COLOR\": \"Total Warna\",\n\t\t\"GH_BLACK\": \"Hitam\",\n\t\t\"GH_RED\": \"Merah\",\n\t\t\"GH_EVEN_ODD\": \"Total Genap/Ganjil\",\n\t\t\"GH_EVEN\": \"Genap\",\n\t\t\"GH_ODD\": \"Ganjil\",\n\t\t\"GH_SMALL_BIG\": \"Total Kecil/Besar\",\n\t\t\"GH_SMALL\": \"Kecil\",\n\t\t\"GH_BIG\": \"Besar\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek sudah aktif untuk ronde ini. semua kemenangan dan taruhan menggunakan uang demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Babak gratis aktif untuk babak ini.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tda: {\n\t\t\"TOTAL_COINS_WIN\": \"Samlet møntgevinst\",\n\t\t\"GH_HISTORY\": \"Historik\",\n\t\t\"GH_GAME_DETAILS\": \"Spiloplysninger\",\n\t\t\"GH_GAME_ID\": \"Spil-id\",\n\t\t\"GH_ROUND_ID\": \"Runde-id\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid start\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid slut\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vindermåder\",\n\t\t\"GH_LENGTH\": \"Længde\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vindermåder\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klynge\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol antal\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktioner\",\n\t\t\"GH_TOTAL_STAKE\": \"Samlet Indsats\",\n\t\t\"GH_TOTAL_BET\": \"Samlet Indsats\",\n\t\t\"GH_TOTAL_WIN\": \"Samlet gevinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"før indsats\",\n\t\t\"GH_AFTER_STAKE\": \"efter indsats\",\n\t\t\"GH_AT_END\": \"ved afslutning\",\n\t\t\"GH_BALANCE\": \"Hovedsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Session saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gevinstoplysninger\",\n\t\t\"GH_SPIN_DETAILS\": \"Spindetaljer\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Yderligere oplysninger\",\n\t\t\"GH_GAME_RESULTS\": \"Spilresultater\",\n\t\t\"GH_INITIAL_SPIN\": \"Første Spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot-gevinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolgevinster\",\n\t\t\"GH_LINE\": \"Linje\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratis spin-gevinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratis spin\",\n\t\t\"GH_RESPIN\": \"Genspin\",\n\t\t\"GH_RESPIN_WINS\": \"Genspin Gevinster\",\n\t\t\"GH_NUDGE\": \"Skub\",\n\t\t\"GH_NUDGE_WINS\": \"Skub-gevinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgevinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorgevinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgevinst\",\n\t\t\"GH_INSTANT_WIN\": \"Øjeblikkelig gevinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historik tilgængelig\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble-gevinster\",\n\t\t\"GH_NO_WINS\": \"Ingen gevinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Afrundingsrettelse\",\n\t\t\"GH_LIMITED_WIN\": \"Gevinst (maks. grænse)\",\n\t\t\"WIN_EXCHANGE\": \"Pris for free spins\",\n\t\t\"HALF_COLLECT\": \"Halv gevinst indsamlet\",\n\t\t\"FULL_COLLECT\": \"Hel gevinst indsamlet\",\n\n\t\t\"GH_TABLE_ID\": \"Bord-ID\",\n\t\t\"GH_PLAYER\": \"SPILLER\",\n\t\t\"GH_BANKER\": \"BANKØR\",\n\t\t\"GH_TIE\": \"Uafgjort\",\n\t\t\"GH_PLAYER_PAIR\": \"Spiller Par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankør Par\",\n\t\t\"GH_GAME_WINNER\": \"Vinder\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"I Alt\",\n\t\t\"GH_GAME_STAKE\": \"INDSATS\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratis spin\",\n\t\t\"GH_RESPINS_TITLE\": \"GENSPIN\",\n\n\t\t\"GH_BALL_POSITION\": \"Kugleplacering:\",\n\t\t\"GH_TRIO\": \"Trio Total\",\n\t\t\"GH_SPLIT\": \"Split Total\",\n\t\t\"GH_STREET\": \"Street Total\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hjørne Total\",\n\t\t\"GH_SIX_LINE\": \"Linje Total\",\n\t\t\"GH_COLUMN\": \"Kolonne Total\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Kolonne\",\n\t\t\"GH_DOZEN\": \"Dusin Total\",\n\t\t\"GH_FIRST_DOZEN\": \"Første 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Midterste\",\n\t\t\"GH_THIRD_DOZEN\": \"Sidste\",\n\t\t\"GH_STRAIGHT\": \"Straght Total\",\n\t\t\"GH_COLOR\": \"Farve Total\",\n\t\t\"GH_BLACK\": \"Sort\",\n\t\t\"GH_RED\": \"Rød\",\n\t\t\"GH_EVEN_ODD\": \"Lige/Ulige Total\",\n\t\t\"GH_EVEN\": \"Lige\",\n\t\t\"GH_ODD\": \"Ulige\",\n\t\t\"GH_SMALL_BIG\": \"Lille/Stor Total\",\n\t\t\"GH_SMALL\": \"Lille\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Smugkig var aktiv i denne runde. Alle gevinster og indsatser er demo penge.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"De gratis runder var aktive i denne runde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"MATCH DINE NUMRE\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"SUM PÅ 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"MATCH 3 SYMBOLER\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"MATCH 3 BELØB\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATIS LOD\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tde: {\n\t\t\"TOTAL_COINS_WIN\": \"Gesamter Münzgewinn\",\n\t\t\"GH_HISTORY\": \"Verlauf\",\n\t\t\"GH_GAME_DETAILS\": \"Spieldaten\",\n\t\t\"GH_GAME_ID\": \"Spiel-ID\",\n\t\t\"GH_ROUND_ID\": \"Runden-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverzeit Start\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverzeit Ende\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Gewinnkombinationen\",\n\t\t\"GH_LENGTH\": \"Symbol-Gewinnlänge\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Gewinnkombinationen\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Anzahl der Symbole\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hände\",\n\t\t\"GH_SIDE_BETS\": \"Nebeneinsätze\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Geteilt)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Geteilt)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Geteilt)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Versicherung)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Versicherung)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Versicherung)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Einsatz\",\n\t\t\"INSURANCE\": 'Versicherung',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktionen\",\n\t\t\"GH_TOTAL_STAKE\": \"Gesamteinsatz\",\n\t\t\"GH_TOTAL_BET\": \"Gesamtwette\",\n\t\t\"GH_TOTAL_WIN\": \"Gesamtgewinn\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"vor dem Einsatz\",\n\t\t\"GH_AFTER_STAKE\": \"nach dem Einsatz\",\n\t\t\"GH_AT_END\": \"Endguthaben\",\n\t\t\"GH_BALANCE\": \"Hauptguthaben\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusguthaben\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessionguthaben\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session-Bonusguthaben\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gewinndaten\",\n\t\t\"GH_SPIN_DETAILS\": \"Dreh-Details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Weitere Einzelheiten\",\n\t\t\"GH_GAME_RESULTS\": \"Ergebnis des Spiels\",\n\t\t\"GH_INITIAL_SPIN\": \"Anfangsdreh\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot-Gewinn\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol Gewinne\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Freispielgewinne\",\n\t\t\"GH_FREE_SPIN\": \"Freispiel\",\n\t\t\"GH_RESPIN\": \"Neudreh\",\n\t\t\"GH_RESPIN_WINS\": \"Neudreh-Gewinne\",\n\t\t\"GH_NUDGE\": \"Hüpfer\",\n\t\t\"GH_NUDGE_WINS\": \"Hüpfer-Gewinne\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgewinne\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorgewinn\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgewinn\",\n\t\t\"GH_INSTANT_WIN\": \"Sofortgewinn\",\n\t\t\"GH_NO_HISTORY\": \"Kein Verlauf verfügbar\",\n\t\t\"GH_GAMBLE_WINS\": \"Risikospielgewinne\",\n\t\t\"GH_NO_WINS\": \"Keine Gewinne\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rundungskorrektur\",\n\t\t\"GH_LIMITED_WIN\": \"Gewinn (max. Limit)\",\n\t\t\"WIN_EXCHANGE\": \"Kosten für Gratis Drehs\",\n\t\t\"HALF_COLLECT\": \"Halber Gewinn gesammelt\",\n\t\t\"FULL_COLLECT\": \"Ganzer Gewinn gesammelt\",\n\n\t\t\"GH_TABLE_ID\": \"Tabellen ID\",\n\t\t\"GH_PLAYER\": \"Spieler\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Gleichstand\",\n\t\t\"GH_PLAYER_PAIR\": \"Spielerpaar\",\n\t\t\"GH_BANKER_PAIR\": \"Bankerpaar\",\n\t\t\"GH_GAME_WINNER\": \"Gewinner\",\n\t\t\"GH_GAME_WINSUM\": \"Summe\",\n\t\t\"GH_GAME_TOTAL\": \"Summe\",\n\t\t\"GH_GAME_STAKE\": \"Einsatz\",\n\n\t\t\"GH_SPIN_TITLE\": \"DREHEN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Freispiel\",\n\t\t\"GH_RESPINS_TITLE\": \"NEUDREHE\",\n\n\t\t\"GH_BALL_POSITION\": \"Kugelposition:\",\n\t\t\"GH_TRIO\": \"Trio gesamt\",\n\t\t\"GH_SPLIT\": \"Split gesamt\",\n\t\t\"GH_STREET\": \"Street gesamt\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner gesamt\",\n\t\t\"GH_SIX_LINE\": \"Six Line gesamt\",\n\t\t\"GH_COLUMN\": \"Kolonne gesamt\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Kolonne\",\n\t\t\"GH_DOZEN\": \"Dutzend gesamt\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Zahl gesamt\",\n\t\t\"GH_COLOR\": \"Farbe gesamt\",\n\t\t\"GH_BLACK\": \"Schwarz\",\n\t\t\"GH_RED\": \"Rot\",\n\t\t\"GH_EVEN_ODD\": \"Gerade/Ungerade gesamt\",\n\t\t\"GH_EVEN\": \"Gerade\",\n\t\t\"GH_ODD\": \"Ungerade\",\n\t\t\"GH_SMALL_BIG\": \"Niedrig/Hoch gesamt\",\n\t\t\"GH_SMALL\": \"Niedrig\",\n\t\t\"GH_BIG\": \"Hoch\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Verdoppeln\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Angebot angenommen\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Für diese Runde war das Probespiel aktiv. Alle Gewinne und Einsätze werden in Demogeld angezeigt.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Während dieser Runde war das Gratis Runden-Feature aktiv.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Übereinstimmung mit deinen zahlen\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Summe 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3 gleiche symbole\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3 gleiche beträge\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLOS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tel: {\n\t\t\"TOTAL_COINS_WIN\": \"Συνολικό κέρδος νομισμάτων\",\n\t\t\"GH_HISTORY\": \"Ιστορικό\",\n\t\t\"GH_GAME_DETAILS\": \"Λεπτομέρειες παιχνιδιού\",\n\t\t\"GH_GAME_ID\": \"Αναγνωριστικό παιχνιδιού\",\n\t\t\"GH_ROUND_ID\": \"ID γύρου\",\n\t\t\"GH_SERVER_TIME_START\": \"Έναρξη χρόνου διακομιστή\",\n\t\t\"GH_SERVER_TIME_END\": \"Λήξη χρόνου διακομιστή\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"τρόποι κέρδους\",\n\t\t\"GH_LENGTH\": \"Μήκος κέρδους συμβόλου\",\n\t\t\"GH_MULTIPLIER\": \"Πολλαπλασιαστής\",\n\t\t\"GH_WIN_WAYS\": \"Τρόποι κέρδους\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Πλέγμα\",\n\t\t\"GH_CLUSTER_COUNT\": \"Αριθμός Συμβόλων\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Συναλλαγές\",\n\t\t\"GH_TOTAL_STAKE\": \"ΣΥΝΟΛΙΚΟ ΠΟΣΟ ΠΟΝΤΑΡΙΣΜΑΤΟΣ\",\n\t\t\"GH_TOTAL_BET\": \"ΣΥΝΟΛΙΚΟ ΠΟΝΤΑΡ.\",\n\t\t\"GH_TOTAL_WIN\": \"Συνολικό κέρδος\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"πριν το ποντάρισμα\",\n\t\t\"GH_AFTER_STAKE\": \"μετά το ποντάρισμα\",\n\t\t\"GH_AT_END\": \"στο τέλος\",\n\t\t\"GH_BALANCE\": \"Βασικό υπόλοιπο\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Υπόλοιπο μπόνους\",\n\t\t\"GH_SESSION_BALANCE\": \"Υπόλοιπο περιόδου παιχνιδιού\",\n\t\t\"GH_SESSION_FREEBETS\": \"Υπόλοιπο μπόνους περιόδου παιχνιδιού\",\n\t\t\"GH_BONUS\": \"Μπόνους\",\n\n\t\t\"GH_WIN_DETAILS\": \"Λεπτομέρειες κέρδους\",\n\t\t\"GH_SPIN_DETAILS\": \"Λεπτομέρειες περιστροφής\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Πρόσθετες Λεπτομέρειες\",\n\t\t\"GH_GAME_RESULTS\": \"Αποτελέσματα παιχνιδιού\",\n\t\t\"GH_INITIAL_SPIN\": \"Αρχική περιστροφή\",\n\t\t\"GH_JACKPOT_WIN\": \"Κέρδος Τζακπότ\",\n\t\t\"GH_SYMBOL_WINS\": \"Κερδη Συμβολου\",\n\t\t\"GH_LINE\": \"Γραμμή\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Κέρδη δωρεάν περιστροφών\",\n\t\t\"GH_FREE_SPIN\": \"Δωρεάν περιστροφή\",\n\t\t\"GH_RESPIN\": \"ΕΠΑΝΑΠΕΡΙΣΤΡΟΦΗ\",\n\t\t\"GH_RESPIN_WINS\": \"Κέρδη εκ νέων περιστροφών\",\n\t\t\"GH_NUDGE\": \"Σκούντημα\",\n\t\t\"GH_NUDGE_WINS\": \"Κέρδη σκουντήματος\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Κέρδη πολλαπλασιαστή\",\n\t\t\"GH_MODIFIER_WIN\": \"Κέρδος τροποποιητή\",\n\t\t\"GH_BONUS_WIN\": \"Κέρδος μπόνους\",\n\t\t\"GH_INSTANT_WIN\": \"Άμεσο κέρδος\",\n\t\t\"GH_NO_HISTORY\": \"Δεν υπάρχει διαθέσιμο ιστορικό\",\n\t\t\"GH_GAMBLE_WINS\": \"Κέρδη πονταρίσματος\",\n\t\t\"GH_NO_WINS\": \"Δεν υπάρχουν κέρδη\",\n\t\t\"GH_ROUND_CORRECTION\": \"Στρογγυλοποίηση\",\n\t\t\"GH_LIMITED_WIN\": \"Κέρδος (μέγιστο όριο)\",\n\t\t\"WIN_EXCHANGE\": \"Κόστος δωρεάν στροφών\",\n\t\t\"HALF_COLLECT\": \"Μισό κέρδος συλλέχθηκε\",\n\t\t\"FULL_COLLECT\": \"Ολόκληρο κέρδος συλλέχθηκε\",\n\n\t\t\"GH_TABLE_ID\": \"Αναγνωριστικό τραπεζιού\",\n\t\t\"GH_PLAYER\": \"ΠΑΙΚΤΗΣ\",\n\t\t\"GH_BANKER\": \"ΜΠΑΝΚΑ\",\n\t\t\"GH_TIE\": \"Ισοπαλία\",\n\t\t\"GH_PLAYER_PAIR\": \"Ζεύγος παίκτη\",\n\t\t\"GH_BANKER_PAIR\": \"Ζεύγος μπάνκας\",\n\t\t\"GH_GAME_WINNER\": \"Νικητής\",\n\t\t\"GH_GAME_WINSUM\": \"Ποσό\",\n\t\t\"GH_GAME_TOTAL\": \"Σύνολο\",\n\t\t\"GH_GAME_STAKE\": \"ΠΟΣΟ ΠΟΝΤΑΡΙΣΜΑΤΟΣ\",\n\n\t\t\"GH_SPIN_TITLE\": \"ΠΕΡΙΣΤΡ.\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Δωρεάν περιστροφή\",\n\t\t\"GH_RESPINS_TITLE\": \"ΕΠΑΝΑΠΕΡΙΣΤΡΟΦΕΣ\",\n\n\t\t\"GH_BALL_POSITION\": \"Θέση μπίλιας:\",\n\t\t\"GH_TRIO\": \"Σύνολο τριπλέτας\",\n\t\t\"GH_SPLIT\": \"Σύνολο δυάδας\",\n\t\t\"GH_STREET\": \"Σύνολο τριάδας\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Σύνολο γωνίας\",\n\t\t\"GH_SIX_LINE\": \"Σύνολο εξάδας\",\n\t\t\"GH_COLUMN\": \"Σύνολο στήλης\",\n\t\t\"GH_FIRST_COLUMN\": \"1η στήλη\",\n\t\t\"GH_SECOND_COLUMN\": \"2η στήλη\",\n\t\t\"GH_THIRD_COLUMN\": \"3η στήλη\",\n\t\t\"GH_DOZEN\": \"Σύνολο 12άδας\",\n\t\t\"GH_FIRST_DOZEN\": \"1η 12άδα\",\n\t\t\"GH_SECOND_DOZEN\": \"2η 12άδα\",\n\t\t\"GH_THIRD_DOZEN\": \"3η 12άδα\",\n\t\t\"GH_STRAIGHT\": \"Σύνολο Απευθείας\",\n\t\t\"GH_COLOR\": \"Σύνολο χρώματος\",\n\t\t\"GH_BLACK\": \"Μαύρο\",\n\t\t\"GH_RED\": \"Κόκκινο\",\n\t\t\"GH_EVEN_ODD\": \"Σύνολο ζυγού/μονού\",\n\t\t\"GH_EVEN\": \"Ζυγός\",\n\t\t\"GH_ODD\": \"Μονός\",\n\t\t\"GH_SMALL_BIG\": \"Σύνολο Μικρών/Μεγάλων\",\n\t\t\"GH_SMALL\": \"Μικρό\",\n\t\t\"GH_BIG\": \"Μεγάλο\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Η λειτουργία κρυφής ματιάς ήταν ενεργή για αυτόν τον γύρο. Όλα τα κέρδη και τα στοιχήματα είναι εικονικά χρήματα.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Δωρεάν γύροι ήταν ενεργοί για αυτόν τον γύρο.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Αντιστοιχίστε με τους αριθμούς σας\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Σύνολο 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Αντιστοιχίστε 3 συμβολα\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Αντιστοιχίστε 3 ποσά\",\n\t\t\"SCRATCH_FREE_CARD\": \"ΔΩΡΕΑΝ ΔΕΛΤΙΟ\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tes: {\n\t\t\"TOTAL_COINS_WIN\": \"Monedas totales ganadas\",\n\t\t\"GH_HISTORY\": \"Historial\",\n\t\t\"GH_GAME_DETAILS\": \"Información del juego\",\n\t\t\"GH_GAME_ID\": \"ID del juego\",\n\t\t\"GH_ROUND_ID\": \"ID de ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Inicio de la hora del servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin de la hora del servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganar\",\n\t\t\"GH_LENGTH\": \"Longitud del premio del símbolo\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grupo\",\n\t\t\"GH_CLUSTER_COUNT\": \"Número de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\t\t\n\t\t\"GH_HANDS\": \"Manos\",\n\t\t\"GH_SIDE_BETS\": \"Apuestas adicionales\",\n\n\t\t\"HAND_0\": \"Mano [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Mano [1] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_0_SIDE_1\": \"Mano [1] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_0_SIDE_2\": \"Mano [1] Apuesta adicional - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Mano [1] (Dividir)\",\n\t\t\"HAND_1\": \"Mano [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Mano [2] (Dividir)\",\n\t\t\"HAND_1_SIDE_0\": \"Mano [2] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_1_SIDE_1\": \"Mano [2] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_1_SIDE_2\": \"Mano [2] Apuesta adicional - Bustorama\",\n\n\t\t\"HAND_2\": \"Mano [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Mano [3] (Dividir)\",\n\t\t\"HAND_2_SIDE_0\": \"Mano [3] Apuesta adicional - 21 más 3\",\n\t\t\"HAND_2_SIDE_1\": \"Mano [3] Apuesta adicional - Cualquier par\",\n\t\t\"HAND_2_SIDE_2\": \"Mano [3] Apuesta adicional - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Mano [1] (Seguro)\",\n\t\t\"INSURANCE_HAND_1\": \"Mano [2] (Seguro)\",\n\t\t\"INSURANCE_HAND_2\": \"Mano [3] (Seguro)\",\n\t\t\"DEALER\": \"Croupier\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Bono Ante\",\n\t\t\"PAIR_BONUS\": \"Bono Par\",\n\t\t\"PLAY\": \"Jugar\",\n\t\t\n\t\t\"STAKE\": \"Apuesta\",\n\t\t\"INSURANCE\": 'Seguro',\n\n\t\t\"GH_TRANSACTIONS\": \"Transacciones\",\n\t\t\"GH_TOTAL_STAKE\": \"Apuesta Total\",\n\t\t\"GH_TOTAL_BET\": \"Apuesta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Premio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"antes de la apuesta\",\n\t\t\"GH_AFTER_STAKE\": \"después de la apuesta\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bono\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo de la sesión\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bono de la sesión\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Información del premio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalles del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalles adicionales\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados del juego\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Premio del bote\",\n\t\t\"GH_SYMBOL_WINS\": \"Premios por Símbolos\",\n\t\t\"GH_LINE\": \"Línea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Premios de giros gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro Gratis\",\n\t\t\"GH_RESPIN\": \"Regiro\",\n\t\t\"GH_RESPIN_WINS\": \"Premios del regiro\",\n\t\t\"GH_NUDGE\": \"Avance\",\n\t\t\"GH_NUDGE_WINS\": \"Premios de Avances\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Premios con multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificador al premio\",\n\t\t\"GH_BONUS_WIN\": \"Premio del bono\",\n\t\t\"GH_INSTANT_WIN\": \"Premio instantáneo\",\n\t\t\"GH_NO_HISTORY\": \"Sin historial disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Premios de apuesta\",\n\t\t\"GH_NO_WINS\": \"Ningún premio\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corrección de redondeo\",\n\t\t\"GH_LIMITED_WIN\": \"Premio (límite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Precio de giros gratis\",\n\t\t\"HALF_COLLECT\": \"Mitad del premio acumulado\",\n\t\t\"FULL_COLLECT\": \"Todo el premio acumulado\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la mesa\",\n\t\t\"GH_PLAYER\": \"Jugador\",\n\t\t\"GH_BANKER\": \"Banka\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par del Jugador\",\n\t\t\"GH_BANKER_PAIR\": \"Par de la Banca\",\n\t\t\"GH_GAME_WINNER\": \"Ganador\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Apuesta\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"REGIROS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posición de la bola:\",\n\t\t\"GH_TRIO\": \"Total de trío\",\n\t\t\"GH_SPLIT\": \"Total dividido\",\n\t\t\"GH_STREET\": \"Total de calle\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de esquina\",\n\t\t\"GH_SIX_LINE\": \"Total de la línea de seis\",\n\t\t\"GH_COLUMN\": \"Total de la columna\",\n\t\t\"GH_FIRST_COLUMN\": \"1.ª columna\",\n\t\t\"GH_SECOND_COLUMN\": \"2.ª columna\",\n\t\t\"GH_THIRD_COLUMN\": \"3.ª columna\",\n\t\t\"GH_DOZEN\": \"Total de docena\",\n\t\t\"GH_FIRST_DOZEN\": \"1.º 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.º 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.º 12\",\n\t\t\"GH_STRAIGHT\": \"Total de apuesta normal\",\n\t\t\"GH_COLOR\": \"Total color\",\n\t\t\"GH_BLACK\": \"Negro\",\n\t\t\"GH_RED\": \"Rojo\",\n\t\t\"GH_EVEN_ODD\": \"Total par/impar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Impar\",\n\t\t\"GH_SMALL_BIG\": \"Total pequeño/grande\",\n\t\t\"GH_SMALL\": \"Pequeño\",\n\t\t\"GH_BIG\": \"Grande\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Doblar\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"El modo “Écha un vistazo” estaba activo durante esta ronda. Todos los premios y apuestas son en dinero demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"En esta ronda estaban activadas las rondas gratis.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Empareja con tus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Suma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Empareja 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Empareja 3 cantidades\",\n\t\t\"SCRATCH_FREE_CARD\": \"TARJETA GRATIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tfi: {\n\t\t\"TOTAL_COINS_WIN\": \"Kokonaiskolikkovoitot\",\n\t\t\"GH_HISTORY\": \"Historia\",\n\t\t\"GH_GAME_DETAILS\": \"Pelitiedot\",\n\t\t\"GH_GAME_ID\": \"Pelitunnus\",\n\t\t\"GH_ROUND_ID\": \"KIERROKSEN ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Palvelinajan alku\",\n\t\t\"GH_SERVER_TIME_END\": \"Palvelinajan loppu\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Voittotavat\",\n\t\t\"GH_LENGTH\": \"Symbolivoiton pituus\",\n\t\t\"GH_MULTIPLIER\": \"Kerroin\",\n\t\t\"GH_WIN_WAYS\": \"Voittotavat\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Rykelmä\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbolimäärä\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Rahansiirrot\",\n\t\t\"GH_TOTAL_STAKE\": \"Kokonaispanos\",\n\t\t\"GH_TOTAL_BET\": \"Kokonaispanos\",\n\t\t\"GH_TOTAL_WIN\": \"Kokonaisvoitto\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"ennen panosta\",\n\t\t\"GH_AFTER_STAKE\": \"panoksen jälkeen\",\n\t\t\"GH_AT_END\": \"lopussa\",\n\t\t\"GH_BALANCE\": \"Pääsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Istunnon saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Istunnon bonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Voittotiedot\",\n\t\t\"GH_SPIN_DETAILS\": \"Kierroksen tiedot\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Lisätiedot\",\n\t\t\"GH_GAME_RESULTS\": \"Pelien tulokset\",\n\t\t\"GH_INITIAL_SPIN\": \"Ensimmäinen kierros\",\n\t\t\"GH_JACKPOT_WIN\": \"Jättipottivoitto\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolivoitot\",\n\t\t\"GH_LINE\": \"Linja\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ilmaispelivoitot\",\n\t\t\"GH_FREE_SPIN\": \"Ilmainen pyöritys\",\n\t\t\"GH_RESPIN\": \"Uudelleenpyöräytys\",\n\t\t\"GH_RESPIN_WINS\": \"Voitot uudelleenpyöräytyksistä\",\n\t\t\"GH_NUDGE\": \"Liikahdus\",\n\t\t\"GH_NUDGE_WINS\": \"Liikahdusvoitot\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kerroinvoitot\",\n\t\t\"GH_MODIFIER_WIN\": \"Muuttajavoitto\",\n\t\t\"GH_BONUS_WIN\": \"Bonusvoitot\",\n\t\t\"GH_INSTANT_WIN\": \"Pikavoitto\",\n\t\t\"GH_NO_HISTORY\": \"Historiatietoja ei ole saatavilla\",\n\t\t\"GH_GAMBLE_WINS\": \"Tuplausvoitot\",\n\t\t\"GH_NO_WINS\": \"Ei voittoja\",\n\t\t\"GH_ROUND_CORRECTION\": \"Pyöristyksen oikaisu\",\n\t\t\"GH_LIMITED_WIN\": \"Voitto (max. raja)\",\n\t\t\"WIN_EXCHANGE\": \"Ilmaispyöräytysten hinta\",\n\t\t\"HALF_COLLECT\": \"Puolet voitosta lunastettu\",\n\t\t\"FULL_COLLECT\": \"Koko voitto lunastettu\",\n\n\t\t\"GH_TABLE_ID\": \"Pöydän tunnus\",\n\t\t\"GH_PLAYER\": \"Pelaaja\",\n\t\t\"GH_BANKER\": \"Pankkiiri\",\n\t\t\"GH_TIE\": \"Tasan\",\n\t\t\"GH_PLAYER_PAIR\": \"Pelaajan pari\",\n\t\t\"GH_BANKER_PAIR\": \"Pankkirin pari\",\n\t\t\"GH_GAME_WINNER\": \"Voittaja\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Yhteensä\",\n\t\t\"GH_GAME_STAKE\": \"Panos\",\n\n\t\t\"GH_SPIN_TITLE\": \"PELAA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Ilmainen pyöritys\",\n\t\t\"GH_RESPINS_TITLE\": \"Uudelleenpyöräytykset\",\n\n\t\t\"GH_BALL_POSITION\": \"Pallon paikka:\",\n\t\t\"GH_TRIO\": \"Triot yhteensä\",\n\t\t\"GH_SPLIT\": \"2 numeroa yhteensä\",\n\t\t\"GH_STREET\": \"3 numeroa yhteensä\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"4 numeroa yhteensä\",\n\t\t\"GH_SIX_LINE\": \"Six Line Total\",\n\t\t\"GH_COLUMN\": \"Sarakkeet yhteensä\",\n\t\t\"GH_FIRST_COLUMN\": \"1. sarake\",\n\t\t\"GH_SECOND_COLUMN\": \"2. sarake\",\n\t\t\"GH_THIRD_COLUMN\": \"3. sarake\",\n\t\t\"GH_DOZEN\": \"Tusinat yhteensä\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tusina\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tusina\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tusina\",\n\t\t\"GH_STRAIGHT\": \"1 numero yhteensä\",\n\t\t\"GH_COLOR\": \"Värilliset yhteensä\",\n\t\t\"GH_BLACK\": \"Musta\",\n\t\t\"GH_RED\": \"Punainen\",\n\t\t\"GH_EVEN_ODD\": \"Parilliset/Parittomat yhteensä\",\n\t\t\"GH_EVEN\": \"Parillinen\",\n\t\t\"GH_ODD\": \"Pariton\",\n\t\t\"GH_SMALL_BIG\": \"Pienet/Isot yhteensä\",\n\t\t\"GH_SMALL\": \"Pieni\",\n\t\t\"GH_BIG\": \"Iso\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Ennakkokokeilu oli käynnissä tämän kierroksen ajan. Kaikki maksetut voitot ja asetetut vedot ovat kokeilurahoja.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ilmaiskierrostoiminto oli aktiivinen tällä kierroksella.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Löydä samat luvut\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7 summa\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Löydä 3 samaa kuviota\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Löydä 3 samaa summaa\",\n\t\t\"SCRATCH_FREE_CARD\": \"ILMAINEN ARPA\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tfr: {\n\t\t\"TOTAL_COINS_WIN\": \"Montant total des gains en pièces\",\n\t\t\"GH_HISTORY\": \"Historique\",\n\t\t\"GH_GAME_DETAILS\": \"Détails du jeu\",\n\t\t\"GH_GAME_ID\": \"Identifiant de jeu\",\n\t\t\"GH_ROUND_ID\": \"Identifiant de partie\",\n\t\t\"GH_SERVER_TIME_START\": \"Début (heure du serveur)\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin (heure du serveur)\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Nb trajectoires\",\n\t\t\"GH_LENGTH\": \"Taille des symboles gagnants\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicateur\",\n\t\t\"GH_WIN_WAYS\": \"Trajectoires\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Regroupement\",\n\t\t\"GH_CLUSTER_COUNT\": \"Nombre de symboles\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Mise Totale\",\n\t\t\"GH_TOTAL_BET\": \"Mise Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Gain total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"avant mise\",\n\t\t\"GH_AFTER_STAKE\": \"après mise\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Solde principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Solde bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Solde de la session\",\n\t\t\"GH_SESSION_FREEBETS\": \"Solde bonus de la session\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Détails des gains\",\n\t\t\"GH_SPIN_DETAILS\": \"Détails des tours\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informations complémentaires\",\n\t\t\"GH_GAME_RESULTS\": \"Résultats du jeu\",\n\t\t\"GH_INITIAL_SPIN\": \"Tour initial\",\n\t\t\"GH_JACKPOT_WIN\": \"Gain jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Gains de symboles\",\n\t\t\"GH_LINE\": \"Ligne\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gains des tours gratuits\",\n\t\t\"GH_FREE_SPIN\": \"Tour gratuit\",\n\t\t\"GH_RESPIN\": \"Relance\",\n\t\t\"GH_RESPIN_WINS\": \"Gains Relances\",\n\t\t\"GH_NUDGE\": \"Coup de pouce\",\n\t\t\"GH_NUDGE_WINS\": \"Gains coup de pouce\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Gains multiplicateurs\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificateur de gain\",\n\t\t\"GH_BONUS_WIN\": \"Gain bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Gain instantané\",\n\t\t\"GH_NO_HISTORY\": \"Aucun historique disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Gains Quitte ou double\",\n\t\t\"GH_NO_WINS\": \"Aucun gain\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrondir\",\n\t\t\"GH_LIMITED_WIN\": \"Gain (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Coût des tours gratuits\",\n\t\t\"HALF_COLLECT\": \"Moitié du gain collectée\",\n\t\t\"FULL_COLLECT\": \"Gain collecté en entier\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la table\",\n\t\t\"GH_PLAYER\": \"Joueur\",\n\t\t\"GH_BANKER\": \"Banquier\",\n\t\t\"GH_TIE\": \"Égalité\",\n\t\t\"GH_PLAYER_PAIR\": \"Paire du joueur\",\n\t\t\"GH_BANKER_PAIR\": \"Paire du banquier\",\n\t\t\"GH_GAME_WINNER\": \"Gagnant\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Somme\",\n\t\t\"GH_GAME_STAKE\": \"Mise\",\n\n\t\t\"GH_SPIN_TITLE\": \"LANCER\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tour gratuit\",\n\t\t\"GH_RESPINS_TITLE\": \"RELANCES\",\n\n\t\t\"GH_BALL_POSITION\": \"Position de la bille:\",\n\t\t\"GH_TRIO\": \"Total trio\",\n\t\t\"GH_SPLIT\": \"Total cheval\",\n\t\t\"GH_STREET\": \"Total transversale\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total carré\",\n\t\t\"GH_SIX_LINE\": \"Total sixain\",\n\t\t\"GH_COLUMN\": \"Total de la colonne\",\n\t\t\"GH_FIRST_COLUMN\": \"1ère colonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2ème colonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3ème colonne\",\n\t\t\"GH_DOZEN\": \"Total douzaine\",\n\t\t\"GH_FIRST_DOZEN\": \"1ère douzaine \",\n\t\t\"GH_SECOND_DOZEN\": \"2ème douzaine\",\n\t\t\"GH_THIRD_DOZEN\": \"3ème douzaine\",\n\t\t\"GH_STRAIGHT\": \"Total plein\",\n\t\t\"GH_COLOR\": \"Total couleur\",\n\t\t\"GH_BLACK\": \"Noir\",\n\t\t\"GH_RED\": \"Rouge\",\n\t\t\"GH_EVEN_ODD\": \"Total pair/impair\",\n\t\t\"GH_EVEN\": \"Pair\",\n\t\t\"GH_ODD\": \"Impair\",\n\t\t\"GH_SMALL_BIG\": \"Total petit/grand\",\n\t\t\"GH_SMALL\": \"Petit\",\n\t\t\"GH_BIG\": \"Grand\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Le mode sneak peek était activé pour ce tour. Tous les gains et paris sont de l'argent de démo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Des parties gratuites étaient actives lors de cette session de jeu.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Révélez des numéros identiques aux vôtres\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Faites 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Révélez 3 symboles identiques\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Révélez 3 montants identiques\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTE GRATUITE\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tit: {\n\t\t\"TOTAL_COINS_WIN\": \"Vincita totale in gettoni\",\n\t\t\"GH_HISTORY\": \"Cronologia\",\n\t\t\"GH_GAME_DETAILS\": \"Dettagli di gioco\",\n\t\t\"GH_GAME_ID\": \"ID Gioco\",\n\t\t\"GH_ROUND_ID\": \"ID Partita\",\n\t\t\"GH_SERVER_TIME_START\": \"Orario Server - Inizio\",\n\t\t\"GH_SERVER_TIME_END\": \"Orario Server - Fine\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Modalità di vincita\",\n\t\t\"GH_LENGTH\": \"Numero di Simboli Vincenti\",\n\t\t\"GH_MULTIPLIER\": \"Moltiplicatore\",\n\t\t\"GH_WIN_WAYS\": \"Modalità di vincita\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Numero di simboli\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Mani\",\n\t\t\"GH_SIDE_BETS\": \"Puntate Collaterali\",\n\n\t\t\"HAND_0\": \"Mano [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Mano [1] (Divisa)\",\n\t\t\"HAND_1\": \"Mano [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Mano [2] (Divisa)\",\n\t\t\"HAND_2\": \"Mano [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Mano [3] (Divisa)\",\n\t\t\"INSURANCE_HAND_0\": \"Mano [1] (Assicurazione)\",\n\t\t\"INSURANCE_HAND_1\": \"Mano [2] (Assicurazione)\",\n\t\t\"INSURANCE_HAND_2\": \"Mano [3] (Assicurazione)\",\n\t\t\"DEALER\": \"CROUPIER\",\n\n\t\t\"STAKE\": \"Puntata\",\n\t\t\"INSURANCE\": 'Assicurazione',\n\n\t\t\"GH_TRANSACTIONS\": \"Transazioni\",\n\t\t\"GH_TOTAL_STAKE\": \"Puntata Totale\",\n\t\t\"GH_TOTAL_BET\": \"Puntata Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Vincita Totale\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"prima della puntata\",\n\t\t\"GH_AFTER_STAKE\": \"dopo la puntata\",\n\t\t\"GH_AT_END\": \"saldo finale\",\n\t\t\"GH_BALANCE\": \"Saldo principale\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo della sessione\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonus della sessione\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Dettagli della vincita\",\n\t\t\"GH_SPIN_DETAILS\": \"Dati del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ulteriori dettagli\",\n\t\t\"GH_GAME_RESULTS\": \"Risultati del Gioco\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro iniziale\",\n\t\t\"GH_JACKPOT_WIN\": \"Vincita Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Vincite da Simbolo\",\n\t\t\"GH_LINE\": \"Linea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Vincite dei Giri Gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro Gratis\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Vincite del Respin\",\n\t\t\"GH_NUDGE\": \"Spostamento\",\n\t\t\"GH_NUDGE_WINS\": \"Vincite da spostamento\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Vincite con moltiplicatore\",\n\t\t\"GH_MODIFIER_WIN\": \"Vincita Modificatore\",\n\t\t\"GH_BONUS_WIN\": \"Vincite Bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Vincite Istantanee\",\n\t\t\"GH_NO_HISTORY\": \"Cronologia non disponibile\",\n\t\t\"GH_GAMBLE_WINS\": \"Vincite da Scommessa\",\n\t\t\"GH_NO_WINS\": \"Nessuna vincita\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrotondamento\",\n\t\t\"GH_LIMITED_WIN\": \"Vincita (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Prezzo dei giri gratis\",\n\t\t\"HALF_COLLECT\": \"Metà vincita riscossa\",\n\t\t\"FULL_COLLECT\": \"Vincita totale riscossa\",\n\n\t\t\"GH_TABLE_ID\": \"ID Tavolo\",\n\t\t\"GH_PLAYER\": \"Giocatore\",\n\t\t\"GH_BANKER\": \"Banco\",\n\t\t\"GH_TIE\": \"Pareggio\",\n\t\t\"GH_PLAYER_PAIR\": \"Coppia del Giocatore\",\n\t\t\"GH_BANKER_PAIR\": \"Coppia del Banco\",\n\t\t\"GH_GAME_WINNER\": \"Vincitore\",\n\t\t\"GH_GAME_WINSUM\": \"Somma\",\n\t\t\"GH_GAME_TOTAL\": \"Totale\",\n\t\t\"GH_GAME_STAKE\": \"Puntata\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro Gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPIN\",\n\n\t\t\"GH_BALL_POSITION\": \"Posizione Pallina:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"A Cavallo\",\n\t\t\"GH_STREET\": \"Terzina\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Carré\",\n\t\t\"GH_SIX_LINE\": \"Sestina\",\n\t\t\"GH_COLUMN\": \"Colonna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Colonna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Colonna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Colonna\",\n\t\t\"GH_DOZEN\": \"Dozzina\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª Dozzina\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª Dozzina\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª Dozzina\",\n\t\t\"GH_STRAIGHT\": \"En plein\",\n\t\t\"GH_COLOR\": \"Colore\",\n\t\t\"GH_BLACK\": \"Nero\",\n\t\t\"GH_RED\": \"Rosso\",\n\t\t\"GH_EVEN_ODD\": \"Pari/Dispari\",\n\t\t\"GH_EVEN\": \"Pari\",\n\t\t\"GH_ODD\": \"Dispari\",\n\t\t\"GH_SMALL_BIG\": \"Basso/Alto\",\n\t\t\"GH_SMALL\": \"Basso\",\n\t\t\"GH_BIG\": \"Alto\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Raddoppia\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offerta Accettata\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"La modalità anteprima era attiva per questo turno. Tutte le puntate e le vincite sono in denaro virtuale.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Durante questa partita erano attivi i round di gioco gratuiti.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Abbina i tuoi numeri\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"La somma di 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Abbina 3 simboli\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Abbina 3 importi\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTOLINA GRATIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tka: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"ისტორია\",\n\t\t\"GH_GAME_DETAILS\": \"თამაშის დეტალები\",\n\t\t\"GH_GAME_ID\": \"თამაშის ID\",\n\t\t\"GH_ROUND_ID\": \"რაუნდის ID\",\n\t\t\"GH_SERVER_TIME_START\": \"სერვერის დროის დასაწყისი\",\n\t\t\"GH_SERVER_TIME_END\": \"სერვერის დროის დასასრული\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"მოგების გზები\",\n\t\t\"GH_LENGTH\": \"მოგების სიმბოლოს სიგრძე\",\n\t\t\"GH_MULTIPLIER\": \"კოეფიციენტი\",\n\t\t\"GH_WIN_WAYS\": \"მოგების გზები\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"დაგროვების ჯგუფი\",\n\t\t\"GH_CLUSTER_COUNT\": \"სიმბოლოს რაოდენობა\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"ტრანზაქციები\",\n\t\t\"GH_TOTAL_STAKE\": \"სრული ფსონი\",\n\t\t\"GH_TOTAL_BET\": \"სრულ.ფს.\",\n\t\t\"GH_TOTAL_WIN\": \"სრული მოგება\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"ფსონამდე\",\n\t\t\"GH_AFTER_STAKE\": \"ფსონის შემდეგ\",\n\t\t\"GH_AT_END\": \"დასასრულს\",\n\t\t\"GH_BALANCE\": \"მთავარი ბალანსი\",\n\t\t\"GH_FREEBETS_BALANCE\": \"ბონუსის ბალანსი\",\n\t\t\"GH_SESSION_BALANCE\": \"სესიის ბალანსი\",\n\t\t\"GH_SESSION_FREEBETS\": \"სესიის ბონუსის ბალანსი\",\n\t\t\"GH_BONUS\": \"ბონუსი\",\n\n\t\t\"GH_WIN_DETAILS\": \"მოგების დეტალები\",\n\t\t\"GH_SPIN_DETAILS\": \"დატრიალების დეტალები\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"დამატებითი დეტალები\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"საწყისი დატრიალება\",\n\t\t\"GH_JACKPOT_WIN\": \"ჯეკპოტის მოგება\",\n\t\t\"GH_SYMBOL_WINS\": \"სიმბოლოს მოგებები\",\n\t\t\"GH_LINE\": \"ხაზი\",\n\t\t\"GH_FREE_SPIN_WINS\": \"უფასო დატრიალებების მოგებები\",\n\t\t\"GH_FREE_SPIN\": \"უფასო დატრიალება\",\n\t\t\"GH_RESPIN\": \"ხელახლა დატრიალება\",\n\t\t\"GH_RESPIN_WINS\": \"ხელახლა დატრიალების მოგებები\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"მამრავლით მიღებული მოგებები\",\n\t\t\"GH_MODIFIER_WIN\": \"მოდიფიკატორი მოგება\",\n\t\t\"GH_BONUS_WIN\": \"ბონუსური მოგება\",\n\t\t\"GH_INSTANT_WIN\": \"მომენტალური მოგება\",\n\t\t\"GH_NO_HISTORY\": \"ისტორია მიუწვდომელია\",\n\t\t\"GH_GAMBLE_WINS\": \"აზარტული თამაშების მოგებები\",\n\t\t\"GH_NO_WINS\": \"მოგებები არ არის\",\n\t\t\"GH_ROUND_CORRECTION\": \"დამრგვალების კორექტირება\",\n\t\t\"GH_LIMITED_WIN\": \"მოგება (მაქსიმალური ლიმიტი)\",\n\t\t\"WIN_EXCHANGE\": \"უფასო სპინების ფასი\",\n\t\t\"HALF_COLLECT\": \"შეგროვებულია მოგების ნახევარი\",\n\t\t\"FULL_COLLECT\": \"შეგროვებულია მთლიანი მოგება\",\n\n\t\t\"GH_TABLE_ID\": \"მაგიდის იდენტიფიკატორი\",\n\t\t\"GH_PLAYER\": \"მოთამაშე\",\n\t\t\"GH_BANKER\": \"ბანკირი\",\n\t\t\"GH_TIE\": \"კავშირი\",\n\t\t\"GH_PLAYER_PAIR\": \"მოთამაშის წყვილი\",\n\t\t\"GH_BANKER_PAIR\": \"ბანკირის წყვილი\",\n\t\t\"GH_GAME_WINNER\": \"გამარჯვებული\",\n\t\t\"GH_GAME_WINSUM\": \"ჯამი\",\n\t\t\"GH_GAME_TOTAL\": \"სულ\",\n\t\t\"GH_GAME_STAKE\": \"ფსონი\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"უფასო დატრიალება\",\n\t\t\"GH_RESPINS_TITLE\": \"ხელახლა დატრიალებები\",\n\n\t\t\"GH_BALL_POSITION\": \"ბურთის მდებარეობა:\",\n\t\t\"GH_TRIO\": \"„Trio“ სულ\",\n\t\t\"GH_SPLIT\": \"გაყოფილია სულ\",\n\t\t\"GH_STREET\": \"სულ „სტრიტი“\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"კუთხის სულ\",\n\t\t\"GH_SIX_LINE\": \"სულ ექვს ხაზზე\",\n\t\t\"GH_COLUMN\": \"სვეტის სრული ოდენობა\",\n\t\t\"GH_FIRST_COLUMN\": \"1-ლი სვეტი\",\n\t\t\"GH_SECOND_COLUMN\": \"მე-2 სვეტი\",\n\t\t\"GH_THIRD_COLUMN\": \"მე-3 სვეტი\",\n\t\t\"GH_DOZEN\": \"თორმეტი სულ\",\n\t\t\"GH_FIRST_DOZEN\": \"1-ლი 12\",\n\t\t\"GH_SECOND_DOZEN\": \"მე-2 12\",\n\t\t\"GH_THIRD_DOZEN\": \"მე-3 12\",\n\t\t\"GH_STRAIGHT\": \"სთრეით სულ\",\n\t\t\"GH_COLOR\": \"ფერადი სულ\",\n\t\t\"GH_BLACK\": \"შავი\",\n\t\t\"GH_RED\": \"წითელი\",\n\t\t\"GH_EVEN_ODD\": \"ლუწი/კენტი სულ\",\n\t\t\"GH_EVEN\": \"ლუწი\",\n\t\t\"GH_ODD\": \"კენტი\",\n\t\t\"GH_SMALL_BIG\": \"პატარა/დიდი სულ\",\n\t\t\"GH_SMALL\": \"პატარა\",\n\t\t\"GH_BIG\": \"დიდი\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek აქტიური იყო ამ რაუნდისთვის. ყველა მოგება და ფსონი დემო ფულს წარმოადგენს.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"უფასო რაუნდები აქტიური იყო ამ რაუნდისთვის.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tnl: {\n\t\t\"TOTAL_COINS_WIN\": \"Totaal aantal gewonnen munten\",\n\t\t\"GH_HISTORY\": \"Geschiedenis\",\n\t\t\"GH_GAME_DETAILS\": \"Speldetails\",\n\t\t\"GH_GAME_ID\": \"Spel-id\",\n\t\t\"GH_ROUND_ID\": \"Ronde-id\",\n\t\t\"GH_SERVER_TIME_START\": \"Start servertijd\",\n\t\t\"GH_SERVER_TIME_END\": \"Einde servertijd\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Winstpaden\",\n\t\t\"GH_LENGTH\": \"Lengte symboolwinst\",\n\t\t\"GH_MULTIPLIER\": \"Vermenigvuldiger\",\n\t\t\"GH_WIN_WAYS\": \"Winstpaden\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symboolteller\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transacties\",\n\t\t\"GH_TOTAL_STAKE\": \"Totale Inzet\",\n\t\t\"GH_TOTAL_BET\": \"Totale inzet\",\n\t\t\"GH_TOTAL_WIN\": \"Totale prijs\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"voor inzet\",\n\t\t\"GH_AFTER_STAKE\": \"na inzet\",\n\t\t\"GH_AT_END\": \"op einde\",\n\t\t\"GH_BALANCE\": \"Hoofdsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessiesaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonussaldo sessie\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Prijsdetails\",\n\t\t\"GH_SPIN_DETAILS\": \"Rondedetails\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Aanvullende informatie\",\n\t\t\"GH_GAME_RESULTS\": \"Spelresultaten\",\n\t\t\"GH_INITIAL_SPIN\": \"Eerste ronde\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpotprijs\",\n\t\t\"GH_SYMBOL_WINS\": \"Symboolwinst\",\n\t\t\"GH_LINE\": \"Lijn\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Winst uit gratis rondes\",\n\t\t\"GH_FREE_SPIN\": \"Gratis ronde\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Winst respins\",\n\t\t\"GH_NUDGE\": \"Zetje\",\n\t\t\"GH_NUDGE_WINS\": \"Winst na een zetje\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Vermenigvuldigerprijzen\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier-prijs\",\n\t\t\"GH_BONUS_WIN\": \"Bonusprijs\",\n\t\t\"GH_INSTANT_WIN\": \"Directe prijs\",\n\t\t\"GH_NO_HISTORY\": \"Geen geschiedenis beschikbaar\",\n\t\t\"GH_GAMBLE_WINS\": \"Gokwinst\",\n\t\t\"GH_NO_WINS\": \"Geen prijzen\",\n\t\t\"GH_ROUND_CORRECTION\": \"Afrondingscorrectie\",\n\t\t\"GH_LIMITED_WIN\": \"Winst (max. limiet)\",\n\t\t\"WIN_EXCHANGE\": \"Prijs gratis spins\",\n\t\t\"HALF_COLLECT\": \"Helft van winst geïnd\",\n\t\t\"FULL_COLLECT\": \"Volledige winst geïnd\",\n\n\t\t\"GH_TABLE_ID\": \"Tafel-ID\",\n\t\t\"GH_PLAYER\": \"Speler\",\n\t\t\"GH_BANKER\": \"Bankier\",\n\t\t\"GH_TIE\": \"Gelijkspel\",\n\t\t\"GH_PLAYER_PAIR\": \"Speler Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Bankier Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winnaar\",\n\t\t\"GH_GAME_WINSUM\": \"Som\",\n\t\t\"GH_GAME_TOTAL\": \"Totaal\",\n\t\t\"GH_GAME_STAKE\": \"Inzet\",\n\n\t\t\"GH_SPIN_TITLE\": \"DRAAIEN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratis ronde\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINS\",\n\n\t\t\"GH_BALL_POSITION\": \"Positie van de bal:\",\n\t\t\"GH_TRIO\": \"Totaal trio\",\n\t\t\"GH_SPLIT\": \"Totaal split\",\n\t\t\"GH_STREET\": \"Totaal straat\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Totaal hoek\",\n\t\t\"GH_SIX_LINE\": \"Totaal zes lijnen\",\n\t\t\"GH_COLUMN\": \"Totaal kolom\",\n\t\t\"GH_FIRST_COLUMN\": \"1e kolom\",\n\t\t\"GH_SECOND_COLUMN\": \"2e kolom\",\n\t\t\"GH_THIRD_COLUMN\": \"3e kolom\",\n\t\t\"GH_DOZEN\": \"Totaal dozijn\",\n\t\t\"GH_FIRST_DOZEN\": \"1e 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2e 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3e 12\",\n\t\t\"GH_STRAIGHT\": \"Totaal enkel nummer\",\n\t\t\"GH_COLOR\": \"Totaal kleur\",\n\t\t\"GH_BLACK\": \"Zwart\",\n\t\t\"GH_RED\": \"Rood\",\n\t\t\"GH_EVEN_ODD\": \"Totaal even/oneven\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Oneven\",\n\t\t\"GH_SMALL_BIG\": \"Totaal laag/hoog\",\n\t\t\"GH_SMALL\": \"Laag\",\n\t\t\"GH_BIG\": \"Hoog\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Voor deze ronde was het voorproefje actief. Alle winsten en inzetten zijn in demogeld.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratis rondes waren actief gedurende deze ronde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match met je nummers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"7 in totaal\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbolen\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 bedragen\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATIS KAART\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tno: {\n\t\t\"TOTAL_COINS_WIN\": \"Totale myntgevinster\",\n\t\t\"GH_HISTORY\": \"Historikk\",\n\t\t\"GH_GAME_DETAILS\": \"Spillopplysninger\",\n\t\t\"GH_GAME_ID\": \"Spill-ID\",\n\t\t\"GH_ROUND_ID\": \"Runde-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid – start\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid – slutt\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vinnerveier\",\n\t\t\"GH_LENGTH\": \"Lengde på symbolgevinst\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vinnerveier\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klynge\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbolteller\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksjoner\",\n\t\t\"GH_TOTAL_STAKE\": \"Totalinnsats\",\n\t\t\"GH_TOTAL_BET\": \"Totalinnsats\",\n\t\t\"GH_TOTAL_WIN\": \"Total gevinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"før innsats\",\n\t\t\"GH_AFTER_STAKE\": \"etter innsats\",\n\t\t\"GH_AT_END\": \"etter runde\",\n\t\t\"GH_BALANCE\": \"Hovedsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Øktsaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Øktbonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Gevinstopplysninger\",\n\t\t\"GH_SPIN_DETAILS\": \"Spinn-detaljer\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ytterligere detaljer\",\n\t\t\"GH_GAME_RESULTS\": \"Spillresultater\",\n\t\t\"GH_INITIAL_SPIN\": \"Innledende spinn\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpotgevinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolgevinster\",\n\t\t\"GH_LINE\": \"Linje\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratisspinn-gevinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratisspinn\",\n\t\t\"GH_RESPIN\": \"Respinn\",\n\t\t\"GH_RESPIN_WINS\": \"Respinn-gevinster\",\n\t\t\"GH_NUDGE\": \"Dytt\",\n\t\t\"GH_NUDGE_WINS\": \"Dyttgevinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikatorgevinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Justert gevinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusgevinst\",\n\t\t\"GH_INSTANT_WIN\": \"Umiddelbar gevinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historikk tilgjengelig\",\n\t\t\"GH_GAMBLE_WINS\": \"Veddegevinster\",\n\t\t\"GH_NO_WINS\": \"Ingen gevinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Avrundingskorrigering\",\n\t\t\"GH_LIMITED_WIN\": \"Gevinst (maksgrense)\",\n\t\t\"WIN_EXCHANGE\": \"Gratisspinn pris\",\n\t\t\"HALF_COLLECT\": \"Halvgevinst samlet\",\n\t\t\"FULL_COLLECT\": \"Fullgevinst samlet\",\n\n\t\t\"GH_TABLE_ID\": \"Bord-ID\",\n\t\t\"GH_PLAYER\": \"Spiller\",\n\t\t\"GH_BANKER\": \"Banken\",\n\t\t\"GH_TIE\": \"Uavgjort\",\n\t\t\"GH_PLAYER_PAIR\": \"Spiller par\",\n\t\t\"GH_BANKER_PAIR\": \"Banken par\",\n\t\t\"GH_GAME_WINNER\": \"Vinner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Totalt\",\n\t\t\"GH_GAME_STAKE\": \"Innsats\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPINN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratisspinn\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINN\",\n\n\t\t\"GH_BALL_POSITION\": \"Ballposisjon:\",\n\t\t\"GH_TRIO\": \"Trio totalt\",\n\t\t\"GH_SPLIT\": \"Splitt totalt\",\n\t\t\"GH_STREET\": \"Street totalt\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hjørne totalt\",\n\t\t\"GH_SIX_LINE\": \"Linje av seks totalt\",\n\t\t\"GH_COLUMN\": \"Kolonne totalt\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolonne\",\n\t\t\"GH_DOZEN\": \"Dusin totalt\",\n\t\t\"GH_FIRST_DOZEN\": \"Første dusin\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Direkte totalt\",\n\t\t\"GH_COLOR\": \"Farge totalt\",\n\t\t\"GH_BLACK\": \"Svart\",\n\t\t\"GH_RED\": \"Rød\",\n\t\t\"GH_EVEN_ODD\": \"Par/Odde totalt\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Odde\",\n\t\t\"GH_SMALL_BIG\": \"Liten/Stor totalt\",\n\t\t\"GH_SMALL\": \"Liten\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sniktitt var aktiv denne runden. Alle gevinster og spill er demopenger.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratisrunder var aktive for denne runden.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match med tallene dine\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Sum av 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symboler\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 beløp\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLODD\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tpl: {\n\t\t\"TOTAL_COINS_WIN\": \"Całkowita liczba wygranych monet\",\n\t\t\"GH_HISTORY\": \"Historia\",\n\t\t\"GH_GAME_DETAILS\": \"Szczegóły gry\",\n\t\t\"GH_GAME_ID\": \"ID gry\",\n\t\t\"GH_ROUND_ID\": \"ID rundy\",\n\t\t\"GH_SERVER_TIME_START\": \"Czas rozpoczęcia serwera\",\n\t\t\"GH_SERVER_TIME_END\": \"Czas zakończenia serwera\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Wariacje wygranych\",\n\t\t\"GH_LENGTH\": \"Długość wygranej symbolu\",\n\t\t\"GH_MULTIPLIER\": \"Mnożnik\",\n\t\t\"GH_WIN_WAYS\": \"Wariacje wygranych\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Klaster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Liczba Symboli\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcje\",\n\t\t\"GH_TOTAL_STAKE\": \"Łączna Stawka\",\n\t\t\"GH_TOTAL_BET\": \"Łączna Stawka\",\n\t\t\"GH_TOTAL_WIN\": \"Łączna wygrana\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"przed postawieniem stawki\",\n\t\t\"GH_AFTER_STAKE\": \"po postawieniu stawki\",\n\t\t\"GH_AT_END\": \"końcowe\",\n\t\t\"GH_BALANCE\": \"Saldo główne\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo bonusowe\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesji\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo bonusowe sesji\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Szczegóły wygranej\",\n\t\t\"GH_SPIN_DETAILS\": \"Szczegóły obrotu\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informacje dodatkowe\",\n\t\t\"GH_GAME_RESULTS\": \"Wyniki gry\",\n\t\t\"GH_INITIAL_SPIN\": \"Obrót początkowy\",\n\t\t\"GH_JACKPOT_WIN\": \"Wygrana jackpota\",\n\t\t\"GH_SYMBOL_WINS\": \"Wygrane Symbolów\",\n\t\t\"GH_LINE\": \"Linia\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Wygrane z darmowych obrotów\",\n\t\t\"GH_FREE_SPIN\": \"Darmowy obrót\",\n\t\t\"GH_RESPIN\": \"Obrót ponowny\",\n\t\t\"GH_RESPIN_WINS\": \"Wygrane obrotu ponownego\",\n\t\t\"GH_NUDGE\": \"Przesunięcie\",\n\t\t\"GH_NUDGE_WINS\": \"Wygrane z przesunięcia\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Wygrane mnożnika\",\n\t\t\"GH_MODIFIER_WIN\": \"Modyfikator wygranej\",\n\t\t\"GH_BONUS_WIN\": \"Wygrana bonusowa\",\n\t\t\"GH_INSTANT_WIN\": \"Błyskawiczna wygrana\",\n\t\t\"GH_NO_HISTORY\": \"Historia jest niedostępna\",\n\t\t\"GH_GAMBLE_WINS\": \"Wygrane z funkcji ryzyko\",\n\t\t\"GH_NO_WINS\": \"Brak wygranych\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekta zaokrąglająca\",\n\t\t\"GH_LIMITED_WIN\": \"Wygrana (maks. Limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena za Darmowe Obroty\",\n\t\t\"HALF_COLLECT\": \"Odebrano połowę wygranej\",\n\t\t\"FULL_COLLECT\": \"Odebrano całą wygraną\",\n\n\t\t\"GH_TABLE_ID\": \"ID stołu\",\n\t\t\"GH_PLAYER\": \"Gracz\",\n\t\t\"GH_BANKER\": \"Bankier\",\n\t\t\"GH_TIE\": \"Remis\",\n\t\t\"GH_PLAYER_PAIR\": \"Para gracza\",\n\t\t\"GH_BANKER_PAIR\": \"Para bankiera\",\n\t\t\"GH_GAME_WINNER\": \"Zwycięzca\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Łącznie\",\n\t\t\"GH_GAME_STAKE\": \"Stawka\",\n\n\t\t\"GH_SPIN_TITLE\": \"OBRÓT\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Darmowy obrót\",\n\t\t\"GH_RESPINS_TITLE\": \"Obroty ponowne\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozycja kulki:\",\n\t\t\"GH_TRIO\": \"Trio łącznie\",\n\t\t\"GH_SPLIT\": \"Split łącznie\",\n\t\t\"GH_STREET\": \"Street łącznie\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Narożnik łącznie\",\n\t\t\"GH_SIX_LINE\": \"Sześć linii łącznie\",\n\t\t\"GH_COLUMN\": \"Suma kolumny\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolumna\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolumna\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolumna\",\n\t\t\"GH_DOZEN\": \"Tuzin łącznie\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2. 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3. 12\",\n\t\t\"GH_STRAIGHT\": \"Zakład prosty łącznie\",\n\t\t\"GH_COLOR\": \"Kolor łącznie\",\n\t\t\"GH_BLACK\": \"Czarne\",\n\t\t\"GH_RED\": \"Czerwone\",\n\t\t\"GH_EVEN_ODD\": \"Parzyste/Nieparzyste łącznie\",\n\t\t\"GH_EVEN\": \"Parzyste\",\n\t\t\"GH_ODD\": \"Nieparzyste\",\n\t\t\"GH_SMALL_BIG\": \"Niskie/Wysokie łącznie\",\n\t\t\"GH_SMALL\": \"Niskie\",\n\t\t\"GH_BIG\": \"Wysokie\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Ta runda została rozegrana w trybie demo. Wszystkie zakłady oraz wygrane mają wartość wirtualną.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"W tej rundzie aktywna była funkcja darmowych rund.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Dopasuj swoje numery\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Suma równa 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Dopasuj 3 symbole\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Dopasuj 3 kwoty\",\n\t\t\"SCRATCH_FREE_CARD\": \"DARMOWA KARTA\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'pt-BR': {\n\t\t\"TOTAL_COINS_WIN\": \"Total de moedas ganhas\",\n\t\t\"GH_HISTORY\": \"Histórico\",\n\t\t\"GH_GAME_DETAILS\": \"Detalhes de Jogo\",\n\t\t\"GH_GAME_ID\": \"ID de jogo\",\n\t\t\"GH_ROUND_ID\": \"Id de Ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Hora de Início de Servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Hora de Fim de Servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganhar\",\n\t\t\"GH_LENGTH\": \"Comprimento da Combinação Ganhadora\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganhar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Quantidade de Símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transações\",\n\t\t\"GH_TOTAL_STAKE\": \"Aposta Total\",\n\t\t\"GH_TOTAL_BET\": \"Aposta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Prémio Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"antes da aposta\",\n\t\t\"GH_AFTER_STAKE\": \"depois da aposta\",\n\t\t\"GH_AT_END\": \"resultado\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bónus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo da sessão\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bónus da sessão\",\n\t\t\"GH_BONUS\": \"Bónus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalhes de Prémio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalhes da Partida\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalhes adicionais\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados do jogo\",\n\t\t\"GH_INITIAL_SPIN\": \"Partida Inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Prémio de Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Prêmios dos Símbolos\",\n\t\t\"GH_LINE\": \"Linha\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Prémios de Rodadas Grátis\",\n\t\t\"GH_FREE_SPIN\": \"Rodada Grátis\",\n\t\t\"GH_RESPIN\": \"Giro Extra\",\n\t\t\"GH_RESPIN_WINS\": \"Prêmios de Giro Extra\",\n\t\t\"GH_NUDGE\": \"Empurrão\",\n\t\t\"GH_NUDGE_WINS\": \"Prêmios do empurrão\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Prémios de Multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Prémio Modificador\",\n\t\t\"GH_BONUS_WIN\": \"Prémio de Bónus\",\n\t\t\"GH_INSTANT_WIN\": \"Prémio Instantâneo\",\n\t\t\"GH_NO_HISTORY\": \"Sem histórico disponível\",\n\t\t\"GH_GAMBLE_WINS\": \"Prémios de Aposta\",\n\t\t\"GH_NO_WINS\": \"Sem prémios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Correção de arredondamento\",\n\t\t\"GH_LIMITED_WIN\": \"Ganho (limite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Preço dos giros grátis\",\n\t\t\"HALF_COLLECT\": \"Metade do prêmio coletado\",\n\t\t\"FULL_COLLECT\": \"Prêmio coletado por inteiro\",\n\n\t\t\"GH_TABLE_ID\": \"ID de Mesa\",\n\t\t\"GH_PLAYER\": \"Jogador\",\n\t\t\"GH_BANKER\": \"Banka\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par do Jogador\",\n\t\t\"GH_BANKER_PAIR\": \"Par da Banca\",\n\t\t\"GH_GAME_WINNER\": \"Vencedor\",\n\t\t\"GH_GAME_WINSUM\": \"Soma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Aposta\",\n\n\t\t\"GH_SPIN_TITLE\": \"RODAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rodada Grátis\",\n\t\t\"GH_RESPINS_TITLE\": \"GIROS EXTRAS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posição da Bola:\",\n\t\t\"GH_TRIO\": \"Total de Trio\",\n\t\t\"GH_SPLIT\": \"Total de Dividida\",\n\t\t\"GH_STREET\": \"Total de Rua\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de Canto\",\n\t\t\"GH_SIX_LINE\": \"Total de Linha de Seis\",\n\t\t\"GH_COLUMN\": \"Total de Coluna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Coluna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Coluna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Coluna\",\n\t\t\"GH_DOZEN\": \"Total de Dúzia\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de Direta\",\n\t\t\"GH_COLOR\": \"Total de Cor\",\n\t\t\"GH_BLACK\": \"Preto\",\n\t\t\"GH_RED\": \"Vermelho\",\n\t\t\"GH_EVEN_ODD\": \"Total de Par/Ímpar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Ímpar\",\n\t\t\"GH_SMALL_BIG\": \"Total de Baixo/Alto\",\n\t\t\"GH_SMALL\": \"Baixo\",\n\t\t\"GH_BIG\": \"Alto\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Olhadela estava ativa para esta rodada. Todos os prêmios e apostas são dinheiro de demonstração.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"O recurso de rodadas grátis estava ativo nesta rodada.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Corresponda com os seus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Soma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Corresponda 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Corresponda 3 quantias\",\n\t\t\"SCRATCH_FREE_CARD\": \"CARTELA GRÁTIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tru: {\n\t\t\"TOTAL_COINS_WIN\": \"Всего выиграно монет\",\n\t\t\"GH_HISTORY\": \"Результаты\",\n\t\t\"GH_GAME_DETAILS\": \"Информация по игре\",\n\t\t\"GH_GAME_ID\": \"ID игры\",\n\t\t\"GH_ROUND_ID\": \"ID кона\",\n\t\t\"GH_SERVER_TIME_START\": \"Начало серверного времени\",\n\t\t\"GH_SERVER_TIME_END\": \"Завершение серверного времени\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Выигрышные комбинации\",\n\t\t\"GH_LENGTH\": \"Длина выигрышной комбинации из символов\",\n\t\t\"GH_MULTIPLIER\": \"Множитель\",\n\t\t\"GH_WIN_WAYS\": \"Выигрышные комбинации\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Кластер\",\n\t\t\"GH_CLUSTER_COUNT\": \"Количество Символов\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Транзакции\",\n\t\t\"GH_TOTAL_STAKE\": \"Суммарная Ставка\",\n\t\t\"GH_TOTAL_BET\": \"Сум. Ставка\",\n\t\t\"GH_TOTAL_WIN\": \"Суммарный выигрыш\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"перед ставкой\",\n\t\t\"GH_AFTER_STAKE\": \"после ставки\",\n\t\t\"GH_AT_END\": \"в конечном счете\",\n\t\t\"GH_BALANCE\": \"Основной баланс\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Бонусный баланс\",\n\t\t\"GH_SESSION_BALANCE\": \"Баланс сессии\",\n\t\t\"GH_SESSION_FREEBETS\": \"Бонусный баланс сессии\",\n\t\t\"GH_BONUS\": \"Бонус\",\n\n\t\t\"GH_WIN_DETAILS\": \"Информация по выигрышу\",\n\t\t\"GH_SPIN_DETAILS\": \"Статистика вращения\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Дополнительные сведения\",\n\t\t\"GH_GAME_RESULTS\": \"Результаты Игры\",\n\t\t\"GH_INITIAL_SPIN\": \"Первое вращение\",\n\t\t\"GH_JACKPOT_WIN\": \"Выигрыш джекпота!\",\n\t\t\"GH_SYMBOL_WINS\": \"Выигрыши за Символ\",\n\t\t\"GH_LINE\": \"Линия\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Выигрыши за бесплатные спины\",\n\t\t\"GH_FREE_SPIN\": \"Бесплатный спин\",\n\t\t\"GH_RESPIN\": \"Повторное вращение\",\n\t\t\"GH_RESPIN_WINS\": \"Выигрыши на повторных вращениях\",\n\t\t\"GH_NUDGE\": \"Сдвиг\",\n\t\t\"GH_NUDGE_WINS\": \"Выигрыши со сдвигом\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Выигрыши множителя\",\n\t\t\"GH_MODIFIER_WIN\": \"Выигрыш модификатора\",\n\t\t\"GH_BONUS_WIN\": \"Выигрыш бонуса\",\n\t\t\"GH_INSTANT_WIN\": \"Мгновенный выигрыш\",\n\t\t\"GH_NO_HISTORY\": \"Предыдущие результаты недоступны\",\n\t\t\"GH_GAMBLE_WINS\": \"Выигрыши за рискованную игру\",\n\t\t\"GH_NO_WINS\": \"Нет выигрышей\",\n\t\t\"GH_ROUND_CORRECTION\": \"Коррекция с округлением\",\n\t\t\"GH_LIMITED_WIN\": \"Выигрыш (максимальный лимит)\",\n\t\t\"WIN_EXCHANGE\": \"Стоимость бесплатных вращений\",\n\t\t\"HALF_COLLECT\": \"Вы забрали половину выигрыша\",\n\t\t\"FULL_COLLECT\": \"Вы забрали весь выигрыш\",\n\n\t\t\"GH_TABLE_ID\": \"ID стола\",\n\t\t\"GH_PLAYER\": \"ИГРОК\",\n\t\t\"GH_BANKER\": \"БАНКИР\",\n\t\t\"GH_TIE\": \"Ничья\",\n\t\t\"GH_PLAYER_PAIR\": \"Пара Игрока\",\n\t\t\"GH_BANKER_PAIR\": \"Пара Банкира\",\n\t\t\"GH_GAME_WINNER\": \"Победитель\",\n\t\t\"GH_GAME_WINSUM\": \"Сумма\",\n\t\t\"GH_GAME_TOTAL\": \"Всего\",\n\t\t\"GH_GAME_STAKE\": \"Ставка\",\n\n\t\t\"GH_SPIN_TITLE\": \"СПИН\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Бесплатный спин\",\n\t\t\"GH_RESPINS_TITLE\": \"Повторные вращения\",\n\n\t\t\"GH_BALL_POSITION\": \"Позиция шарика:\",\n\t\t\"GH_TRIO\": \"Трио, всего\",\n\t\t\"GH_SPLIT\": \"Сплит, всего\",\n\t\t\"GH_STREET\": \"Стрит, всего\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Угол, всего\",\n\t\t\"GH_SIX_LINE\": \"Линия из шести, всего\",\n\t\t\"GH_COLUMN\": \"Колонка, всего\",\n\t\t\"GH_FIRST_COLUMN\": \"1-я колонка\",\n\t\t\"GH_SECOND_COLUMN\": \"2-я колонка\",\n\t\t\"GH_THIRD_COLUMN\": \"33-я колонка\",\n\t\t\"GH_DOZEN\": \"Дюжина, всего\",\n\t\t\"GH_FIRST_DOZEN\": \"1-е 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2-е 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3-е 12\",\n\t\t\"GH_STRAIGHT\": \"Ставка на одно число, всего\",\n\t\t\"GH_COLOR\": \"Цвет, всего\",\n\t\t\"GH_BLACK\": \"Черное\",\n\t\t\"GH_RED\": \"Красное\",\n\t\t\"GH_EVEN_ODD\": \"Чет/Нечет, всего\",\n\t\t\"GH_EVEN\": \"Чет\",\n\t\t\"GH_ODD\": \"Нечет\",\n\t\t\"GH_SMALL_BIG\": \"Маленькое/Большое число, всего\",\n\t\t\"GH_SMALL\": \"Маленькое\",\n\t\t\"GH_BIG\": \"Большое\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"В этом раунде была активирована демоверсия. Все выигрыши и ставки указаны в демоденьгах.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"В этом раунде действовала функция Бесплатных Раундов.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Откройте совпадающие числа\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"В сумме 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Откройте 3 одинаковых символа\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Откройте 3 одинаковые суммы\",\n\t\t\"SCRATCH_FREE_CARD\": \"БЕСПЛАТНАЯ КАРТА\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsv: {\n\t\t\"TOTAL_COINS_WIN\": \"Totala myntvinster\",\n\t\t\"GH_HISTORY\": \"Historik\",\n\t\t\"GH_GAME_DETAILS\": \"Spelinformation\",\n\t\t\"GH_GAME_ID\": \"Spel-ID\",\n\t\t\"GH_ROUND_ID\": \"Omgångs-ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servertid startade\",\n\t\t\"GH_SERVER_TIME_END\": \"Servertid slutade\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Vinstsätt\",\n\t\t\"GH_LENGTH\": \"Symbolvinstlängd\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Vinstsätt\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Antal symboler\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Händer\",\n\t\t\"GH_SIDE_BETS\": \"Sidospel\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Splitt)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Splitt)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Splitt)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Försäkring)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Försäkring)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Försäkring)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Insats\",\n\t\t\"INSURANCE\": 'FÖRSÄKRING',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaktioner\",\n\t\t\"GH_TOTAL_STAKE\": \"Totalinsats\",\n\t\t\"GH_TOTAL_BET\": \"Totalinsats\",\n\t\t\"GH_TOTAL_WIN\": \"Totalvinst\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"innan satsning\",\n\t\t\"GH_AFTER_STAKE\": \"efter satsning\",\n\t\t\"GH_AT_END\": \"i slutet\",\n\t\t\"GH_BALANCE\": \"Huvudsaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessionsaldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sessionbonussaldo\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Vinstinformation\",\n\t\t\"GH_SPIN_DETAILS\": \"Snurrinformation\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ytterligare detaljer\",\n\t\t\"GH_GAME_RESULTS\": \"Spelresultat\",\n\t\t\"GH_INITIAL_SPIN\": \"Första snurret\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpottvinst\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbolvinster\",\n\t\t\"GH_LINE\": \"Rad\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gratissnurr-vinster\",\n\t\t\"GH_FREE_SPIN\": \"Gratissnurr\",\n\t\t\"GH_RESPIN\": \"Omsnurr\",\n\t\t\"GH_RESPIN_WINS\": \"Omsnurrsvinster\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge-vinster\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplikator-vinster\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatorvinst\",\n\t\t\"GH_BONUS_WIN\": \"Bonusvinst\",\n\t\t\"GH_INSTANT_WIN\": \"Direktvinst\",\n\t\t\"GH_NO_HISTORY\": \"Ingen historik tillgänglig\",\n\t\t\"GH_GAMBLE_WINS\": \"Riskspel-vinster\",\n\t\t\"GH_NO_WINS\": \"Inga vinster\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korrigering efter avrundning\",\n\t\t\"GH_LIMITED_WIN\": \"Vinst (maxgräns)\",\n\t\t\"WIN_EXCHANGE\": \"Pris för free spins\",\n\t\t\"HALF_COLLECT\": \"Halv vinst samlad\",\n\t\t\"FULL_COLLECT\": \"Full vinst samlad\",\n\n\t\t\"GH_TABLE_ID\": \"Bords-ID\",\n\t\t\"GH_PLAYER\": \"Spelare\",\n\t\t\"GH_BANKER\": \"Dealer\",\n\t\t\"GH_TIE\": \"Lika\",\n\t\t\"GH_PLAYER_PAIR\": \"Spelarpar\",\n\t\t\"GH_BANKER_PAIR\": \"Dealerpar\",\n\t\t\"GH_GAME_WINNER\": \"Vinnare\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Totalt\",\n\t\t\"GH_GAME_STAKE\": \"Insats\",\n\n\t\t\"GH_SPIN_TITLE\": \"SNURRA\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Gratissnurr\",\n\t\t\"GH_RESPINS_TITLE\": \"OMSNURR\",\n\n\t\t\"GH_BALL_POSITION\": \"Kulposition:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Splitt\",\n\t\t\"GH_STREET\": \"Gata\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Hörn\",\n\t\t\"GH_SIX_LINE\": \"Sexrad\",\n\t\t\"GH_COLUMN\": \"Kolumn\",\n\t\t\"GH_FIRST_COLUMN\": \"1:a kolumnen\",\n\t\t\"GH_SECOND_COLUMN\": \"2:a kolumnen\",\n\t\t\"GH_THIRD_COLUMN\": \"3:e kolumnen\",\n\t\t\"GH_DOZEN\": \"Dussin\",\n\t\t\"GH_FIRST_DOZEN\": \"1:a 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2:a 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3:a 12\",\n\t\t\"GH_STRAIGHT\": \"Enkelnummer\",\n\t\t\"GH_COLOR\": \"Färg\",\n\t\t\"GH_BLACK\": \"Svart\",\n\t\t\"GH_RED\": \"Rött\",\n\t\t\"GH_EVEN_ODD\": \"Jämnt/udda\",\n\t\t\"GH_EVEN\": \"Jämnt\",\n\t\t\"GH_ODD\": \"Udda\",\n\t\t\"GH_SMALL_BIG\": \"Liten/stor\",\n\t\t\"GH_SMALL\": \"Liten\",\n\t\t\"GH_BIG\": \"Stor\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Dubbla ner\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Erbjudande accepterat\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Tjuvkik var aktiverat för denna runda. Alla vinster och insatser är demopengar.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Gratisrundor var aktiverade i den här rundan.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Matcha med dina nummer\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Summa på 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Matcha 3 symboler\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Matcha 3 belopp\",\n\t\t\"SCRATCH_FREE_CARD\": \"GRATISLOTT\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\ttr: {\n\t\t\"TOTAL_COINS_WIN\": \"Toplam jeton kazancı\",\n\t\t\"GH_HISTORY\": \"Geçmiş\",\n\t\t\"GH_GAME_DETAILS\": \"Oyun Ayrıntıları\",\n\t\t\"GH_GAME_ID\": \"Oyun ID\",\n\t\t\"GH_ROUND_ID\": \"Tur ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Sunucu Başlangıç Saati\",\n\t\t\"GH_SERVER_TIME_END\": \"Sunucu Bitiş Saati\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Kazanç yönleri\",\n\t\t\"GH_LENGTH\": \"Sembol Kazanç Uzunluğu\",\n\t\t\"GH_MULTIPLIER\": \"Çarpan\",\n\t\t\"GH_WIN_WAYS\": \"Kazanç yönleri\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Küme\",\n\t\t\"GH_CLUSTER_COUNT\": \"Sembol Sayısı\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"El\",\n\t\t\"GH_SIDE_BETS\": \"Yan Bahisler\",\n\n\t\t\"HAND_0\": \"El [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"El [1] (Bölünmüş)\",\n\t\t\"HAND_1\": \"El [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"El [2] (Bölünmüş)\",\n\t\t\"HAND_2\": \"El [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"El [3] (Bölünmüş)\",\n\t\t\"INSURANCE_HAND_0\": \"El [1] (Sigorta)\",\n\t\t\"INSURANCE_HAND_1\": \"El [2] (Sigorta)\",\n\t\t\"INSURANCE_HAND_2\": \"El [3] (Sigorta)\",\n\t\t\"DEALER\": \"Krupi̇ye\",\n\n\t\t\"STAKE\": \"Bahis\",\n\t\t\"INSURANCE\": 'Si̇gorta',\n\n\t\t\"GH_TRANSACTIONS\": \"İşlemler\",\n\t\t\"GH_TOTAL_STAKE\": \"Toplam Bahis Tutari\",\n\t\t\"GH_TOTAL_BET\": \"Toplam Bahis\",\n\t\t\"GH_TOTAL_WIN\": \"Toplam Kazanç\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"bahisten önce\",\n\t\t\"GH_AFTER_STAKE\": \"bahisten sonra\",\n\t\t\"GH_AT_END\": \"en sonunda\",\n\t\t\"GH_BALANCE\": \"Ana bakiye\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus bakiyesi\",\n\t\t\"GH_SESSION_BALANCE\": \"Oturum bakiyesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Oturum bonus bakiyesi\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Kazanç Ayrıntıları\",\n\t\t\"GH_SPIN_DETAILS\": \"Döndürme Ayrıntıları\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Ek Detaylar\",\n\t\t\"GH_GAME_RESULTS\": \"Oyun Sonuçları\",\n\t\t\"GH_INITIAL_SPIN\": \"İlk Döndürme\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot Kazancı\",\n\t\t\"GH_SYMBOL_WINS\": \"Sembol Kazançlari\",\n\t\t\"GH_LINE\": \"Satır\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ücretsiz Döndürme Kazançları\",\n\t\t\"GH_FREE_SPIN\": \"Ücretsiz Döndürme\",\n\t\t\"GH_RESPIN\": \"Yeniden Döndürme\",\n\t\t\"GH_RESPIN_WINS\": \"Yeniden Döndürme Kazançları\",\n\t\t\"GH_NUDGE\": \"Sarsma\",\n\t\t\"GH_NUDGE_WINS\": \"Sarsma Kazançları\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Çarpan Kazançları\",\n\t\t\"GH_MODIFIER_WIN\": \"Çarpan Kazancı\",\n\t\t\"GH_BONUS_WIN\": \"Bonus kazancı\",\n\t\t\"GH_INSTANT_WIN\": \"Anlık Kazanç\",\n\t\t\"GH_NO_HISTORY\": \"Geçmiş bilgisi yok\",\n\t\t\"GH_GAMBLE_WINS\": \"Kumar kazançları\",\n\t\t\"GH_NO_WINS\": \"Kazanç yok\",\n\t\t\"GH_ROUND_CORRECTION\": \"Yuvarlama düzeltmesi\",\n\t\t\"GH_LIMITED_WIN\": \"Kazanç (maks. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Ücretsiz çevirme fiyatı\",\n\t\t\"HALF_COLLECT\": \"Kazancın yarısı toplandı\",\n\t\t\"FULL_COLLECT\": \"Kazancın tamamı toplandı\",\n\n\t\t\"GH_TABLE_ID\": \"Masa ID\",\n\t\t\"GH_PLAYER\": \"Oyuncu\",\n\t\t\"GH_BANKER\": \"Kasa\",\n\t\t\"GH_TIE\": \"Lika\",\n\t\t\"GH_PLAYER_PAIR\": \"Oyuncu Çifti\",\n\t\t\"GH_BANKER_PAIR\": \"Kasa Çifti\",\n\t\t\"GH_GAME_WINNER\": \"Kazanan\",\n\t\t\"GH_GAME_WINSUM\": \"Genel Toplam\",\n\t\t\"GH_GAME_TOTAL\": \"Toplam\",\n\t\t\"GH_GAME_STAKE\": \"Bahis\",\n\n\t\t\"GH_SPIN_TITLE\": \"DÖNDÜR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Ücretsiz Döndürme\",\n\t\t\"GH_RESPINS_TITLE\": \"YENİDEN DÖNDÜRMELER\",\n\n\t\t\"GH_BALL_POSITION\": \"Top Konumu:\",\n\t\t\"GH_TRIO\": \"Üçlü Toplamı\",\n\t\t\"GH_SPLIT\": \"Bölünmüş Toplamı\",\n\t\t\"GH_STREET\": \"Sokak Toplamı\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Köşe Toplamı\",\n\t\t\"GH_SIX_LINE\": \"Altılı Satır Toplamı\",\n\t\t\"GH_COLUMN\": \"Sütun Toplamı\",\n\t\t\"GH_FIRST_COLUMN\": \"1. Sütun\",\n\t\t\"GH_SECOND_COLUMN\": \"2. Sütun\",\n\t\t\"GH_THIRD_COLUMN\": \"3. Sütun\",\n\t\t\"GH_DOZEN\": \"Düzine Toplamı\",\n\t\t\"GH_FIRST_DOZEN\": \"İlk 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2\",\n\t\t\"GH_THIRD_DOZEN\": \"3\",\n\t\t\"GH_STRAIGHT\": \"Doğrudan Toplamı\",\n\t\t\"GH_COLOR\": \"Renk Toplamı\",\n\t\t\"GH_BLACK\": \"Siyah\",\n\t\t\"GH_RED\": \"Kırmızı\",\n\t\t\"GH_EVEN_ODD\": \"Çift/Tek Toplamı\",\n\t\t\"GH_EVEN\": \"Çift\",\n\t\t\"GH_ODD\": \"Tek\",\n\t\t\"GH_SMALL_BIG\": \"Küçük/Büyük Toplamı\",\n\t\t\"GH_SMALL\": \"Küçük\",\n\t\t\"GH_BIG\": \"Büyük\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek bu raunt için aktifti. Tüm kazançlar ve bahisler demo parasıdır.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Bu raunt için ücretsiz rauntlar aktifti.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Sayılarıyla eşleştir\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Toplam 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"3 sembolü eşleştir\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"3 tutari eşleştir\",\n\t\t\"SCRATCH_FREE_CARD\": \"ÜCRETSİZ KART\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tcs: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historie\",\n\t\t\"GH_GAME_DETAILS\": \"Herní údaje\",\n\t\t\"GH_GAME_ID\": \"Číslo hry\",\n\t\t\"GH_ROUND_ID\": \"Číslo kola\",\n\t\t\"GH_SERVER_TIME_START\": \"Čas zahájení na serveru\",\n\t\t\"GH_SERVER_TIME_END\": \"Čas ukončení na serveru\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"výherních tras\",\n\t\t\"GH_LENGTH\": \"Délka výherních symbolů\",\n\t\t\"GH_MULTIPLIER\": \"Násobitel\",\n\t\t\"GH_WIN_WAYS\": \"Výherní trasy\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Shluk\",\n\t\t\"GH_CLUSTER_COUNT\": \"Počet symbolů\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transakce\",\n\t\t\"GH_TOTAL_STAKE\": \"Celkový Vklad\",\n\t\t\"GH_TOTAL_BET\": \"Cel. Vklad\",\n\t\t\"GH_TOTAL_WIN\": \"Celková výhra\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"před sázkou\",\n\t\t\"GH_AFTER_STAKE\": \"po sázce\",\n\t\t\"GH_AT_END\": \"na konci kola\",\n\t\t\"GH_BALANCE\": \"Zůstatek hlavního účtu\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Zůstatek bonusu\",\n\t\t\"GH_SESSION_BALANCE\": \"Zůstatek účtu v relaci\",\n\t\t\"GH_SESSION_FREEBETS\": \"Zůstatek bonusu v relaci\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti výhry\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti roztočení\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Další údaje\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Počáteční roztočení\",\n\t\t\"GH_JACKPOT_WIN\": \"Výhra jackpotu\",\n\t\t\"GH_SYMBOL_WINS\": \"Výhry ze symbolů\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Výhra roztočení zdarma\",\n\t\t\"GH_FREE_SPIN\": \"Roztočení zdarma\",\n\t\t\"GH_RESPIN\": \"Opakované roztočení\",\n\t\t\"GH_RESPIN_WINS\": \"Výhry z opakovaných roztočení\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Výhra násobitele\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikátor výhry\",\n\t\t\"GH_BONUS_WIN\": \"Bonusová výhra\",\n\t\t\"GH_INSTANT_WIN\": \"Okamžitá výhra\",\n\t\t\"GH_NO_HISTORY\": \"Žádné záznamy k dispozici\",\n\t\t\"GH_GAMBLE_WINS\": \"Výhra z rizika\",\n\t\t\"GH_NO_WINS\": \"Bez výhry\",\n\t\t\"GH_ROUND_CORRECTION\": \"Opravné zaokrouhlení\",\n\t\t\"GH_LIMITED_WIN\": \"Výhra (maximální limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena za zatočení zdarma\",\n\t\t\"HALF_COLLECT\": \"Získaná polovina výhry\",\n\t\t\"FULL_COLLECT\": \"Získaná plná výhra\",\n\n\t\t\"GH_TABLE_ID\": \"Číslo stolu\",\n\t\t\"GH_PLAYER\": \"Hráč\",\n\t\t\"GH_BANKER\": \"Bankéř\",\n\t\t\"GH_TIE\": \"Nerozhodně\",\n\t\t\"GH_PLAYER_PAIR\": \"Pár hráče\",\n\t\t\"GH_BANKER_PAIR\": \"Pár bankéře\",\n\t\t\"GH_GAME_WINNER\": \"Vítěz\",\n\t\t\"GH_GAME_WINSUM\": \"Částka\",\n\t\t\"GH_GAME_TOTAL\": \"Celkem\",\n\t\t\"GH_GAME_STAKE\": \"Vklad\",\n\n\t\t\"GH_SPIN_TITLE\": \"ROZTOČIT\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Roztočení zdarma\",\n\t\t\"GH_RESPINS_TITLE\": \"OPAKOVANÁ ROZTOČENÍ\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozice kuličky:\",\n\t\t\"GH_TRIO\": \"Trio celkem\",\n\t\t\"GH_SPLIT\": \"Split celkem\",\n\t\t\"GH_STREET\": \"Street celkem\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Roh celkem\",\n\t\t\"GH_SIX_LINE\": \"Six Line celkem\",\n\t\t\"GH_COLUMN\": \"Sloupec celkem\",\n\t\t\"GH_FIRST_COLUMN\": \"1. sloupec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. sloupec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. sloupec\",\n\t\t\"GH_DOZEN\": \"Tucet celkem\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.12\",\n\t\t\"GH_STRAIGHT\": \"Straight celkem\",\n\t\t\"GH_COLOR\": \"Barva celkem\",\n\t\t\"GH_BLACK\": \"Černá\",\n\t\t\"GH_RED\": \"Červená\",\n\t\t\"GH_EVEN_ODD\": \"Sudá/lichá celkem\",\n\t\t\"GH_EVEN\": \"Sudá\",\n\t\t\"GH_ODD\": \"Lichá\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36 celkem\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Toto kolo proběhlo jako tajná ukázka! Všechny výhry a sázky jsou demo peníze.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tomto kole byla aktivní kola zdarma.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tpt: {\n\t\t\"TOTAL_COINS_WIN\": \"Prémio total de moedas\",\n\t\t\"GH_HISTORY\": \"Histórico\",\n\t\t\"GH_GAME_DETAILS\": \"Informações do jogo\",\n\t\t\"GH_GAME_ID\": \"ID do jogo\",\n\t\t\"GH_ROUND_ID\": \"ID da ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Hora de início do servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Hora de fim do servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganhar\",\n\t\t\"GH_LENGTH\": \"Comprimento do prémio de símbolo\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganhar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Aglomerado\",\n\t\t\"GH_CLUSTER_COUNT\": \"Contagem de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transações\",\n\t\t\"GH_TOTAL_STAKE\": \"Aposta Total\",\n\t\t\"GH_TOTAL_BET\": \"Aposta Total\",\n\t\t\"GH_TOTAL_WIN\": \"Prémio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"antes da aposta\",\n\t\t\"GH_AFTER_STAKE\": \"depois da aposta\",\n\t\t\"GH_AT_END\": \"no final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bónus\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo da sessão\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bónus da sessão\",\n\t\t\"GH_BONUS\": \"Bónus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalhes do prémio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalhes da rodada\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Informações Adicionais\",\n\t\t\"GH_GAME_RESULTS\": \"Resultados do jogo\",\n\t\t\"GH_INITIAL_SPIN\": \"Rodada inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Prémio do jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Prémios dos símbolos\",\n\t\t\"GH_LINE\": \"Linha\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Prémios de rodadas grátis\",\n\t\t\"GH_FREE_SPIN\": \"Rodada grátis\",\n\t\t\"GH_RESPIN\": \"Rodada extra\",\n\t\t\"GH_RESPIN_WINS\": \"Prémios de rodadas extra\",\n\t\t\"GH_NUDGE\": \"Movimento\",\n\t\t\"GH_NUDGE_WINS\": \"Prémios de Movimentos\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Prémio de multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Prémio de modificador\",\n\t\t\"GH_BONUS_WIN\": \"Prémio de bónus\",\n\t\t\"GH_INSTANT_WIN\": \"Prémio instantâneo\",\n\t\t\"GH_NO_HISTORY\": \"Sem histórico disponível\",\n\t\t\"GH_GAMBLE_WINS\": \"Prémios de risco\",\n\t\t\"GH_NO_WINS\": \"Sem prémios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Correção das rondas\",\n\t\t\"GH_LIMITED_WIN\": \"Prémio (limite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Preço das rodadas grátis\",\n\t\t\"HALF_COLLECT\": \"Meio prémio recolhido\",\n\t\t\"FULL_COLLECT\": \"Prémio inteiro recolhido\",\n\n\t\t\"GH_TABLE_ID\": \"ID de Mesa\",\n\t\t\"GH_PLAYER\": \"Jogador\",\n\t\t\"GH_BANKER\": \"Banca\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par do Jogador\",\n\t\t\"GH_BANKER_PAIR\": \"Par da Banca\",\n\t\t\"GH_GAME_WINNER\": \"Vencedor\",\n\t\t\"GH_GAME_WINSUM\": \"Soma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Aposta\",\n\n\t\t\"GH_SPIN_TITLE\": \"RODAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rodada grátis\",\n\t\t\"GH_RESPINS_TITLE\": \"RODADAS EXTRA\",\n\n\t\t\"GH_BALL_POSITION\": \"Posição da bola:\",\n\t\t\"GH_TRIO\": \"Total de Trio\",\n\t\t\"GH_SPLIT\": \"Total de Dividida\",\n\t\t\"GH_STREET\": \"Total de Rua\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de Canto\",\n\t\t\"GH_SIX_LINE\": \"Total de Linha de Seis\",\n\t\t\"GH_COLUMN\": \"Total de Coluna\",\n\t\t\"GH_FIRST_COLUMN\": \"1ª Coluna\",\n\t\t\"GH_SECOND_COLUMN\": \"2ª Coluna\",\n\t\t\"GH_THIRD_COLUMN\": \"3ª Coluna\",\n\t\t\"GH_DOZEN\": \"Total de Dúzia\",\n\t\t\"GH_FIRST_DOZEN\": \"1ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de Direta\",\n\t\t\"GH_COLOR\": \"Total de Cor\",\n\t\t\"GH_BLACK\": \"Preto\",\n\t\t\"GH_RED\": \"Vermelho\",\n\t\t\"GH_EVEN_ODD\": \"Total de Par/Ímpar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Ímpar\",\n\t\t\"GH_SMALL_BIG\": \"Total de Baixo/Alto\",\n\t\t\"GH_SMALL\": \"Baixo\",\n\t\t\"GH_BIG\": \"Alto\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Espreitadela esteve activa durante esta ronda. Todos os ganhos e apostas são dinheiro demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"As rondas grátis estiveram activas nesta ronda.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Encontre a combinação para seus números\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Soma de 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Combine 3 símbolos\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Combine 3 valores\",\n\t\t\"SCRATCH_FREE_CARD\": \"RASPADINHA GRÁTIS\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thy: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Պատմություն\",\n\t\t\"GH_GAME_DETAILS\": \"Խաղի մանրամասներ\",\n\t\t\"GH_GAME_ID\": \"Խաղի ID\",\n\t\t\"GH_ROUND_ID\": \"Խաղաշրջանի ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Սերվերի ժամանակի սկիզբ\",\n\t\t\"GH_SERVER_TIME_END\": \"Սերվերի ժամանակի ավարտ\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Շահող գծեր՝\",\n\t\t\"GH_LENGTH\": \"Շահող նշաններ\",\n\t\t\"GH_MULTIPLIER\": \"Բազմապատկիչ\",\n\t\t\"GH_WIN_WAYS\": \"Շահող գծեր՝\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Քլասթեր\",\n\t\t\"GH_CLUSTER_COUNT\": \"Նշանների քանակ\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Գործարքներ\",\n\t\t\"GH_TOTAL_STAKE\": \"Ընդհանուր Խաղադրույք\",\n\t\t\"GH_TOTAL_BET\": \"ԸՆԴՀԱՆՈՒՐ ԴՐՈՒՅՔ`\",\n\t\t\"GH_TOTAL_WIN\": \"Ընդհանուր շահում\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"խաղադրույքից առաջ\",\n\t\t\"GH_AFTER_STAKE\": \"խաղադրույքից հետո\",\n\t\t\"GH_AT_END\": \"վերջում\",\n\t\t\"GH_BALANCE\": \"Հիմնական մնացորդ\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Բոնուսային մնացորդ\",\n\t\t\"GH_SESSION_BALANCE\": \"Սեսիայի մնացորդ\",\n\t\t\"GH_SESSION_FREEBETS\": \"Սեսիայի բոնուսային մնացորդ\",\n\t\t\"GH_BONUS\": \"ԲՈՆՈՒՍ\",\n\n\t\t\"GH_WIN_DETAILS\": \"Շահման մանրամասներ\",\n\t\t\"GH_SPIN_DETAILS\": \"Պտույտների մանրամասներ\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Լրացուցիչ մանրամասներ\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Սկզբնական պտույտ\",\n\t\t\"GH_JACKPOT_WIN\": \"Ջեքփոթի շահում\",\n\t\t\"GH_SYMBOL_WINS\": \"Շահող նշաններ\",\n\t\t\"GH_LINE\": \"Գիծ\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Անվճար պտույտների շահումներ\",\n\t\t\"GH_FREE_SPIN\": \"Անվճար պտույտ\",\n\t\t\"GH_RESPIN\": \"Կրկնակի պտույտ\",\n\t\t\"GH_RESPIN_WINS\": \"Կրկնակի պտույտների շահումներ\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Բազմապատկիչով շահում\",\n\t\t\"GH_MODIFIER_WIN\": \"Մոդիֆիկատորով շահում\",\n\t\t\"GH_BONUS_WIN\": \"Բոնուսային շահում\",\n\t\t\"GH_INSTANT_WIN\": \"Ակնթարթային շահում\",\n\t\t\"GH_NO_HISTORY\": \"Պատմություն չկա\",\n\t\t\"GH_GAMBLE_WINS\": \"Դրամախաղի շահումներ\",\n\t\t\"GH_NO_WINS\": \"Շահումներ չկան\",\n\t\t\"GH_ROUND_CORRECTION\": \"Շրջանի շտկում\",\n\t\t\"GH_LIMITED_WIN\": \"Շահում (առավ. սահմ.)\",\n\t\t\"WIN_EXCHANGE\": \"Անվճար պտույտների գինը\",\n\t\t\"HALF_COLLECT\": \"Շահումի կեսը վերցված է\",\n\t\t\"FULL_COLLECT\": \"Ամբողջական շահումը վերցված է\",\n\n\t\t\"GH_TABLE_ID\": \"Սեղանի ID\",\n\t\t\"GH_PLAYER\": \"ԽԱՂԱՑՈՂ\",\n\t\t\"GH_BANKER\": \"ԲԱՆԿ\",\n\t\t\"GH_TIE\": \"Ոչ ոքի`\",\n\t\t\"GH_PLAYER_PAIR\": \"Խաղացողի զույգ՝\",\n\t\t\"GH_BANKER_PAIR\": \"Բանկի զույգ՝\",\n\t\t\"GH_GAME_WINNER\": \"Հաղթող\",\n\t\t\"GH_GAME_WINSUM\": \"Ընդհանուր գումար\",\n\t\t\"GH_GAME_TOTAL\": \"Ընդամենը\",\n\t\t\"GH_GAME_STAKE\": \"ԽԱՂԱԴՐՈՒՅՔ\",\n\n\t\t\"GH_SPIN_TITLE\": \"ՊՏՏԵԼ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Անվճար պտույտ\",\n\t\t\"GH_RESPINS_TITLE\": \"Կրկնակի պտույտներ\",\n\n\t\t\"GH_BALL_POSITION\": \"Գնդակի դիրք:\",\n\t\t\"GH_TRIO\": \"Ընդամենը տրիո՝\",\n\t\t\"GH_SPLIT\": \"Ընդամենը պտույտ՝\",\n\t\t\"GH_STREET\": \"Ընդամենը սթրիթ՝\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Ընդամենը քորներ՝\",\n\t\t\"GH_SIX_LINE\": \"Ընդամենը սիքս լայն՝\",\n\t\t\"GH_COLUMN\": \"Ընդամենը սյունակ՝\",\n\t\t\"GH_FIRST_COLUMN\": \"1-ին սյունակ՝\",\n\t\t\"GH_SECOND_COLUMN\": \"2-րդ սյունակ՝\",\n\t\t\"GH_THIRD_COLUMN\": \"3-րդ սյունակ՝\",\n\t\t\"GH_DOZEN\": \"Ընդամենը դյուժին՝\",\n\t\t\"GH_FIRST_DOZEN\": \"1-ին 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2-րդ 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3-րդ 12\",\n\t\t\"GH_STRAIGHT\": \"Ընդամենը սթրեյթ՝\",\n\t\t\"GH_COLOR\": \"Ընդամենը գույն՝\",\n\t\t\"GH_BLACK\": \"Սև՝\",\n\t\t\"GH_RED\": \"Կարմիր\",\n\t\t\"GH_EVEN_ODD\": \"Ընդամենը զույգ/կենտ՝\",\n\t\t\"GH_EVEN\": \"Զույգ\",\n\t\t\"GH_ODD\": \"Կենտ\",\n\t\t\"GH_SMALL_BIG\": \"Ընդամենը փոքր/մեծ\",\n\t\t\"GH_SMALL\": \"Փոքր\",\n\t\t\"GH_BIG\": \"Մեծ\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Այս ռաունդի ընթացքում սնիք փիքը ակտիվ էր։ Բոլոր շահումներն ու խաղադրույքները դեմո գումարներ են։\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Անվճար խաղափուլի գործառույթն ակտիվ է այս խաղափուլի ընթացքում:\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'es-PE': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historial\",\n\t\t\"GH_GAME_DETAILS\": \"Detalles del juego\",\n\t\t\"GH_GAME_ID\": \"ID del juego\",\n\t\t\"GH_ROUND_ID\": \"ID de ronda\",\n\t\t\"GH_SERVER_TIME_START\": \"Inicio del tiempo del servidor\",\n\t\t\"GH_SERVER_TIME_END\": \"Final del tiempo del servidor\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Formas de ganar\",\n\t\t\"GH_LENGTH\": \"Longitud de los premios de los símbolos\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicador\",\n\t\t\"GH_WIN_WAYS\": \"Formas de ganar\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grupo\",\n\t\t\"GH_CLUSTER_COUNT\": \"Número de símbolos\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_TRANSACTIONS\": \"Transacciones\",\n\t\t\"GH_TOTAL_STAKE\": \"APUESTA TOTAL\",\n\t\t\"GH_TOTAL_BET\": \"APUESTA TOTAL\",\n\t\t\"GH_TOTAL_WIN\": \"Premio total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"antes de la apuesta\",\n\t\t\"GH_AFTER_STAKE\": \"después de la apuesta\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Saldo principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Saldo de bono\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo de la sesión\",\n\t\t\"GH_SESSION_FREEBETS\": \"Saldo de bono de la sesión\",\n\t\t\"GH_BONUS\": \"Bonificación\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalles del premio\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalles del giro\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Información adicional\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Giro inicial\",\n\t\t\"GH_JACKPOT_WIN\": \"Premio del Premio Mayor\",\n\t\t\"GH_SYMBOL_WINS\": \"Premios de símbolos\",\n\t\t\"GH_LINE\": \"Línea\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Premio en giros gratis\",\n\t\t\"GH_FREE_SPIN\": \"Giro gratis\",\n\t\t\"GH_RESPIN\": \"Regiro\",\n\t\t\"GH_RESPIN_WINS\": \"Premios del regiro\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge Wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Premio con multiplicador\",\n\t\t\"GH_MODIFIER_WIN\": \"Premio con modificador\",\n\t\t\"GH_BONUS_WIN\": \"Premio de bonificación\",\n\t\t\"GH_INSTANT_WIN\": \"Premio instantáneo\",\n\t\t\"GH_NO_HISTORY\": \"No hay historial disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Premios de apuestas\",\n\t\t\"GH_NO_WINS\": \"No hay premios\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corrección por redondeo\",\n\t\t\"GH_LIMITED_WIN\": \"Premio (límite máx)\",\n\t\t\"WIN_EXCHANGE\": \"Precio de los giros gratis\",\n\t\t\"HALF_COLLECT\": \"Mitad de premio recaudado\",\n\t\t\"FULL_COLLECT\": \"Premio total recaudado\",\n\n\t\t\"GH_TABLE_ID\": \"ID de mesa\",\n\t\t\"GH_PLAYER\": \"JUGADOR\",\n\t\t\"GH_BANKER\": \"BANCA\",\n\t\t\"GH_TIE\": \"Empate\",\n\t\t\"GH_PLAYER_PAIR\": \"Par del jugador\",\n\t\t\"GH_BANKER_PAIR\": \"Par de la banca\",\n\t\t\"GH_GAME_WINNER\": \"Ganador\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"APUESTA\",\n\n\t\t\"GH_SPIN_TITLE\": \"GIRAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Giro gratis\",\n\t\t\"GH_RESPINS_TITLE\": \"REGIROS\",\n\n\t\t\"GH_BALL_POSITION\": \"Posición de la bola:\",\n\t\t\"GH_TRIO\": \"Total de la tercia\",\n\t\t\"GH_SPLIT\": \"Total de la división\",\n\t\t\"GH_STREET\": \"Total de la transversal\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Total de la esquina\",\n\t\t\"GH_SIX_LINE\": \"Total de seis líneas\",\n\t\t\"GH_COLUMN\": \"Total de columnas\",\n\t\t\"GH_FIRST_COLUMN\": \"1.ª Columna\",\n\t\t\"GH_SECOND_COLUMN\": \"2.ª Columna\",\n\t\t\"GH_THIRD_COLUMN\": \"3.ª Columna\",\n\t\t\"GH_DOZEN\": \"Total de docenas\",\n\t\t\"GH_FIRST_DOZEN\": \"1.ª 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2.ª 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3.ª 12\",\n\t\t\"GH_STRAIGHT\": \"Total de escalera\",\n\t\t\"GH_COLOR\": \"Total de color\",\n\t\t\"GH_BLACK\": \"Negro\",\n\t\t\"GH_RED\": \"Rojo\",\n\t\t\"GH_EVEN_ODD\": \"Total de par/impar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Impar\",\n\t\t\"GH_SMALL_BIG\": \"Total pequeño/grande\",\n\t\t\"GH_SMALL\": \"Pequeño\",\n\t\t\"GH_BIG\": \"Grande\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"El modo “Échale un vistazo” estaba activo durante esta ronda. Todos los premios y apuestas son en dinero demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"La función de rondas gratis estuvo activa durante esta ronda.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thr: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Povijest\",\n\t\t\"GH_GAME_DETAILS\": \"Detalji igre\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"ID runde\",\n\t\t\"GH_SERVER_TIME_START\": \"Vrijeme na poslužitelju na početku\",\n\t\t\"GH_SERVER_TIME_END\": \"Vrijeme na poslužitelju na kraju\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Načini za dobitak\",\n\t\t\"GH_LENGTH\": \"Duljina dobitka simbola\",\n\t\t\"GH_MULTIPLIER\": \"Množitelj\",\n\t\t\"GH_WIN_WAYS\": \"Načini za dobitak\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Niz\",\n\t\t\"GH_CLUSTER_COUNT\": \"Broj simbola\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Ruke\",\n\t\t\"GH_SIDE_BETS\": \"Dodatni ulozi\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Ruka [1] (Podijeljeno)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Podijeljeno)\",\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Podijeljeno)\",\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Osiguranje)\",\n\t\t\"DEALER\": \"Djelitelj\",\n\n\t\t\"STAKE\": \"Ulog\",\n\t\t\"INSURANCE\": 'Osiguranje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Ukupan ulog\",\n\t\t\"GH_TOTAL_BET\": \"Ukupan ulog\",\n\t\t\"GH_TOTAL_WIN\": \"Ukupan dobitak\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"prije uloga\",\n\t\t\"GH_AFTER_STAKE\": \"poslije uloga\",\n\t\t\"GH_AT_END\": \"na kraju\",\n\t\t\"GH_BALANCE\": \"Glavni saldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus saldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Saldo sesije\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonus saldo sesije\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detalji dobitka\",\n\t\t\"GH_SPIN_DETAILS\": \"Detalji okretanja\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatni detalji\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Početno okretanje\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot dobitak\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobici Simbola\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobici besplatnih okretanja\",\n\t\t\"GH_FREE_SPIN\": \"Besplatno okretanje\",\n\t\t\"GH_RESPIN\": \"Ponovno okretanje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobici ponovnog okretanja\",\n\t\t\"GH_NUDGE\": \"Poguravanje\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge dobici\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitak množitelja\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobici modifikatora\",\n\t\t\"GH_BONUS_WIN\": \"Bonus dobitak\",\n\t\t\"GH_INSTANT_WIN\": \"Trenutačni dobitak\",\n\t\t\"GH_NO_HISTORY\": \"Povijest nije dostupna\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobici kockanja\",\n\t\t\"GH_NO_WINS\": \"Bez dobitaka\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekcija zaokruživanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitak (maksimalni limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cijena Gratis vrtnji\",\n\t\t\"HALF_COLLECT\": \"Prikupljeno pola dobitka\",\n\t\t\"FULL_COLLECT\": \"Cijeli dobitak prikupljen\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"IGRAČ\",\n\t\t\"GH_BANKER\": \"BANKA\",\n\t\t\"GH_TIE\": \"Neriješeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igračev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankin par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Zbroj\",\n\t\t\"GH_GAME_TOTAL\": \"Ukupno\",\n\t\t\"GH_GAME_STAKE\": \"Ulog\",\n\n\t\t\"GH_SPIN_TITLE\": \"Okretanje\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Besplatna okretanja\",\n\t\t\"GH_RESPINS_TITLE\": \"Ponovna okretanja\",\n\n\t\t\"GH_BALL_POSITION\": \"Položaj kuglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Razdvoji\",\n\t\t\"GH_STREET\": \"Linija - tri broja\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Kut - četiri broja\",\n\t\t\"GH_SIX_LINE\": \"Dvije linije - šest brojeva\",\n\t\t\"GH_COLUMN\": \"Stupac\",\n\t\t\"GH_FIRST_COLUMN\": \"1. stupac\",\n\t\t\"GH_SECOND_COLUMN\": \"2. stupac\",\n\t\t\"GH_THIRD_COLUMN\": \"3. stupac\",\n\t\t\"GH_DOZEN\": \"Tucet\",\n\t\t\"GH_FIRST_DOZEN\": \"Prvih 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Drugih 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Trećih 12\",\n\t\t\"GH_STRAIGHT\": \"Broj\",\n\t\t\"GH_COLOR\": \"Boja\",\n\t\t\"GH_BLACK\": \"Crno\",\n\t\t\"GH_RED\": \"Crveno\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"Mali/Veliki\",\n\t\t\"GH_SMALL\": \"Mali\",\n\t\t\"GH_BIG\": \"Veliki\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Duplázás\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Kratki pregled je bio aktivan za ovaj krug. Za sve dobitke i oklade korišten je demo novac.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"U ovoj rundi bila je aktivna značajka Gratis runde.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\thu: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Előzmények\",\n\t\t\"GH_GAME_DETAILS\": \"Játékadatok\",\n\t\t\"GH_GAME_ID\": \"Játékazonosító\",\n\t\t\"GH_ROUND_ID\": \"Fordulóazonosító\",\n\t\t\"GH_SERVER_TIME_START\": \"Szerveridő kezdete\",\n\t\t\"GH_SERVER_TIME_END\": \"Szerveridő vége\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Nyerőutak\",\n\t\t\"GH_LENGTH\": \"Szimbólumnyeremény hossza\",\n\t\t\"GH_MULTIPLIER\": \"Szorzó\",\n\t\t\"GH_WIN_WAYS\": \"Nyerőutak\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Leosztások\",\n\t\t\"GH_SIDE_BETS\": \"Melléktétek\",\n\n\t\t\"HAND_0\": \"Leosztás [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Leosztás [1] (Split)\",\n\t\t\"HAND_1\": \"Leosztás [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Leosztás [2] (Split)\",\n\t\t\"HAND_2\": \"Leosztás [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Leosztás [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Leosztás [1] (Biztosítás)\",\n\t\t\"INSURANCE_HAND_1\": \"Leosztás [2] (Biztosítás)\",\n\t\t\"INSURANCE_HAND_2\": \"Leosztás [3] (Biztosítás)\",\n\t\t\"DEALER\": \"Osztó\",\n\n\t\t\"STAKE\": \"Tét\",\n\t\t\"INSURANCE\": 'Biztosítás',\n\n\t\t\"GH_TRANSACTIONS\": \"Tranzakciók\",\n\t\t\"GH_TOTAL_STAKE\": \"Összes tét\",\n\t\t\"GH_TOTAL_BET\": \"Módosító nyeremény\",\n\t\t\"GH_TOTAL_WIN\": \"Teljes nyeremény\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"tét előtt\",\n\t\t\"GH_AFTER_STAKE\": \"tét után\",\n\t\t\"GH_AT_END\": \"a végén\",\n\t\t\"GH_BALANCE\": \"Főegyenleg\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bónuszegyenleg\",\n\t\t\"GH_SESSION_BALANCE\": \"Aktuális belépés egyenlege\",\n\t\t\"GH_SESSION_FREEBETS\": \"Aktuális belépés bónuszegyenlege\",\n\t\t\"GH_BONUS\": \"Bónusz\",\n\n\t\t\"GH_WIN_DETAILS\": \"Nyeremény részletei\",\n\t\t\"GH_SPIN_DETAILS\": \"Pörgetés részletei\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"További részletek\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Kezdeti pörgetés\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot nyeremény\",\n\t\t\"GH_SYMBOL_WINS\": \"Szimbólumnyeremények\",\n\t\t\"GH_LINE\": \"Vonal\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Ingyenes pörgetések nyereményei\",\n\t\t\"GH_FREE_SPIN\": \"Ingyenes pörgetés\",\n\t\t\"GH_RESPIN\": \"Újrapörgetés\",\n\t\t\"GH_RESPIN_WINS\": \"Újrapörgetés nyereményei\",\n\t\t\"GH_NUDGE\": \"Bökés\",\n\t\t\"GH_NUDGE_WINS\": \"Bökés nyeremények\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Szorzónyeremény\",\n\t\t\"GH_MODIFIER_WIN\": \"Módosító nyeremény\",\n\t\t\"GH_BONUS_WIN\": \"Bónusznyeremény\",\n\t\t\"GH_INSTANT_WIN\": \"Azonnali nyeremény\",\n\t\t\"GH_NO_HISTORY\": \"Nincs elérhető előzmény\",\n\t\t\"GH_GAMBLE_WINS\": \"Kockáztatás nyereményei\",\n\t\t\"GH_NO_WINS\": \"Nincs nyeremény\",\n\t\t\"GH_ROUND_CORRECTION\": \"Kerekítési korrekció\",\n\t\t\"GH_LIMITED_WIN\": \"Nyeremény (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Az ingyenes pörgetések ára\",\n\t\t\"HALF_COLLECT\": \"Felvetted a nyeremény felét\",\n\t\t\"FULL_COLLECT\": \"Felvetted a teljes nyereményt\",\n\n\t\t\"GH_TABLE_ID\": \"Asztalazonosító\",\n\t\t\"GH_PLAYER\": \"Játékos\",\n\t\t\"GH_BANKER\": \"Bank\",\n\t\t\"GH_TIE\": \"Egál\",\n\t\t\"GH_PLAYER_PAIR\": \"Játékos pár\",\n\t\t\"GH_BANKER_PAIR\": \"Bank pár\",\n\t\t\"GH_GAME_WINNER\": \"Nyertes\",\n\t\t\"GH_GAME_WINSUM\": \"Összeg\",\n\t\t\"GH_GAME_TOTAL\": \"Összesen\",\n\t\t\"GH_GAME_STAKE\": \"Tét\",\n\n\t\t\"GH_SPIN_TITLE\": \"TOČIŤ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"INGYENES PÖRGETÉSEK\",\n\t\t\"GH_RESPINS_TITLE\": \"ÚJRAPÖRGETÉSEK\",\n\n\t\t\"GH_BALL_POSITION\": \"Golyó helyzete:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Kettéosztás\",\n\t\t\"GH_STREET\": \"Sorra\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Sarokra\",\n\t\t\"GH_SIX_LINE\": \"Hat számra\",\n\t\t\"GH_COLUMN\": \"Oszlop\",\n\t\t\"GH_FIRST_COLUMN\": \"1. oszlop\",\n\t\t\"GH_SECOND_COLUMN\": \"2. oszlop\",\n\t\t\"GH_THIRD_COLUMN\": \"3. oszlop\",\n\t\t\"GH_DOZEN\": \"Tucat\",\n\t\t\"GH_FIRST_DOZEN\": \"Első tucatra\",\n\t\t\"GH_SECOND_DOZEN\": \"Második tucatra\",\n\t\t\"GH_THIRD_DOZEN\": \"Harmadik tucatra\",\n\t\t\"GH_STRAIGHT\": \"Egy számra\",\n\t\t\"GH_COLOR\": \"Szín\",\n\t\t\"GH_BLACK\": \"Fekete\",\n\t\t\"GH_RED\": \"Piros\",\n\t\t\"GH_EVEN_ODD\": \"Páros/páratla\",\n\t\t\"GH_EVEN\": \"Páros\",\n\t\t\"GH_ODD\": \"Páratlan\",\n\t\t\"GH_SMALL_BIG\": \"Kicsi/nagy\",\n\t\t\"GH_SMALL\": \"Kicsi\",\n\t\t\"GH_BIG\": \"Nagy\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Duplázás\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Az ízelítő aktív a jelenlegi menethez. Az összes nyeremény és fogadás demó pénzben értendő.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ebben a körben aktívak voltak az ingyenkörök.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsk: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"História\",\n\t\t\"GH_GAME_DETAILS\": \"Podrobnosti o hre\",\n\t\t\"GH_GAME_ID\": \"ID hry\",\n\t\t\"GH_ROUND_ID\": \"ID Kola\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverový čas začatia\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverový čas ukončenia\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Možnosti výhry\",\n\t\t\"GH_LENGTH\": \"Dĺžka výhry za symboly\",\n\t\t\"GH_MULTIPLIER\": \"Násobiteľ\",\n\t\t\"GH_WIN_WAYS\": \"Možnosti výhry\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Zhluk\",\n\t\t\"GH_CLUSTER_COUNT\": \"Počet symbolov\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Karty v rukách\",\n\t\t\"GH_SIDE_BETS\": \"Bočné stávky\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Ruka [1] (Rozdelenie)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Rozdelenie)\",\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Rozdelenie)\",\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Poistenie)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Poistenie)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Poistenie)\",\n\t\t\"DEALER\": \"Bankár\",\n\n\t\t\"STAKE\": \"Stávka\",\n\t\t\"INSURANCE\": 'Poistenie',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcie\",\n\t\t\"GH_TOTAL_STAKE\": \"Celková stávka\",\n\t\t\"GH_TOTAL_BET\": \"Celková stávka\",\n\t\t\"GH_TOTAL_WIN\": \"Celková výhra\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"pred stávkou\",\n\t\t\"GH_AFTER_STAKE\": \"po stávke\",\n\t\t\"GH_AT_END\": \"na konci\",\n\t\t\"GH_BALANCE\": \"Hlavný zostatok\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusový zostatok\",\n\t\t\"GH_SESSION_BALANCE\": \"Zostatok partie\",\n\t\t\"GH_SESSION_FREEBETS\": \"Zostatok bonusovej partie\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti o výhre\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti o spine\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatočné detaily\",\n\t\t\"GH_GAME_RESULTS\": \"Výsledky hier\",\n\t\t\"GH_INITIAL_SPIN\": \"Úvodný spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Výhra jackpotu\",\n\t\t\"GH_SYMBOL_WINS\": \"Výhry za symboly\",\n\t\t\"GH_LINE\": \"Línia\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Výhry počas free spinov\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Výhry počas respinov\",\n\t\t\"GH_NUDGE\": \"Štuchnutie\",\n\t\t\"GH_NUDGE_WINS\": \"Výhry so štuchnutiami\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Výhra s násobiteľom\",\n\t\t\"GH_MODIFIER_WIN\": \"Výhra s modifikátorom\",\n\t\t\"GH_BONUS_WIN\": \"Bonusová výhra\",\n\t\t\"GH_INSTANT_WIN\": \"Okamžitá výhra\",\n\t\t\"GH_NO_HISTORY\": \"K dispozícii nie je žiadna história\",\n\t\t\"GH_GAMBLE_WINS\": \"Hazardné výhry\",\n\t\t\"GH_NO_WINS\": \"Žiadne výhry\",\n\t\t\"GH_ROUND_CORRECTION\": \"Korekcia zaokrúhlenia\",\n\t\t\"GH_LIMITED_WIN\": \"Výhra (max. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena točení zdarma\",\n\t\t\"HALF_COLLECT\": \"Získaná polovičná výhra\",\n\t\t\"FULL_COLLECT\": \"Získaná plná výhra\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"Hráč\",\n\t\t\"GH_BANKER\": \"Bankár\",\n\t\t\"GH_TIE\": \"Remíza\",\n\t\t\"GH_PLAYER_PAIR\": \"Hráč – pár:\",\n\t\t\"GH_BANKER_PAIR\": \"Krupiér – pár:\",\n\t\t\"GH_GAME_WINNER\": \"Víťaz\",\n\t\t\"GH_GAME_WINSUM\": \"Súčet\",\n\t\t\"GH_GAME_TOTAL\": \"Spolu\",\n\t\t\"GH_GAME_STAKE\": \"Stávka\",\n\n\t\t\"GH_SPIN_TITLE\": \"TOČIŤ\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spiny\",\n\t\t\"GH_RESPINS_TITLE\": \"RESPINY\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozícia guličky:\",\n\t\t\"GH_TRIO\": \"Tri čísla\",\n\t\t\"GH_SPLIT\": \"Dve čísla\",\n\t\t\"GH_STREET\": \"Riadok\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Roh\",\n\t\t\"GH_SIX_LINE\": \"Šesť riadkov\",\n\t\t\"GH_COLUMN\": \"Stĺpec\",\n\t\t\"GH_FIRST_COLUMN\": \"1. stĺpec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. stĺpec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. stĺpec\",\n\t\t\"GH_DOZEN\": \"Tucet\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tucet\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tucet\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tucet\",\n\t\t\"GH_STRAIGHT\": \"Priame stávky\",\n\t\t\"GH_COLOR\": \"Farba\",\n\t\t\"GH_BLACK\": \"Čierna\",\n\t\t\"GH_RED\": \"Červená\",\n\t\t\"GH_EVEN_ODD\": \"Párne/Nepárne\",\n\t\t\"GH_EVEN\": \"Párne\",\n\t\t\"GH_ODD\": \"Nepárne\",\n\t\t\"GH_SMALL_BIG\": \"Malé/veľké čísla\",\n\t\t\"GH_SMALL\": \"Malé\",\n\t\t\"GH_BIG\": \"Veľké\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek bol pre toto kolo aktívny. Všetky výhry a stávky sú demo peniaze.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tomto kole boli aktívne kolá zdarma.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Zdvojnásobiť stávku\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Ponuka bola prijatá\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\t},\n\tsl: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Zgodovina\",\n\t\t\"GH_GAME_DETAILS\": \"Podrobnosti igre\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"ID Kroga\",\n\t\t\"GH_SERVER_TIME_START\": \"Začetni čas strežnika\",\n\t\t\"GH_SERVER_TIME_END\": \"Končni čas strežnika\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Načini dobitkov\",\n\t\t\"GH_LENGTH\": \"Dolžina dobitka s simboli\",\n\t\t\"GH_MULTIPLIER\": \"Večkratnik\",\n\t\t\"GH_WIN_WAYS\": \"Načini dobitkov\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Sveženj\",\n\t\t\"GH_CLUSTER_COUNT\": \"Število simbolov\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Kombinacije kart\",\n\t\t\"GH_SIDE_BETS\": \"Stranske stave\",\n\n\t\t\"HAND_0\": \"Kombinacije kart [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Kombinacije kart [1] (Razdeljeno)\",\n\t\t\"HAND_1\": \"Kombinacije kart [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Kombinacije kart [2] (Razdeljeno)\",\n\t\t\"HAND_2\": \"Kombinacije kart [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Kombinacije kart [3] (Razdeljeno)\",\n\t\t\"INSURANCE_HAND_0\": \"Kombinacije kart [1] (Zavarovanje)\",\n\t\t\"INSURANCE_HAND_1\": \"Kombinacije kart [2] (Zavarovanje)\",\n\t\t\"INSURANCE_HAND_2\": \"Kombinacije kart [3] (Zavarovanje)\",\n\t\t\"DEALER\": \"Delilec\",\n\n\t\t\"STAKE\": \"Vložek\",\n\t\t\"INSURANCE\": 'Zavarovanje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Skupni vložek\",\n\t\t\"GH_TOTAL_BET\": \"Skupna stava\",\n\t\t\"GH_TOTAL_WIN\": \"Skupni dobitek\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"pred stavo\",\n\t\t\"GH_AFTER_STAKE\": \"po stavi\",\n\t\t\"GH_AT_END\": \"na koncu\",\n\t\t\"GH_BALANCE\": \"Glavno stanje\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Stanje bonusa\",\n\t\t\"GH_SESSION_BALANCE\": \"Stanje seje\",\n\t\t\"GH_SESSION_FREEBETS\": \"Stanje bonusa seje\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podrobnosti o dobitku\",\n\t\t\"GH_SPIN_DETAILS\": \"Podrobnosti o vrtenju\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatne podrobnosti\",\n\t\t\"GH_GAME_RESULTS\": \"Game Results\",\n\t\t\"GH_INITIAL_SPIN\": \"Začetno vrtenje\",\n\t\t\"GH_JACKPOT_WIN\": \"Dobitek Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobitki Simbolov\",\n\t\t\"GH_LINE\": \"Vrstica\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobitki pri brezplačnih vrtenjih\",\n\t\t\"GH_FREE_SPIN\": \"Brezplačno vrtenje\",\n\t\t\"GH_RESPIN\": \"Ponovno vrtenje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobitki s ponovnim vrtenjem\",\n\t\t\"GH_NUDGE\": \"Dregni\",\n\t\t\"GH_NUDGE_WINS\": \"Dobitki z dregljajem\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitek z množiteljem\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobitek s spreminjevalcem\",\n\t\t\"GH_BONUS_WIN\": \"Bonusni dobitek\",\n\t\t\"GH_INSTANT_WIN\": \"Takojšnji dobitek\",\n\t\t\"GH_NO_HISTORY\": \"Zgodovina ni na voljo\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobitki pri tveganju\",\n\t\t\"GH_NO_WINS\": \"Brez dobitkov\",\n\t\t\"GH_ROUND_CORRECTION\": \"Popravek zaokrožanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitek (maks. limit)\",\n\t\t\"WIN_EXCHANGE\": \"Cena zastonj vrtenj\",\n\t\t\"HALF_COLLECT\": \"Zbran prepolovljen dobitek\",\n\t\t\"FULL_COLLECT\": \"Zbran celoten dobitek\",\n\n\t\t\"GH_TABLE_ID\": \"ID plošče\",\n\t\t\"GH_PLAYER\": \"Igralec\",\n\t\t\"GH_BANKER\": \"Bankir\",\n\t\t\"GH_TIE\": \"Neodločeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igralčev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankirjev par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Vsota\",\n\t\t\"GH_GAME_TOTAL\": \"Skupaj\",\n\t\t\"GH_GAME_STAKE\": \"VložeK\",\n\n\t\t\"GH_SPIN_TITLE\": \"ZAVRTI\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"BREZPLAČNA VRTENJA\",\n\t\t\"GH_RESPINS_TITLE\": \"PONOVNA VRTENJA\",\n\n\t\t\"GH_BALL_POSITION\": \"Položaj kroglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Razdeli\",\n\t\t\"GH_STREET\": \"Ulica\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Vogal\",\n\t\t\"GH_SIX_LINE\": \"Šest v vrsti\",\n\t\t\"GH_COLUMN\": \"Stolpec\",\n\t\t\"GH_FIRST_COLUMN\": \"1. stolpec\",\n\t\t\"GH_SECOND_COLUMN\": \"2. stolpec\",\n\t\t\"GH_THIRD_COLUMN\": \"3. stolpec\",\n\t\t\"GH_DOZEN\": \"Ducat\",\n\t\t\"GH_FIRST_DOZEN\": \"Prvih 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Drugih 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3Tretjih 12\",\n\t\t\"GH_STRAIGHT\": \"Lestvica\",\n\t\t\"GH_COLOR\": \"Barva\",\n\t\t\"GH_BLACK\": \"Črna\",\n\t\t\"GH_RED\": \"Rdeča\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"Mala/Velika\",\n\t\t\"GH_SMALL\": \"Mala\",\n\t\t\"GH_BIG\": \"Velika\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek je bil aktiven za to serijo. Vsi dobitki in stave so navidezni denar.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"V tej seriji so bile aktivne zastonj serije.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free ticket\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Podvojena stava\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\t},\n\thi: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"हिस् ट्री\",\n\t\t\"GH_GAME_DETAILS\": \"गेम का विवरण\",\n\t\t\"GH_GAME_ID\": \"गेम ID\",\n\t\t\"GH_ROUND_ID\": \"राउंड ID\",\n\t\t\"GH_SERVER_TIME_START\": \"सर्वर समय शुरू\",\n\t\t\"GH_SERVER_TIME_END\": \"सर्वर समय समाप् त\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"जीत के तरीके\",\n\t\t\"GH_LENGTH\": \"सिंबल विन की लंबाई\",\n\t\t\"GH_MULTIPLIER\": \"मल् टीप् लायर\",\n\t\t\"GH_WIN_WAYS\": \"जीत के तरीके\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"क् लस् टर\",\n\t\t\"GH_CLUSTER_COUNT\": \"सिंबल काउंट\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"लेन-देन\",\n\t\t\"GH_TOTAL_STAKE\": \"कुल दांव\",\n\t\t\"GH_TOTAL_BET\": \"कुल बेट\",\n\t\t\"GH_TOTAL_WIN\": \"कुल जीत\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"दांव से पहले\",\n\t\t\"GH_AFTER_STAKE\": \"दांव के बाद\",\n\t\t\"GH_AT_END\": \"अंत में\",\n\t\t\"GH_BALANCE\": \"मुख् य शेष राशि (बैलेंस)\",\n\t\t\"GH_FREEBETS_BALANCE\": \"शेष बोनस\",\n\t\t\"GH_SESSION_BALANCE\": \"शेष सेशन\",\n\t\t\"GH_SESSION_FREEBETS\": \"सेशन बोनस बैलेंस\",\n\t\t\"GH_BONUS\": \"बोनस\",\n\n\t\t\"GH_WIN_DETAILS\": \"जीत का विवरण\",\n\t\t\"GH_SPIN_DETAILS\": \"स्पिन का विवरण\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"अतिरिक्त विवरण\",\n\t\t\"GH_GAME_RESULTS\": \"गेम के नजीते\",\n\t\t\"GH_INITIAL_SPIN\": \"प्रारंभिक स्पिन\",\n\t\t\"GH_JACKPOT_WIN\": \"जैकपॉट जीत\",\n\t\t\"GH_SYMBOL_WINS\": \"सिंबल विंस\",\n\t\t\"GH_LINE\": \"लाइन\",\n\t\t\"GH_FREE_SPIN_WINS\": \"मुफ़्त स्पिन् स की जीत\",\n\t\t\"GH_FREE_SPIN\": \"मुफ़्त स्पिन\",\n\t\t\"GH_RESPIN\": \"रीस्पिन\",\n\t\t\"GH_RESPIN_WINS\": \"रीस्पिन् स जीत\",\n\t\t\"GH_NUDGE\": \"झटका देना (हिलाना)\",\n\t\t\"GH_NUDGE_WINS\": \"झटके (हिलाने) से जीत\",\n\t\t\"GH_MULTIPLIER_WINS\": \"मल् टीप् लायर जीत\",\n\t\t\"GH_MODIFIER_WIN\": \"मॉडिफायर विन\",\n\t\t\"GH_BONUS_WIN\": \"बोनस की जीत\",\n\t\t\"GH_INSTANT_WIN\": \"इंस्टेंट जीत\",\n\t\t\"GH_NO_HISTORY\": \"कोई हिस् ट्री उपलब् ध नहीं है\",\n\t\t\"GH_GAMBLE_WINS\": \"गैम् बल में जीत\",\n\t\t\"GH_NO_WINS\": \"कोई जीत नहीं\",\n\t\t\"GH_ROUND_CORRECTION\": \"राउंडिंग करेक् शन\",\n\t\t\"GH_LIMITED_WIN\": \"जीत (अधिकतम सीमा)\",\n\t\t\"WIN_EXCHANGE\": \"मुफ्त स्पिन्स शुल्क\",\n\t\t\"HALF_COLLECT\": \"हॉफ विन कलेक्ट किया गया\",\n\t\t\"FULL_COLLECT\": \"फुल विन कलेक्ट किया गया\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"स्पिन\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"मुफ्त स्पिन् स\",\n\t\t\"GH_RESPINS_TITLE\": \"रीस्पिन् स\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"ऑफर स् वीकृत\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"इस राउंड के लिए स् नीक पीक एक्टिव था। सभी जीत और बेट्स डेमो मनी हैं।\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"इस राउंड के लिए मुफ़्त राउंड सक्रिय थे।\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tms: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Sejarah\",\n\t\t\"GH_GAME_DETAILS\": \"Butiran Permainan\",\n\t\t\"GH_GAME_ID\": \"ID Permainan\",\n\t\t\"GH_ROUND_ID\": \"ID Pusingan\",\n\t\t\"GH_SERVER_TIME_START\": \"Masa Pelayan Bermula\",\n\t\t\"GH_SERVER_TIME_END\": \"Masa Pelayan Tamat\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Cara Menang\",\n\t\t\"GH_LENGTH\": \"Kepanjangan Simbol Kemenangan\",\n\t\t\"GH_MULTIPLIER\": \"Pengganda\",\n\t\t\"GH_WIN_WAYS\": \"Cara Menang\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Kiraan Simbol\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transaksi\",\n\t\t\"GH_TOTAL_STAKE\": \"Jumlah Pertaruhan\",\n\t\t\"GH_TOTAL_BET\": \"Jumlah Pertaruhan\",\n\t\t\"GH_TOTAL_WIN\": \"Jumlah Kemenangan\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"sebelum taruhan\",\n\t\t\"GH_AFTER_STAKE\": \"selepas taruhan\",\n\t\t\"GH_AT_END\": \"pada akhir\",\n\t\t\"GH_BALANCE\": \"Baki utama\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Baki bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Baki sesi\",\n\t\t\"GH_SESSION_FREEBETS\": \"Baki sesi bonus\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Butiran Kemenangan\",\n\t\t\"GH_SPIN_DETAILS\": \"Butiran Putaran\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Butiran Tambahan\",\n\t\t\"GH_GAME_RESULTS\": \"Keputusan Permainan\",\n\t\t\"GH_INITIAL_SPIN\": \"Putaran Permulaan\",\n\t\t\"GH_JACKPOT_WIN\": \"Kemenangan Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbol Kemenangan\",\n\t\t\"GH_LINE\": \"Garisan\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Kemenangan Putar Percuma\",\n\t\t\"GH_FREE_SPIN\": \"Putar Percuma\",\n\t\t\"GH_RESPIN\": \"Putar Semula\",\n\t\t\"GH_RESPIN_WINS\": \"Kemenangan Putar Semula\",\n\t\t\"GH_NUDGE\": \"Goncangan\",\n\t\t\"GH_NUDGE_WINS\": \"Kemenangan Goncangan\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kemenangan Pengganda\",\n\t\t\"GH_MODIFIER_WIN\": \"Pengubah Kemenangan\",\n\t\t\"GH_BONUS_WIN\": \"Kemenangan bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Menang Segera\",\n\t\t\"GH_NO_HISTORY\": \"Tiada sejarah tersedia\",\n\t\t\"GH_GAMBLE_WINS\": \"Kemenangan Taruh\",\n\t\t\"GH_NO_WINS\": \"Tiada kemenangan\",\n\t\t\"GH_ROUND_CORRECTION\": \"Pembetulan pembundaran\",\n\t\t\"GH_LIMITED_WIN\": \"Kemenangan (had maks)\",\n\t\t\"WIN_EXCHANGE\": \"Harga putar percuma\",\n\t\t\"HALF_COLLECT\": \"Separuh daripada kemenangan dikumpulkan\",\n\t\t\"FULL_COLLECT\": \"Kemenangan penuh dikumpulkan\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"PUTAR\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"PUTAR PERCUMA\",\n\t\t\"GH_RESPINS_TITLE\": \"PUTAR SEMULA\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Previu telah aktif untuk pusingan ini. Semua kemenangan dan pertaruhan adalah wang demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Pusingan percuma telah aktif untuk pusingan ini.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tbg: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Хронология\",\n\t\t\"GH_GAME_DETAILS\": \"Параметри на Играта\",\n\t\t\"GH_GAME_ID\": \"ИД на Играта\",\n\t\t\"GH_ROUND_ID\": \"ИД на кръга\",\n\t\t\"GH_SERVER_TIME_START\": \"Начало на Сървърно Време\",\n\t\t\"GH_SERVER_TIME_END\": \"Край на Сървърно Време\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Печеливши линии\",\n\t\t\"GH_LENGTH\": \"Дължина на Печеливш Символ\",\n\t\t\"GH_MULTIPLIER\": \"Множител\",\n\t\t\"GH_WIN_WAYS\": \"Печеливши линии\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Клъстър\",\n\t\t\"GH_CLUSTER_COUNT\": \"Брой Символи\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"ИГРАЙ\",\n\t\t\n\t\t\"STAKE\": \"Залог\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Трансакции\",\n\t\t\"GH_TOTAL_STAKE\": \"Общ Залог\",\n\t\t\"GH_TOTAL_BET\": \"Общ Залог\",\n\t\t\"GH_TOTAL_WIN\": \"Обща печалба\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"преди залог\",\n\t\t\"GH_AFTER_STAKE\": \"след залог\",\n\t\t\"GH_AT_END\": \"в края\",\n\t\t\"GH_BALANCE\": \"Основно салдо\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Бонус салдо\",\n\t\t\"GH_SESSION_BALANCE\": \"Салдо на сесията\",\n\t\t\"GH_SESSION_FREEBETS\": \"Бонус салдо на сесията\",\n\t\t\"GH_BONUS\": \"БОНУС\",\n\n\t\t\"GH_WIN_DETAILS\": \"Подробности за Печалбата\",\n\t\t\"GH_SPIN_DETAILS\": \"Подробности за Завъртането\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Допълнителни данни\",\n\t\t\"GH_GAME_RESULTS\": \"Резултати от играта\",\n\t\t\"GH_INITIAL_SPIN\": \"Първоначално Завъртане\",\n\t\t\"GH_JACKPOT_WIN\": \"Джакпот печалба\",\n\t\t\"GH_SYMBOL_WINS\": \"Печалби от Символи\",\n\t\t\"GH_LINE\": \"Линия\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Печалби от Безплатни Завъртания\",\n\t\t\"GH_FREE_SPIN\": \"Безплатно Завъртане\",\n\t\t\"GH_RESPIN\": \"Повторно завъртане\",\n\t\t\"GH_RESPIN_WINS\": \"Печалби от Повторно Завъртане\",\n\t\t\"GH_NUDGE\": \"Побутване\",\n\t\t\"GH_NUDGE_WINS\": \"Печалба от Побутване\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Множител Печалба\",\n\t\t\"GH_MODIFIER_WIN\": \"Модификатор Печалба\",\n\t\t\"GH_BONUS_WIN\": \"Бонус печалба\",\n\t\t\"GH_INSTANT_WIN\": \"Незабавна Печалба\",\n\t\t\"GH_NO_HISTORY\": \"Няма налична хронология\",\n\t\t\"GH_GAMBLE_WINS\": \"Залогът печели\",\n\t\t\"GH_NO_WINS\": \"Няма печалби\",\n\t\t\"GH_ROUND_CORRECTION\": \"Корекция за закръгляне\",\n\t\t\"GH_LIMITED_WIN\": \"Печалба (макс. ограничение)\",\n\t\t\"WIN_EXCHANGE\": \"Цена на безплатните завъртания\",\n\t\t\"HALF_COLLECT\": \"Половин печалба събрана\",\n\t\t\"FULL_COLLECT\": \"Пълна печалба събрана\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"Завърти\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Безплатни Завъртания\",\n\t\t\"GH_RESPINS_TITLE\": \"Повторни Завъртания\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"Small/Big\",\n\t\t\"GH_SMALL\": \"Small\",\n\t\t\"GH_BIG\": \"Big\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Имаше безплатен преглед на този кръг. Всички печалби и залози са с демо пари.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"За този кръг бяха активни \\\"Безплатни кръгове\\\".\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tro: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istoric\",\n\t\t\"GH_GAME_DETAILS\": \"Detaliile jocului\",\n\t\t\"GH_GAME_ID\": \"ID-ul jocului\",\n\t\t\"GH_ROUND_ID\": \"ID rundă\",\n\t\t\"GH_SERVER_TIME_START\": \"Timpul de început al serverului\",\n\t\t\"GH_SERVER_TIME_END\": \"Timpul de sfârșit al serverului\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Modalități de câștig\",\n\t\t\"GH_LENGTH\": \"Mărimea tabelului de plăți\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicator\",\n\t\t\"GH_WIN_WAYS\": \"Modalități de câștig\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Grup\",\n\t\t\"GH_CLUSTER_COUNT\": \"Număr de simboluri\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Jucați\",\n\t\t\n\t\t\"STAKE\": \"Miză\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Tranzacții\",\n\t\t\"GH_TOTAL_STAKE\": \"Miza Totală\",\n\t\t\"GH_TOTAL_BET\": \"Pariu Total\",\n\t\t\"GH_TOTAL_WIN\": \"Câștig Total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"înainte de miză\",\n\t\t\"GH_AFTER_STAKE\": \"după miză\",\n\t\t\"GH_AT_END\": \"la sfârșit\",\n\t\t\"GH_BALANCE\": \"Sold principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Sold bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Sold sesiune\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sold bonus sesiune\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Detaliile câștigului\",\n\t\t\"GH_SPIN_DETAILS\": \"Detaliile rotirii\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Detalii suplimentare\",\n\t\t\"GH_GAME_RESULTS\": \"Rezultatele jocului\",\n\t\t\"GH_INITIAL_SPIN\": \"Rotire inițială\",\n\t\t\"GH_JACKPOT_WIN\": \"Câștig Jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Tabel de plăți\",\n\t\t\"GH_LINE\": \"Linie\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Câștiguri din Rotiri Gratuite\",\n\t\t\"GH_FREE_SPIN\": \"Rotire gratuită\",\n\t\t\"GH_RESPIN\": \"Reluarea rotirii\",\n\t\t\"GH_RESPIN_WINS\": \"Câștiguri din reluarea rotirii\",\n\t\t\"GH_NUDGE\": \"Imbold\",\n\t\t\"GH_NUDGE_WINS\": \"Câștiguri din Imbold\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Câștig multiplicator\",\n\t\t\"GH_MODIFIER_WIN\": \"Câștig modificator\",\n\t\t\"GH_BONUS_WIN\": \"Câștig bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Câștig instantaneu\",\n\t\t\"GH_NO_HISTORY\": \"Niciun istoric disponibil\",\n\t\t\"GH_GAMBLE_WINS\": \"Câștiguri din Pariere\",\n\t\t\"GH_NO_WINS\": \"Niciun câștig\",\n\t\t\"GH_ROUND_CORRECTION\": \"Corecție prin rotunjire\",\n\t\t\"GH_LIMITED_WIN\": \"Câștig (limita max.)\",\n\t\t\"WIN_EXCHANGE\": \"Preț Rotiri gratuite\",\n\t\t\"HALF_COLLECT\": \"Jumătate de câștig colectat\",\n\t\t\"FULL_COLLECT\": \"Câștig întreg colectat\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Miză\",\n\n\t\t\"GH_SPIN_TITLE\": \"Rotiți\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Rotiri Gratuite\",\n\t\t\"GH_RESPINS_TITLE\": \"Reluări ale Rotirii\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"Small/Big\",\n\t\t\"GH_SMALL\": \"Small\",\n\t\t\"GH_BIG\": \"Big\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Avanpremiera era activă în această rundă. Toate câștigurile și pariurile sunt în bani demo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"A fost activă funcția Runde gratuite pentru această rundă.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'fr-CA': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Historique\",\n\t\t\"GH_GAME_DETAILS\": \"Détails du jeu\",\n\t\t\"GH_GAME_ID\": \"Identifiant de jeu\",\n\t\t\"GH_ROUND_ID\": \"Identifiant de partie\",\n\t\t\"GH_SERVER_TIME_START\": \"Début (heure du serveur)\",\n\t\t\"GH_SERVER_TIME_END\": \"Fin (heure du serveur)\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Voies gagnantes\",\n\t\t\"GH_LENGTH\": \"Longueur de la combinaison gagnante\",\n\t\t\"GH_MULTIPLIER\": \"Multiplicateur\",\n\t\t\"GH_WIN_WAYS\": \"Voies gagnantes\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Regroupement\",\n\t\t\"GH_CLUSTER_COUNT\": \"Nombre de symboles\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Paris annexes\",\n\n\t\t\"HAND_0\": \"Main [1]\",\n\t\t\"HAND_0_SPLIT_0\": \"Main [1] (Séparation)\",\n\t\t\"HAND_1\": \"Main [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Main [2] (Séparation)\",\n\t\t\"HAND_2\": \"Main [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Main [3] (Séparation)\",\n\t\t\"INSURANCE_HAND_0\": \"Main [1] (Assurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Main [2] (Assurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Main [3] (Assurance)\",\n\t\t\"DEALER\": \"CROUPIER\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Jouer\",\n\t\t\n\t\t\"STAKE\": \"Mise\",\n\t\t\"INSURANCE\": 'Assurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Mise Totale\",\n\t\t\"GH_TOTAL_BET\": \"Mise Totale\",\n\t\t\"GH_TOTAL_WIN\": \"Gain total\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"avant mise\",\n\t\t\"GH_AFTER_STAKE\": \"après mise\",\n\t\t\"GH_AT_END\": \"final\",\n\t\t\"GH_BALANCE\": \"Solde principal\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Solde bonus\",\n\t\t\"GH_SESSION_BALANCE\": \"Solde de la session\",\n\t\t\"GH_SESSION_FREEBETS\": \"Solde bonus de la session\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Détails des gains\",\n\t\t\"GH_SPIN_DETAILS\": \"Détails des tours\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Détails supplémentaires\",\n\t\t\"GH_GAME_RESULTS\": \"Résultats du jeu\",\n\t\t\"GH_INITIAL_SPIN\": \"Tour initial\",\n\t\t\"GH_JACKPOT_WIN\": \"Gain jackpot\",\n\t\t\"GH_SYMBOL_WINS\": \"Gains de symboles\",\n\t\t\"GH_LINE\": \"Ligne\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Gains des tours gratuits\",\n\t\t\"GH_FREE_SPIN\": \"Tour gratuit\",\n\t\t\"GH_RESPIN\": \"Relance\",\n\t\t\"GH_RESPIN_WINS\": \"Gains Relances\",\n\t\t\"GH_NUDGE\": \"Coup de pouce\",\n\t\t\"GH_NUDGE_WINS\": \"Gains du coup de pouce\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Gains multiplicateurs\",\n\t\t\"GH_MODIFIER_WIN\": \"Modificateur de gain\",\n\t\t\"GH_BONUS_WIN\": \"Gain bonus\",\n\t\t\"GH_INSTANT_WIN\": \"Gain instantané\",\n\t\t\"GH_NO_HISTORY\": \"Aucun historique disponible\",\n\t\t\"GH_GAMBLE_WINS\": \"Gains Quitte ou double\",\n\t\t\"GH_NO_WINS\": \"Aucun gain\",\n\t\t\"GH_ROUND_CORRECTION\": \"Arrondir\",\n\t\t\"GH_LIMITED_WIN\": \"Gain (limite max)\",\n\t\t\"WIN_EXCHANGE\": \"Coût des tours gratuits\",\n\t\t\"HALF_COLLECT\": \"Moitié du gain collectée\",\n\t\t\"FULL_COLLECT\": \"Gain collecté en entier\",\n\n\t\t\"GH_TABLE_ID\": \"ID de la table\",\n\t\t\"GH_PLAYER\": \"Joueur\",\n\t\t\"GH_BANKER\": \"Croupier\",\n\t\t\"GH_TIE\": \"Égalité\",\n\t\t\"GH_PLAYER_PAIR\": \"Paire du joueur\",\n\t\t\"GH_BANKER_PAIR\": \"Paire du croupier\",\n\t\t\"GH_GAME_WINNER\": \"Gagnant\",\n\t\t\"GH_GAME_WINSUM\": \"Somme\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Mise\",\n\n\t\t\"GH_SPIN_TITLE\": \"Lancer\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tours Gratuits\",\n\t\t\"GH_RESPINS_TITLE\": \"Relances\",\n\n\t\t\"GH_BALL_POSITION\": \"Position de la bille :\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Cheval\",\n\t\t\"GH_STREET\": \"Transversale\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Carré\",\n\t\t\"GH_SIX_LINE\": \"Sixain\",\n\t\t\"GH_COLUMN\": \"Colonne\",\n\t\t\"GH_FIRST_COLUMN\": \"1re colonne\",\n\t\t\"GH_SECOND_COLUMN\": \"2e colonne\",\n\t\t\"GH_THIRD_COLUMN\": \"3e colonne\",\n\t\t\"GH_DOZEN\": \"Douzaine\",\n\t\t\"GH_FIRST_DOZEN\": \"1re douzaine\",\n\t\t\"GH_SECOND_DOZEN\": \"2e douzaine\",\n\t\t\"GH_THIRD_DOZEN\": \"3e douzaine\",\n\t\t\"GH_STRAIGHT\": \"Plein\",\n\t\t\"GH_COLOR\": \"Couleur\",\n\t\t\"GH_BLACK\": \"Noir\",\n\t\t\"GH_RED\": \"Rouge\",\n\t\t\"GH_EVEN_ODD\": \"Pair/Impair\",\n\t\t\"GH_EVEN\": \"Pair\",\n\t\t\"GH_ODD\": \"Impair\",\n\t\t\"GH_SMALL_BIG\": \"Petit/Grand\",\n\t\t\"GH_SMALL\": \"Petit\",\n\t\t\"GH_BIG\": \"Grand\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Doubler\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Le mode Aperçu était activé pour ce tour. Tous les gains et paris sont en argent de démo.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"La fonctionnalité « Tours gratuits » était active pour ce tour.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tlv: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Vēsture\",\n\t\t\"GH_GAME_DETAILS\": \"Informācija par spēli\",\n\t\t\"GH_GAME_ID\": \"Spēles ID\",\n\t\t\"GH_ROUND_ID\": \"Raunda ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Servera laika sākums\",\n\t\t\"GH_SERVER_TIME_END\": \"Servera laika beigas\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Laimestu varianti\",\n\t\t\"GH_LENGTH\": \"Laimējušās simbolu virknes garums\",\n\t\t\"GH_MULTIPLIER\": \"Reizinātājs\",\n\t\t\"GH_WIN_WAYS\": \"Laimestu varianti\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Simbolu bloks\",\n\t\t\"GH_CLUSTER_COUNT\": \"Simbolu skaits\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Papildlikmes\",\n\n\t\t\"HAND_0\": \"Roka [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Roka [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Roka [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Roka [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Roka [1] (Sadalīt)\",\n\t\t\"HAND_1\": \"Roka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Roka [2] (Sadalīt)\",\n\t\t\"HAND_1_SIDE_0\": \"Roka [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Roka [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Roka [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Roka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Roka [3] (Sadalīt)\",\n\t\t\"HAND_2_SIDE_0\": \"Roka [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Roka [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Roka [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Roka [1] (Apdrošināšana)\",\n\t\t\"INSURANCE_HAND_1\": \"Roka [2] (Apdrošināšana)\",\n\t\t\"INSURANCE_HAND_2\": \"Roka [3] (Apdrošināšana)\",\n\t\t\"DEALER\": \"DĪLERA\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Spēlēt\",\n\t\t\n\t\t\"STAKE\": \"Likme\",\n\t\t\"INSURANCE\": 'Apdrošināšana',\n\n\t\t\"GH_TRANSACTIONS\": \"Darījumi\",\n\t\t\"GH_TOTAL_STAKE\": \"Kopējā Likme\",\n\t\t\"GH_TOTAL_BET\": \"Kopējā Likme\",\n\t\t\"GH_TOTAL_WIN\": \"Kopējais laimests\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"pirms likmes veikšanas\",\n\t\t\"GH_AFTER_STAKE\": \"pēc likmes veikšanas\",\n\t\t\"GH_AT_END\": \"beigās\",\n\t\t\"GH_BALANCE\": \"Pamatspēles atlikums\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonusa atlikums\",\n\t\t\"GH_SESSION_BALANCE\": \"Sesijas atlikums\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sesijas bonusa atlikums\",\n\t\t\"GH_BONUS\": \"Bonuss\",\n\n\t\t\"GH_WIN_DETAILS\": \"Informācija par laimestu\",\n\t\t\"GH_SPIN_DETAILS\": \"Informācija par griezienu\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Papildu informācija\",\n\t\t\"GH_GAME_RESULTS\": \"Spēles rezultāti\",\n\t\t\"GH_INITIAL_SPIN\": \"Sākotnējais grieziens\",\n\t\t\"GH_JACKPOT_WIN\": \"Džekpota laimests\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbolu laimesti\",\n\t\t\"GH_LINE\": \"Līnija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Bezmaksas griezienu laimesti\",\n\t\t\"GH_FREE_SPIN\": \"Bezmaksas grieziens\",\n\t\t\"GH_RESPIN\": \"Atkārtots grieziens\",\n\t\t\"GH_RESPIN_WINS\": \"Atkārtoto griezienu laimesti\",\n\t\t\"GH_NUDGE\": \"Simbolu pārbīdīšana\",\n\t\t\"GH_NUDGE_WINS\": \"Pārbīdīto simbolu laimesti\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Reizinātāja laimests\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatora laimests\",\n\t\t\"GH_BONUS_WIN\": \"Bonusa laimests\",\n\t\t\"GH_INSTANT_WIN\": \"Tūlītējs laimests\",\n\t\t\"GH_NO_HISTORY\": \"Vēsture nav pieejama\",\n\t\t\"GH_GAMBLE_WINS\": \"Riska spēles laimesti\",\n\t\t\"GH_NO_WINS\": \"Nav laimestu\",\n\t\t\"GH_ROUND_CORRECTION\": \"Noapaļošanas kļūda\",\n\t\t\"GH_LIMITED_WIN\": \"Laimests (maks. limits)\",\n\t\t\"WIN_EXCHANGE\": \"Bezmaksas griezienu cena\",\n\t\t\"HALF_COLLECT\": \"Paņemta puse laimesta\",\n\t\t\"FULL_COLLECT\": \"Paņemts viss laimests\",\n\n\t\t\"GH_TABLE_ID\": \"Galda ID\",\n\t\t\"GH_PLAYER\": \"Spēlētājs\",\n\t\t\"GH_BANKER\": \"Baņķieris\",\n\t\t\"GH_TIE\": \"Neizšķirts\",\n\t\t\"GH_PLAYER_PAIR\": \"Spēlētāja pāris:\",\n\t\t\"GH_BANKER_PAIR\": \"Baņķiera pāris:\",\n\t\t\"GH_GAME_WINNER\": \"Uzvarētājs\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Kopā\",\n\t\t\"GH_GAME_STAKE\": \"Likme\",\n\n\t\t\"GH_SPIN_TITLE\": \"GRIEZIENS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Bezmaksas Griezieni\",\n\t\t\"GH_RESPINS_TITLE\": \"Atkārtotie Griezieni\",\n\n\t\t\"GH_BALL_POSITION\": \"Bumbiņas pozīcija:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Sadalīt\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Stūris\",\n\t\t\"GH_SIX_LINE\": \"Sešlīnija\",\n\t\t\"GH_COLUMN\": \"Kolonna\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolonna\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolonna\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolonna\",\n\t\t\"GH_DOZEN\": \"Ducis\",\n\t\t\"GH_FIRST_DOZEN\": \"Pirmie 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Otrie 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Trešie 12\",\n\t\t\"GH_STRAIGHT\": \"Viens skaitlis\",\n\t\t\"GH_COLOR\": \"Krāsa\",\n\t\t\"GH_BLACK\": \"Melns\",\n\t\t\"GH_RED\": \"Sarkans\",\n\t\t\"GH_EVEN_ODD\": \"Pāra/nepāra\",\n\t\t\"GH_EVEN\": \"Pāra\",\n\t\t\"GH_ODD\": \"Nepāra\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Šim raundam bija aktivizēts īss pārskats. Visi laimesti un likmes ir demo naudā.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Šajā raundā bija aktivizēti bezmaksas raundi.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tlt: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istorija\",\n\t\t\"GH_GAME_DETAILS\": \"Išsami informacija apie žaidimą\",\n\t\t\"GH_GAME_ID\": \"Žaidimo ID\",\n\t\t\"GH_ROUND_ID\": \"Turo ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serverio laiko pradžia\",\n\t\t\"GH_SERVER_TIME_END\": \"Serverio laiko pabaiga\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Laiminčių kombinacijų\",\n\t\t\"GH_LENGTH\": \"Simbolių laimėjimo ilgis\",\n\t\t\"GH_MULTIPLIER\": \"Daugiklis\",\n\t\t\"GH_WIN_WAYS\": \"Laiminčios kombinacijos\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Sankaupa\",\n\t\t\"GH_CLUSTER_COUNT\": \"Simbolių skaičius\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Papildomi statymai\",\n\n\t\t\"HAND_0\": \"[1] ranka\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"[2] ranka\",\n\t\t\"HAND_1_SPLIT_0\": \"[2] ranka (išskaidyta)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"[3] ranka\",\n\t\t\"HAND_2_SPLIT_0\": \"[3] ranka (išskaidyta)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"[1] ranka (draudimas)\",\n\t\t\"INSURANCE_HAND_1\": \"[2] ranka (draudimas)\",\n\t\t\"INSURANCE_HAND_2\": \"[3] ranka (draudimas)\",\n\t\t\"DEALER\": \"Dalintojo\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Žaisti\",\n\t\t\n\t\t\"STAKE\": \"Statymas\",\n\t\t\"INSURANCE\": 'Draudimas',\n\n\t\t\"GH_TRANSACTIONS\": \"Operacijos\",\n\t\t\"GH_TOTAL_STAKE\": \"Statymų Suma\",\n\t\t\"GH_TOTAL_BET\": \"Statymų Suma\",\n\t\t\"GH_TOTAL_WIN\": \"Laimėta suma\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"prieš statymą\",\n\t\t\"GH_AFTER_STAKE\": \"po statymo\",\n\t\t\"GH_AT_END\": \"pabaigoje\",\n\t\t\"GH_BALANCE\": \"Pagrindinis likutis\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Premijos likutis\",\n\t\t\"GH_SESSION_BALANCE\": \"Seanso likutis\",\n\t\t\"GH_SESSION_FREEBETS\": \"Seanso premijos likutis\",\n\t\t\"GH_BONUS\": \"Premija\",\n\n\t\t\"GH_WIN_DETAILS\": \"Išsami informacija apie laimėjimą\",\n\t\t\"GH_SPIN_DETAILS\": \"Išsami informacija apie sukimą\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Papildoma informacija\",\n\t\t\"GH_GAME_RESULTS\": \"Žaidimo rezultatai\",\n\t\t\"GH_INITIAL_SPIN\": \"Pradinis sukimas\",\n\t\t\"GH_JACKPOT_WIN\": \"Pagrindinio prizo laimėjimas\",\n\t\t\"GH_SYMBOL_WINS\": \"Simbolių laimėjimai\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Nemokamų sukimų laimėjimai\",\n\t\t\"GH_FREE_SPIN\": \"Nemokamas sukimas\",\n\t\t\"GH_RESPIN\": \"Pakartotinis sukimas\",\n\t\t\"GH_RESPIN_WINS\": \"Pakartotinių sukimų laimėjimai\",\n\t\t\"GH_NUDGE\": \"Stumtelėjimas\",\n\t\t\"GH_NUDGE_WINS\": \"Stumtelėjimo laimėjimai\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Daugiklio laimėjimas\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikatoriaus laimėjimas\",\n\t\t\"GH_BONUS_WIN\": \"Premijos laimėjimas\",\n\t\t\"GH_INSTANT_WIN\": \"Momentinis laimėjimas\",\n\t\t\"GH_NO_HISTORY\": \"Istorijos nėra\",\n\t\t\"GH_GAMBLE_WINS\": \"Lažybų laimėjimai\",\n\t\t\"GH_NO_WINS\": \"Laimėjimų nėra\",\n\t\t\"GH_ROUND_CORRECTION\": \"Apvalinimo korekcija\",\n\t\t\"GH_LIMITED_WIN\": \"Laimėjimas (maks. limitas)\",\n\t\t\"WIN_EXCHANGE\": \"Nemokamų sukimų kaina\",\n\t\t\"HALF_COLLECT\": \"Paimta pusė laimėjimo\",\n\t\t\"FULL_COLLECT\": \"Paimtas visas laimėjimas\",\n\n\t\t\"GH_TABLE_ID\": \"Stalo ID\",\n\t\t\"GH_PLAYER\": \"Žaidėjas\",\n\t\t\"GH_BANKER\": \"Bankininkas\",\n\t\t\"GH_TIE\": \"Lygiosios\",\n\t\t\"GH_PLAYER_PAIR\": \"Žaidėjo pora\",\n\t\t\"GH_BANKER_PAIR\": \"Bankininko pora\",\n\t\t\"GH_GAME_WINNER\": \"Laimėtojas\",\n\t\t\"GH_GAME_WINSUM\": \"Suma\",\n\t\t\"GH_GAME_TOTAL\": \"Iš viso\",\n\t\t\"GH_GAME_STAKE\": \"Statymas\",\n\n\t\t\"GH_SPIN_TITLE\": \"SUKIMAS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Nemokami Sukimai\",\n\t\t\"GH_RESPINS_TITLE\": \"Pakartotiniai Sukimai\",\n\n\t\t\"GH_BALL_POSITION\": \"Kamuoliuko padėtis:\",\n\t\t\"GH_TRIO\": \"Trejetų\",\n\t\t\"GH_SPLIT\": \"Išskaidymų\",\n\t\t\"GH_STREET\": \"Gatvės\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Kampų\",\n\t\t\"GH_SIX_LINE\": \"Šešių linijų\",\n\t\t\"GH_COLUMN\": \"Stulpelių\",\n\t\t\"GH_FIRST_COLUMN\": \"1-as stulpelis\",\n\t\t\"GH_SECOND_COLUMN\": \"2-as stulpelis\",\n\t\t\"GH_THIRD_COLUMN\": \"3-as stulpelis\",\n\t\t\"GH_DOZEN\": \"Tuzino\",\n\t\t\"GH_FIRST_DOZEN\": \"Pirmi 12\",\n\t\t\"GH_SECOND_DOZEN\": \"Antri 12\",\n\t\t\"GH_THIRD_DOZEN\": \"Treti 12\",\n\t\t\"GH_STRAIGHT\": \"Tiesioginių statymų\",\n\t\t\"GH_COLOR\": \"Spalvų\",\n\t\t\"GH_BLACK\": \"Juoda\",\n\t\t\"GH_RED\": \"Raudona\",\n\t\t\"GH_EVEN_ODD\": \"Lyginių / nelyginių suma\",\n\t\t\"GH_EVEN\": \"Lyginis\",\n\t\t\"GH_ODD\": \"Nelyginis\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Šį turą buvo įjungtas žvilgčiojimas. Visiems laimėjimams ir statymams naudojami demonstraciniai pinigai.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Ši turą buvo aktyvūs nemokami turai.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tet: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Ajalugu\",\n\t\t\"GH_GAME_DETAILS\": \"Mängu üksikasjad\",\n\t\t\"GH_GAME_ID\": \"Mängu ID\",\n\t\t\"GH_ROUND_ID\": \"Vooru ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Serveri aja algus\",\n\t\t\"GH_SERVER_TIME_END\": \"Serveri aja lõpp\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Võiduliinid\",\n\t\t\"GH_LENGTH\": \"Sümbolivõidu pikkus\",\n\t\t\"GH_MULTIPLIER\": \"Kordaja\",\n\t\t\"GH_WIN_WAYS\": \"Võiduliinid\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Kobar\",\n\t\t\"GH_CLUSTER_COUNT\": \"Sümbolite arv\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Lisapanused\",\n\n\t\t\"HAND_0\": \"Käsi [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Käsi [1] (Split)\",\n\t\t\"HAND_1\": \"Käsi [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Käsi [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Käsi [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Käsi [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Käsi [1] (Kindlustus)\",\n\t\t\"INSURANCE_HAND_1\": \"Käsi [2] (Kindlustus)\",\n\t\t\"INSURANCE_HAND_2\": \"Käsi [3] (Kindlustus)\",\n\t\t\"DEALER\": \"Diileri\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Mängi\",\n\t\t\n\t\t\"STAKE\": \"Panus\",\n\t\t\"INSURANCE\": 'Kindlustus',\n\n\t\t\"GH_TRANSACTIONS\": \"Tehingud\",\n\t\t\"GH_TOTAL_STAKE\": \"Kogupanus\",\n\t\t\"GH_TOTAL_BET\": \"Kogupanus\",\n\t\t\"GH_TOTAL_WIN\": \"Koguvõit\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"enne panust\",\n\t\t\"GH_AFTER_STAKE\": \"pärast panust\",\n\t\t\"GH_AT_END\": \"lõpus\",\n\t\t\"GH_BALANCE\": \"Põhisaldo\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Boonussaldo\",\n\t\t\"GH_SESSION_BALANCE\": \"Sessiooni saldo\",\n\t\t\"GH_SESSION_FREEBETS\": \"Sessiooni boonussaldo\",\n\t\t\"GH_BONUS\": \"Boonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Võidu üksikasjad\",\n\t\t\"GH_SPIN_DETAILS\": \"Keerutuse üksikasjad\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Lisateave\",\n\t\t\"GH_GAME_RESULTS\": \"Mängutulemused\",\n\t\t\"GH_INITIAL_SPIN\": \"Esialgne keerutus\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpoti võit\",\n\t\t\"GH_SYMBOL_WINS\": \"Sümbolivõidud\",\n\t\t\"GH_LINE\": \"Liin\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Tasuta keerutuste võidud\",\n\t\t\"GH_FREE_SPIN\": \"Tasuta keerutus\",\n\t\t\"GH_RESPIN\": \"Korduskeerutus\",\n\t\t\"GH_RESPIN_WINS\": \"Korduskeerutuste võidud\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge võidud\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Kordaja võit\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifikaatori võit\",\n\t\t\"GH_BONUS_WIN\": \"Boonusvõit\",\n\t\t\"GH_INSTANT_WIN\": \"Kohene võit\",\n\t\t\"GH_NO_HISTORY\": \"Ajalugu ei ole saadaval\",\n\t\t\"GH_GAMBLE_WINS\": \"Õnnemängu võidud\",\n\t\t\"GH_NO_WINS\": \"Võite ei ole\",\n\t\t\"GH_ROUND_CORRECTION\": \"Ümardamine\",\n\t\t\"GH_LIMITED_WIN\": \"Võit (maks. limiit)\",\n\t\t\"WIN_EXCHANGE\": \"Tasuta keerutuste hind\",\n\t\t\"HALF_COLLECT\": \"Pool võidusummat on kogutud\",\n\t\t\"FULL_COLLECT\": \"Täielik võidusumma on kogutud\",\n\n\t\t\"GH_TABLE_ID\": \"Laua ID\",\n\t\t\"GH_PLAYER\": \"Mängija\",\n\t\t\"GH_BANKER\": \"Pankur\",\n\t\t\"GH_TIE\": \"Viik\",\n\t\t\"GH_PLAYER_PAIR\": \"Mängija paar\",\n\t\t\"GH_BANKER_PAIR\": \"Pankuri paar\",\n\t\t\"GH_GAME_WINNER\": \"Võitja\",\n\t\t\"GH_GAME_WINSUM\": \"Summa\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Panus\",\n\n\t\t\"GH_SPIN_TITLE\": \"KEERUTUS\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Tasuta Keerutused\",\n\t\t\"GH_RESPINS_TITLE\": \"Korduskeerutused\",\n\n\t\t\"GH_BALL_POSITION\": \"Kuuli positsioon:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Kahe numbri\",\n\t\t\"GH_STREET\": \"Rea\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Nurga\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Veeru\",\n\t\t\"GH_FIRST_COLUMN\": \"1. veerg\",\n\t\t\"GH_SECOND_COLUMN\": \"2. veerg\",\n\t\t\"GH_THIRD_COLUMN\": \"3. veerg\",\n\t\t\"GH_DOZEN\": \"Tosina\",\n\t\t\"GH_FIRST_DOZEN\": \"1. 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2. 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3. 12\",\n\t\t\"GH_STRAIGHT\": \"Üksiknumbri total\",\n\t\t\"GH_COLOR\": \"Värvi\",\n\t\t\"GH_BLACK\": \"Must\",\n\t\t\"GH_RED\": \"Punane\",\n\t\t\"GH_EVEN_ODD\": \"Paaris/Paaritu total\",\n\t\t\"GH_EVEN\": \"Paaris\",\n\t\t\"GH_ODD\": \"Paaritu\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Eelvaade oli aktiivne selle vooru jaoks. Kõik võidud ja panused on demorahas.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Selles voorus olid tasuta voorud aktiivsed.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\tsr: {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"Istorija\",\n\t\t\"GH_GAME_DETAILS\": \"Podaci o igri\",\n\t\t\"GH_GAME_ID\": \"ID igre\",\n\t\t\"GH_ROUND_ID\": \"Id zaokruživanja\",\n\t\t\"GH_SERVER_TIME_START\": \"Početak vremena servera\",\n\t\t\"GH_SERVER_TIME_END\": \"Kraj vremena servera\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Dobitne linije\",\n\t\t\"GH_LENGTH\": \"Dužina dobitka simbola\",\n\t\t\"GH_MULTIPLIER\": \"Multiplikator\",\n\t\t\"GH_WIN_WAYS\": \"Dobitne linije\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Skup\",\n\t\t\"GH_CLUSTER_COUNT\": \"Broj simbola\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Dodatne opklade\",\n\n\t\t\"HAND_0\": \"Ruka [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Ruka [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Ruka [2] (Razdvajanje)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Ruka [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Ruka [3] (Razdvajanje)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Ruka [1] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_1\": \"Ruka [2] (Osiguranje)\",\n\t\t\"INSURANCE_HAND_2\": \"Ruka [3] (Osiguranje)\",\n\t\t\"DEALER\": \"Krupijea\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Igraj\",\n\t\t\n\t\t\"STAKE\": \"Ulog\",\n\t\t\"INSURANCE\": 'Osiguranje',\n\n\t\t\"GH_TRANSACTIONS\": \"Transakcije\",\n\t\t\"GH_TOTAL_STAKE\": \"Ukupni Ulog\",\n\t\t\"GH_TOTAL_BET\": \"Ukupna Opklada\",\n\t\t\"GH_TOTAL_WIN\": \"Ukupni dobitak\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"pre uloga\",\n\t\t\"GH_AFTER_STAKE\": \"nakon uloga\",\n\t\t\"GH_AT_END\": \"na kraju\",\n\t\t\"GH_BALANCE\": \"Glavni račun\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus račun\",\n\t\t\"GH_SESSION_BALANCE\": \"Račun sesije\",\n\t\t\"GH_SESSION_FREEBETS\": \"Bonus račun sesije\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Podaci o dobitku\",\n\t\t\"GH_SPIN_DETAILS\": \"Podaci o okretanju\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Dodatni podaci\",\n\t\t\"GH_GAME_RESULTS\": \"Rezultati igre\",\n\t\t\"GH_INITIAL_SPIN\": \"Početno okretanje\",\n\t\t\"GH_JACKPOT_WIN\": \"Dobitak džekpota\",\n\t\t\"GH_SYMBOL_WINS\": \"Dobici simbola\",\n\t\t\"GH_LINE\": \"Linija\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Dobici od Besplatnih okretanja\",\n\t\t\"GH_FREE_SPIN\": \"Besplatno okretanje\",\n\t\t\"GH_RESPIN\": \"Ponovno okretanje\",\n\t\t\"GH_RESPIN_WINS\": \"Dobici od ponovnih okretanja\",\n\t\t\"GH_NUDGE\": \"Guranje\",\n\t\t\"GH_NUDGE_WINS\": \"Dobici od poguranih simbola\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Dobitak multiplikatora\",\n\t\t\"GH_MODIFIER_WIN\": \"Dobitak modifikatora\",\n\t\t\"GH_BONUS_WIN\": \"Bonus dobitak\",\n\t\t\"GH_INSTANT_WIN\": \"Instant dobitak\",\n\t\t\"GH_NO_HISTORY\": \"Nema dostupne istorije\",\n\t\t\"GH_GAMBLE_WINS\": \"Dobici od Kockanja\",\n\t\t\"GH_NO_WINS\": \"Nema dobitaka\",\n\t\t\"GH_ROUND_CORRECTION\": \"Ispravka zaokruživanja\",\n\t\t\"GH_LIMITED_WIN\": \"Dobitak (maks. ograničenje)\",\n\t\t\"WIN_EXCHANGE\": \"Cena besplatnih okretanja\",\n\t\t\"HALF_COLLECT\": \"Preuzeto je pola dobitka\",\n\t\t\"FULL_COLLECT\": \"Preuzet je ceo dobitak\",\n\n\t\t\"GH_TABLE_ID\": \"ID stola\",\n\t\t\"GH_PLAYER\": \"Igrač\",\n\t\t\"GH_BANKER\": \"Bankar\",\n\t\t\"GH_TIE\": \"Nerešeno\",\n\t\t\"GH_PLAYER_PAIR\": \"Igračev par\",\n\t\t\"GH_BANKER_PAIR\": \"Bankarev par\",\n\t\t\"GH_GAME_WINNER\": \"Dobitnik\",\n\t\t\"GH_GAME_WINSUM\": \"Zbir\",\n\t\t\"GH_GAME_TOTAL\": \"Ukupno\",\n\t\t\"GH_GAME_STAKE\": \"Ulog\",\n\n\t\t\"GH_SPIN_TITLE\": \"OKRETANJE\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Besplatnih Okretanja\",\n\t\t\"GH_RESPINS_TITLE\": \"Ponovna Okretanja\",\n\n\t\t\"GH_BALL_POSITION\": \"Pozicija kuglice:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1. kolona\",\n\t\t\"GH_SECOND_COLUMN\": \"2. kolona\",\n\t\t\"GH_THIRD_COLUMN\": \"3. kolona\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1. tuce\",\n\t\t\"GH_SECOND_DOZEN\": \"2. tuce\",\n\t\t\"GH_THIRD_DOZEN\": \"3. tuce\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Crno\",\n\t\t\"GH_RED\": \"Crveno\",\n\t\t\"GH_EVEN_ODD\": \"Par/Nepar\",\n\t\t\"GH_EVEN\": \"Par\",\n\t\t\"GH_ODD\": \"Nepar\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Isprobavanje je bilo aktivno za ovu rundu. Svi dobici i opklade obračunavali su se u demo novcu.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"U ovoj rundi bila je aktivna funkcija besplatnih rundi.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t},\n\t'en-US': {\n\t\t\"TOTAL_COINS_WIN\": \"Total coins win\",\n\t\t\"GH_HISTORY\": \"History\",\n\t\t\"GH_GAME_DETAILS\": \"Game details\",\n\t\t\"GH_GAME_ID\": \"Game ID\",\n\t\t\"GH_ROUND_ID\": \"Round ID\",\n\t\t\"GH_SERVER_TIME_START\": \"Server time start\",\n\t\t\"GH_SERVER_TIME_END\": \"Server time end\",\n\t\t\"aamsParticipationId\": \"ID AAMS\",\n\t\t\"aamsSessionId\": \"Sessione AAMS\",\n\n\t\t\"GH_WIN_WAYS_TITLE\": \"Win Ways\",\n\t\t\"GH_LENGTH\": \"Symbol win length\",\n\t\t\"GH_MULTIPLIER\": \"Multiplier\",\n\t\t\"GH_WIN_WAYS\": \"Win Ways\",\n\n\t\t\"GH_CLUSTER_TITLE\": \"Cluster\",\n\t\t\"GH_CLUSTER_COUNT\": \"Symbol count\",\n\n\t\t\"GH_SCATTER_WIN_TITLE\": \"Scatter win\",\n\n\t\t\"GH_HANDS\": \"Hands\",\n\t\t\"GH_SIDE_BETS\": \"Side bets\",\n\n\t\t\"HAND_0\": \"Hand [1]\",\n\t\t\"HAND_0_SIDE_0\": \"Hand [1] Sidebet - 21 Plus 3\",\n\t\t\"HAND_0_SIDE_1\": \"Hand [1] Sidebet - Any Pair\",\n\t\t\"HAND_0_SIDE_2\": \"Hand [1] Sidebet - Bustorama\",\n\n\t\t\"HAND_0_SPLIT_0\": \"Hand [1] (Split)\",\n\t\t\"HAND_1\": \"Hand [2]\",\n\t\t\"HAND_1_SPLIT_0\": \"Hand [2] (Split)\",\n\t\t\"HAND_1_SIDE_0\": \"Hand [2] Sidebet - 21 Plus 3\",\n\t\t\"HAND_1_SIDE_1\": \"Hand [2] Sidebet - Any Pair\",\n\t\t\"HAND_1_SIDE_2\": \"Hand [2] Sidebet - Bustorama\",\n\n\t\t\"HAND_2\": \"Hand [3]\",\n\t\t\"HAND_2_SPLIT_0\": \"Hand [3] (Split)\",\n\t\t\"HAND_2_SIDE_0\": \"Hand [3] Sidebet - 21 Plus 3\",\n\t\t\"HAND_2_SIDE_1\": \"Hand [3] Sidebet - Any Pair\",\n\t\t\"HAND_2_SIDE_2\": \"Hand [3] Sidebet - Bustorama\",\n\n\t\t\"INSURANCE_HAND_0\": \"Hand [1] (Insurance)\",\n\t\t\"INSURANCE_HAND_1\": \"Hand [2] (Insurance)\",\n\t\t\"INSURANCE_HAND_2\": \"Hand [3] (Insurance)\",\n\t\t\"DEALER\": \"Dealer\",\n\t\t\"ANTE\": \"Ante\",\n\t\t\"ANTE_BONUS\": \"Ante Bonus\",\n\t\t\"PAIR_BONUS\": \"Pair Bonus\",\n\t\t\"PLAY\": \"Play\",\n\t\t\n\t\t\"STAKE\": \"Stake\",\n\t\t\"INSURANCE\": 'Insurance',\n\n\t\t\"GH_TRANSACTIONS\": \"Transactions\",\n\t\t\"GH_TOTAL_STAKE\": \"Total stake\",\n\t\t\"GH_TOTAL_BET\": \"Total bet\",\n\t\t\"GH_TOTAL_WIN\": \"Total win\",\n\t\t\"GH_FEATURE_BUY_COST\": \"Feature Buy cost\",\n\t\t\"GH_FEATURE_BUY_NAME\": \"Feature Buy name\",\n\t\t\"GH_BEFORE_STAKE\": \"before stake\",\n\t\t\"GH_AFTER_STAKE\": \"after stake\",\n\t\t\"GH_AT_END\": \"at end\",\n\t\t\"GH_BALANCE\": \"Main balance\",\n\t\t\"GH_FREEBETS_BALANCE\": \"Bonus balance\",\n\t\t\"GH_SESSION_BALANCE\": \"Session balance\",\n\t\t\"GH_SESSION_FREEBETS\": \"Session bonus balance\",\n\t\t\"GH_BONUS\": \"Bonus\",\n\n\t\t\"GH_WIN_DETAILS\": \"Win details\",\n\t\t\"GH_SPIN_DETAILS\": \"Spin details\",\n\t\t\"GH_ADDITIONAL_DETAILS\": \"Additional Details\",\n\t\t\"GH_GAME_RESULTS\": \"Game results\",\n\t\t\"GH_INITIAL_SPIN\": \"Initial spin\",\n\t\t\"GH_JACKPOT_WIN\": \"Jackpot win\",\n\t\t\"GH_SYMBOL_WINS\": \"Symbol wins\",\n\t\t\"GH_LINE\": \"Line\",\n\t\t\"GH_FREE_SPIN_WINS\": \"Free spins wins\",\n\t\t\"GH_FREE_SPIN\": \"Free spin\",\n\t\t\"GH_RESPIN\": \"Respin\",\n\t\t\"GH_RESPIN_WINS\": \"Respin wins\",\n\t\t\"GH_NUDGE\": \"Nudge\",\n\t\t\"GH_NUDGE_WINS\": \"Nudge wins\",\n\t\t\"GH_MULTIPLIER_WINS\": \"Multiplier win\",\n\t\t\"GH_MODIFIER_WIN\": \"Modifier win\",\n\t\t\"GH_BONUS_WIN\": \"Bonus win\",\n\t\t\"GH_INSTANT_WIN\": \"Instant win\",\n\t\t\"GH_NO_HISTORY\": \"No history available\",\n\t\t\"GH_GAMBLE_WINS\": \"Gamble wins\",\n\t\t\"GH_NO_WINS\": \"No wins\",\n\t\t\"GH_ROUND_CORRECTION\": \"Rounding correction\",\n\t\t\"GH_LIMITED_WIN\": \"Win (max limit)\",\n\t\t\"WIN_EXCHANGE\": \"Free spins price\",\n\t\t\"HALF_COLLECT\": \"Half collected win\",\n\t\t\"FULL_COLLECT\": \"Full collected win\",\n\n\t\t\"GH_TABLE_ID\": \"Table ID\",\n\t\t\"GH_PLAYER\": \"Player\",\n\t\t\"GH_BANKER\": \"Banker\",\n\t\t\"GH_TIE\": \"Tie\",\n\t\t\"GH_PLAYER_PAIR\": \"Player Pair\",\n\t\t\"GH_BANKER_PAIR\": \"Banker Pair\",\n\t\t\"GH_GAME_WINNER\": \"Winner\",\n\t\t\"GH_GAME_WINSUM\": \"Sum\",\n\t\t\"GH_GAME_TOTAL\": \"Total\",\n\t\t\"GH_GAME_STAKE\": \"Stake\",\n\n\t\t\"GH_SPIN_TITLE\": \"SPIN\",\n\t\t\"GH_FREE_SPINS_TITLE\": \"Free Spins\",\n\t\t\"GH_RESPINS_TITLE\": \"Respins\",\n\n\t\t\"GH_BALL_POSITION\": \"Ball Position:\",\n\t\t\"GH_TRIO\": \"Trio\",\n\t\t\"GH_SPLIT\": \"Split\",\n\t\t\"GH_STREET\": \"Street\",\n\t\t\"GH_BASKET\": \"Basket\",\n\t\t\"GH_CORNER\": \"Corner\",\n\t\t\"GH_SIX_LINE\": \"Six Line\",\n\t\t\"GH_COLUMN\": \"Column\",\n\t\t\"GH_FIRST_COLUMN\": \"1st Column\",\n\t\t\"GH_SECOND_COLUMN\": \"2nd Column\",\n\t\t\"GH_THIRD_COLUMN\": \"3rd Column\",\n\t\t\"GH_DOZEN\": \"Dozen\",\n\t\t\"GH_FIRST_DOZEN\": \"1st 12\",\n\t\t\"GH_SECOND_DOZEN\": \"2nd 12\",\n\t\t\"GH_THIRD_DOZEN\": \"3rd 12\",\n\t\t\"GH_STRAIGHT\": \"Straight\",\n\t\t\"GH_COLOR\": \"Color\",\n\t\t\"GH_BLACK\": \"Black\",\n\t\t\"GH_RED\": \"Red\",\n\t\t\"GH_EVEN_ODD\": \"Even/Odd\",\n\t\t\"GH_EVEN\": \"Even\",\n\t\t\"GH_ODD\": \"Odd\",\n\t\t\"GH_SMALL_BIG\": \"1-18/19-36\",\n\t\t\"GH_SMALL\": \"1-18\",\n\t\t\"GH_BIG\": \"19-36\",\n\n\t\t\"GH_BLACKJACK\": \"BlackJack\",\n\t\t\"GH_DOUBLE_DOWN\": \"Double Down\",\n\t\t\"GH_OFFER_ACCEPTED\": \"Offer Accepted\",\n\t\t\"GH_SURRENDERED\": \"Surrendered\",\n\n\t\t\"GH_SNEAK_PEEK_ACTIVE\": \"Sneak peek was active for this round. All winnings and bets are demo money.\",\n\t\t\"GH_FREE_ROUNDS_ACTIVE\": \"Free rounds was active for this round.\",\n\n\t\t\"SCRATCH_MATCH_NUMBER_BONUS\": \"Match your numbers\",\n\t\t\"SCRATCH_SUM_OF_SEVEN_BONUS\": \"Reveal sum of 7\",\n\t\t\"SCRATCH_MATCH_SYMBOLS_BONUS\": \"Match 3 symbols\",\n\t\t\"SCRATCH_MATCH_AMOUNTS_BONUS\": \"Match 3 amounts\",\n\t\t\"SCRATCH_FREE_CARD\": \"Free card\",\n\t\t\"SCRATCH_CASH_PRIZE\": \"Cash prize\"\n\t}\n};\n\n\nmodule.exports = Texts;\n","'use strict';\n\nconst SpinScreenPartial = require('../../templates/Partials/slot/spinScreen.hbs');\nconst SpinDetailsPartial = require('../../templates/Partials/slot/spinDetails.hbs');\nconst GameDetailsPartial = require('../../templates/Partials/slot/gameDetails.hbs');\nconst TransactionsPartial = require('../../templates/Partials/slot/transactions.hbs');\nconst WinLinesDetailsPartial = require('../../templates/Partials/slot/winLinesDetails.hbs');\nconst DemoRoundNotePartial = require('../../templates/Partials/slot/demoRoundNote.hbs');\nconst FreeRoundNotePartial = require('../../templates/Partials/slot/freeRoundNote.hbs');\nconst JackpotDetailsPartial = require('../../templates/Partials/slot/jackpotDetails.hbs');\n\nmodule.exports = [\n\t{ name: 'winLinesDetails', template: WinLinesDetailsPartial },\n\t{ name: 'transactions', template: TransactionsPartial },\n\t{ name: 'spinDetails', template: SpinDetailsPartial },\n\t{ name: 'gameDetails', template: GameDetailsPartial },\n\t{ name: 'spinScreen', template: SpinScreenPartial },\n\t{ name: 'demoRoundNote', template: DemoRoundNotePartial },\n    { name: 'freeRoundNote', template: FreeRoundNotePartial },\n\t{ name: 'jackpotDetails', template: JackpotDetailsPartial },\n];","// External dependencies:\nif (typeof $ === 'undefined') console.error('#History - missing required library: jQuery');\nif (typeof moment === 'undefined') console.error('#History - missing required library: Moment.js');\nif (typeof _ === 'undefined') console.error('#History - missing required library: Underscore.js');\n\nrequire('./utils/helpers');\nconst History = require('./History');\n\n// Main ------------------------------------------------------\nconst com = window.com = window.com || {};\n\ncom.casino = com.casino || {};\n\ncom.casino.versions = com.casino.versions || {};\ncom.casino.versions.history = '@@APP_VERSION';\nconsole.info('%c @@APP_VERSION ', 'color: white; background: #5e9eec');\n\ncom.casino.History = History;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/scratch.hbs');\nconst CaySlotParserFactory = require('../parsers/scratch/cayetano/CayScratchParserFactory');\nconst Texts = require('../config/Texts');\n\n/**\n * CayScratchPanel. Manages how history is displayed for\n * Cayetano slot games\n *\n * @class\n * @extends {Panel}\n */\nclass CayScratchPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new CaySlotParserFactory();\n\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this.parser = this.parserFactory.createParser(gameId);\n        let container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n}\n\nmodule.exports = CayScratchPanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst CaySlotParserFactory = require('../parsers/slots/cayetano/CaySlotParserFactory');\nconst Texts = require('../config/Texts');\n\n/**\n * CaySlotPanel. Manages how history is displayed for\n * Cayetano slot games\n *\n * @class\n * @extends {Panel}\n */\nclass CaySlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new CaySlotParserFactory();\n\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this.parser = this.parserFactory.createParser(gameId);\n        let container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n}\n\nmodule.exports = CaySlotPanel;\n","const Panel = require('./Panel');\nconst tableTemplate = require('../../templates/table.hbs');\nconst CayTableParserFactory = require('../parsers/table/cayetano/CayTableParserFactory');\n/**\n * CayTablePanel. Manages how history is displayed for\n * Dop table games\n *\n * @class\n * @extends {Panel}\n */\nclass CayTablePanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(tableTemplate, null);\n\t\tthis.parserFactory = new CayTableParserFactory();\n\n\t\tdocument.head.appendChild(Object.assign(document.createElement(\"style\"), {textContent:\".bars-skin-default .casino-game-history.table { overflow-y: auto;}\"}))\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('cayTable')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\tthis.parser && this.parser.registerPartials && this.parser.registerPartials(gameId);\n\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = CayTablePanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst DefaultParser = require('../parsers/DefaultParser');\n\n\nclass DefaultPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, new DefaultParser());\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('nsgSlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = DefaultPanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst DopSlotParserFactory = require('../parsers/slots/dop/DopSlotParserFactory');\nconst Texts = require('../config/Texts');\nconst Config = require('../config/Config');\nconst dopLines = require('../config/DopLines').lines;\nconst EventsHub = require('../EventsHub');\n\n/**\n * DopSlotPanel. Manages how history is displayed for\n *\n * @class\n * @extends {Panel}\n */\nclass DopSlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new DopSlotParserFactory();\n\t\tthis.data = null;\n\t\tthis.gameId = null;\n\t\tthis.gamesWinLines = {}; // win lines for all games, fetched on demand\n\t\tthis.winLines = []; // current win lines set\n\t\tthis._currentWinLineSet = -2;\n\n\t\tthis._onAssetsLoadedCallback = this._onAssetsLoaded.bind(this);\n\t\tthis._attachListeners();\n\t}\n\n\tremoveListeners() {\n\t\tEventsHub.removeListener(EventsHub.events.ASSETS_LOADED, this._onAssetsLoadedCallback);\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('dopSlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.currentGameId = gameId;\n\t\tthis._currentWinLineSet = -2;\n\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\n\t\tlet container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n\n\tonRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\t\tif (!this.parsedData.reels) return;\n\n\t\tif (!this.gamesWinLines[this.currentGameId]) this.gamesWinLines[this.currentGameId] = [];\n\n\t\tlet notWays = !_.contains(Config.ways, gameId);\n\t\tlet notCluster = !_.contains(Config.cluster, gameId);\n\t\tif ((notWays && notCluster) || gameId === 'MidasGold') { // MidasGold is actually lines\n\t\t\tif (this.gamesWinLines[gameId].length < 1) {\n\t\t\t\tconst { isBundlerV2Build } = com.casino && com.casino.bundler || {};\n\t\t\t\tisBundlerV2Build && (assetsPath = 'games.history/');\n\t\t\t\t\n\t\t\t\tthis._fetchWinLines(gameId, assetsPath + 'lines/dop/')\n\t\t\t\t\t.then(() => this._addClickListeners());\n\t\t\t} else {\n\t\t\t\tthis._setWinLineSet(this.parsedData.winDetails.winLineSet);\n\t\t\t\tthis._showSpinScreen(0);\n\t\t\t\tthis._drawLines(() => {\n\t\t\t\t\tthis._highlightWinningLines(0);\n\t\t\t\t\tthis._addClickListeners();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis._addClickListeners();\n\t\t}\n\n\t\tthis._setUpInfiniScreenWrapper();\n\t}\n\n\tresize(e) {\n\t\tthis._fitLinesContainer();\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t/**\n\t * On freespin / respin label click\n\t * @param {Number} screenId\n\t * @param {Number} winLineSet\n\t */\n\t_changeSpinScreen(screenId, winLineSet) {\n\t\tthis._setWinLineSet(winLineSet);\n\n\t\tthis._unselectTilesAndLineLabels();\n\t\tthis._showSpinScreen(screenId);\n\t\tthis._drawLines(() => {\n\t\t\tthis._highlightWinningLines(screenId);\n\t\t\tthis._scrollScreenWrapperToRight();\n\t\t});\n\n\t\treturn false;\n\t}\n\n\t_attachListeners() {\n\t\tEventsHub.on(EventsHub.events.ASSETS_LOADED, this._onAssetsLoadedCallback);\n\t}\n\n\t_onAssetsLoaded() {\n\t\tthis._showSpinScreen(0);\n\t\tthis._drawLines(() => {\n\t\t\tthis._unselectTilesAndLineLabels();\n\t\t\tthis._highlightWinningLines(0);\n\t\t\tthis._scrollScreenWrapperToRight();\n\t\t});\n\t};\n\n\t/**\n\t * Attach win lines click event listeners\n\t * @private\n\t * @param  {Element} lineLabel Selected dom line label element\n\t */\n\t_onLineLabelSelect(lineLabel) {\n\t\tconst screenId = parseInt(lineLabel.parentElement.getAttribute('data-freespin-id'), 10);\n\t\tconst winLineSet = parseInt(lineLabel.getAttribute('data-spin-winline-set'), 10);\n\t\tconst multiline = _.contains(Config.multiline, this.currentGameId);\n\n\t\tif (multiline && this._currentWinLineSet !== winLineSet) {\n\t\t\tthis._setWinLineSet(winLineSet);\n\t\t\tthis._showSpinScreen(screenId);\n\t\t\tthis._drawLines(() => {\n\t\t\t\tthis._toggleLines(lineLabel);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._showSpinScreen(screenId);\n\t\t\tthis._toggleLines(lineLabel);\n\t\t}\n\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t_unselectTilesAndLineLabels() {\n\t\tconst container = this.container;\n\t\tcontainer.querySelectorAll(`.tile-highlight`).forEach((tileHighlight) => {\n\t\t\ttileHighlight.classList.remove('tile-highlight');\n\t\t});\n\t\tcontainer.querySelectorAll(`.line-details-active`).forEach((lineDetail) => {\n\t\t\tlineDetail.classList.remove('line-details-active');\n\t\t});\n\t\tcontainer.querySelectorAll(`.winline-path.winline-active`).forEach((winLine) => { //!may be slow with 100 free spin screens :/ TODO - test\n\t\t\twinLine.classList.remove('winline-active');\n\t\t});\n\t}\n\n\t/**\n\t * Hide non participating winline svgs and tile highlights, mark participating ones.\n\t * @param {Element} lineLabel - selected dom line label\n\t */\n\t_toggleLines(lineLabel) {\n\t\tlet highlightTilesOnly = false;\n\t\tif (_.contains(Config.ways, this.currentGameId) || _.contains(Config.cluster, this.currentGameId)) highlightTilesOnly = true;\n\n\t\tthis._unselectTilesAndLineLabels();\n\n\t\tif (highlightTilesOnly) {\n\t\t\tthis._highlightTilesOnly(lineLabel);\n\t\t} else {\n\t\t\tthis._highlightLineAndTiles(lineLabel);\n\t\t}\n\n\t\tlineLabel.classList.add('line-details-active');\n\t}\n\n\t/**\n\t * Shows the selected spin screen tiles and lines and hides the rest\n\t * @private\n\t * @param  {number} spinScreenId The spin screen id\n\t */\n\t_showSpinScreen(spinScreenId) {\n\t\tlet container = this.container;\n\t\tlet screen = container.querySelector(`.spin-screen-${spinScreenId}`);\n\n\t\tif (!screen) return;\n\n\t\tif (!screen.classList.contains('spin-screen-active')) {\n\t\t\t$('.spin-screen').hide().removeClass('spin-screen-active');\n\n\t\t\tscreen.style.display = 'table-row';\n\t\t\tscreen.classList.add('spin-screen-active');\n\t\t};\n\n\t\tlet screenLinks = container.querySelectorAll(`.free-spin-details`);\n\n\t\tfor (let i = 0; i < screenLinks.length; i++) {\n\t\t\tlet screenLink = screenLinks[i];\n\t\t\tlet freeSpinId = parseInt(screenLink.getAttribute('data-freespin-id'), 10);\n\n\t\t\tif (spinScreenId === freeSpinId) {\n\t\t\t\tscreenLink.classList.add('active');\n\t\t\t} else {\n\t\t\t\tscreenLink.classList.remove('active');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * When selecting spin screen - highlight all win line svgs for spin\n\t * @param {Number} spinScreenId\n\t */\n\t_highlightWinningLines(spinScreenId) {\n\t\tif (_.contains(Config.dontDrawLines, this.currentGameId)) return;\n\n\t\tlet container = this.container;\n\n\t\tlet linesList = container.querySelector(`.lines-list-${spinScreenId}`);\n\n\t\tif (linesList !== null) {\n\t\t\tlet children = linesList.children;\n\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tlet winLine = children[i];\n\t\t\t\tlet lineId = parseInt(winLine.getAttribute('data-line-id'), 10);\n\t\t\t\tlet lineGraphic = container.querySelector(`.winline-path-${lineId}`);\n\n\t\t\t\tif (lineGraphic !== null) {\n\t\t\t\t\tlineGraphic.classList.add('winline-active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * When a single line is selected - highlights(or removes the highlight) the winnings tiles of a line and the svg line\n\t * @private\n\t * @param  {Element}  line  Selected dom line label element\n\t * @param  {Boolean} selected Whether the line should be highlighted\n\t */\n\t_highlightLineAndTiles(lineLabel, selected = true) {\n\t\tconst container = this.container;\n\t\tconst lineId = lineLabel.getAttribute('data-line-id');\n\t\tconst screenId = lineLabel.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tconst lineTilesData = lineLabel.getAttribute('data-line-tiles');\n\t\tconst lineStart = parseInt(lineLabel.getAttribute('data-line-start'), 10);\n\t\tconst line = this.winLines[lineId];\n\t\tconst screen = container.querySelector(`.spin-screen-${screenId}`);\n\t\tlet lineLen = lineStart + parseInt(lineLabel.getAttribute('data-line-length'), 10);\n\n\t\tlet lineTiles = [];\n\n\t\t// active the selected line\n\t\tlet selectedLine = container.querySelector(`.winline-path-${lineId}`);\n\t\tif (selectedLine !== null) {\n\t\t\tselectedLine.classList.add('winline-active');\n\t\t}\n\n\t\tlineTilesData.split(',').forEach((itm, index) => {\n\t\t\tlineTiles[index] = parseInt(itm, 10);\n\t\t});\n\t\tfor (let i = lineStart; i < lineLen; i++) {\n\t\t\tif (lineTiles[i] === 0) {\n\t\t\t\tlineLen++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet tileIndex = line[i];\n\t\t\tlet reel = screen.children[i];\n\t\t\tlet tile = reel.children[tileIndex];\n\n\t\t\tif (selected) {\n\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t} else {\n\t\t\t\ttile.classList.remove('tile-highlight');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles symbol highlighting for ways and cluster slot games\n\t */\n\t_highlightTilesOnly(way){\n        let container = this.container;\n        let screenId = parseInt(way.parentElement.getAttribute('data-freespin-id')) || 0;\n        let screen = container.querySelector(`.spin-screen-${screenId}`);\n\n        let tiles = [];\n        let tilesData = way.getAttribute('data-line-tiles');\n        tilesData.split(',').forEach((itm, index) => {\n            tiles[index] = parseInt(itm, 10);\n        });\n\n\t\tlet tilesIndex = 0;\n\t\t_.each(screen.children, (reelContainer) => {\n\t\t\t_.each(reelContainer.children, (tileContainer) => {\n\t\t\t\tif (tiles[tilesIndex] === 0) tileContainer.classList.remove('tile-highlight');\n\t\t\t\telse tileContainer.classList.add('tile-highlight');\n\t\t\t\ttilesIndex++;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n * Waits for all tiles to load\n * @private\n * @param {function} callback\n */\n\t_onLastTileLoaded(callback) {\n\t\tlet screen = this.container.querySelector('.spin-screen-active');\n\n\t\tif (!screen) return;\n\n\t\tlet tileImg = [...screen.querySelectorAll('.tile-img')].pop();\n\n\t\tif (!tileImg) return;\n\n\t\tlet { naturalWidth, naturalHeight, clientWidth, clientHeight } = tileImg;\n\n\t\tif (tileImg && naturalWidth && naturalHeight && clientWidth && clientHeight) return callback();\n\n\t\ttileImg.addEventListener('load', this._onLastTileLoaded.bind(this, callback));\n\t}\n\n\t/**\n\t * Builds win lines using the <Polyline> element\n\t * @private\n\t * @param {number} reelOffsets Offsets of reels if any\n\t * @param {function} callback\n\t * @param {number} lineSize The line thickness, percentage value\n\t */\n\t_buildSVGLines(reelOffsets = 0, callback, lineSize = 0.7) {\n\t\tlet screen = this.container.querySelector('.spin-screen-active'),\n\t\t\ttileImg = [...screen.querySelectorAll('.tile-img')].find(tile => tile.clientWidth && tile.clientHeight),\n\t\t\treels = this.parsedData.reels.length,\n\t\t\ttiles = this.parsedData.reels[0].length,\n\t\t\ttileWidth = tileImg.clientWidth,\n\t\t\ttileHeight = tileImg.clientHeight,\n\t\t\tsvgWidth = tileWidth * reels,\n\t\t\tsvgHeight = tileHeight * tiles;\n\n\t\tthis._resizeSVG(svgWidth, svgHeight);\n\n\t\tlet linesContainer = this.container.querySelector('.lines-container');\n\t\twhile (linesContainer.firstChild) {\n\t\t\tlinesContainer.removeChild(linesContainer.firstChild);\n\t\t}\n\n\t\tlet row = 0;\n\t\tlet alignOffset = 0;\n\t\tconst svgNS = 'http://www.w3.org/2000/svg';\n\n\t\tconst getVertOffset = (tileIndex, index, reelOffsets) => {\n\t\t\tconst reelOffset = reelOffsets ? reelOffsets[index] : 0;\n\t\t\treturn (tileIndex * tileHeight) + (reelOffset * tileHeight); // start drawing from the top + some reelOffset, if any\n\t\t};\n\n\t\tlet linesPadding = {\n\t\t\ttop: 0.25,\n\t\t\tbottom: 0.25\n\t\t};\n\n\t\tlet linesOffsetBuffer = this._calculateLinesBufferArray(tileHeight, linesPadding, this.winLines);\n\n\t\tthis.winLines.forEach((winline, index) => {\n\t\t\tlet tileIndex = winline[0];\n\t\t\tlet startX = tileWidth/2;\n\t\t\tlet startY = getVertOffset(tileIndex, 0, reelOffsets);\n\t\t\tlet endX = startX+tileWidth;\n\n\t\t\tlet pointsStr = `0, ${startY} ${startX}, ${startY} `;\n\n\t\t\tlet endY = getVertOffset(winline[1], 1, reelOffsets);\n\n\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\tstartX += tileWidth;\n\t\t\tendX += tileWidth;\n\n\t\t\tfor (let i = 1; i < winline.length; i++) {\n\n\t\t\t\ttileIndex = winline[i];\n\n\t\t\t\tstartY = getVertOffset(tileIndex, i, reelOffsets);\n\t\t\t\tlet nextTileIndex = winline[i + 1] !== undefined ? winline[i + 1] : winline[winline.length - 1];\n\n\t\t\t\tendY = getVertOffset(nextTileIndex, (winline[i + 1] !== undefined) ? (i + 1) : i, reelOffsets);\n\n\t\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\t\tstartX += tileWidth;\n\t\t\t\tendX += tileWidth;\n\t\t\t}\n\n\t\t\tlet line = document.createElementNS(svgNS, 'polyline');\n\n\t\t\tline.setAttribute('points', pointsStr);\n\n\t\t\tline.setAttribute('fill', 'none');\n\t\t\t// а percentage value is always computed as a percentage of the normalized viewBox diagonal length\n\t\t\tline.setAttribute('stroke-width', `${lineSize}%`);\n\t\t\tline.setAttribute('class', `winline-path winline-path-${index}`);\n\n\t\t\t// calculate lines offset from eachother\n\t\t\trow = winline[0];\n\t\t\talignOffset = linesOffsetBuffer[row].currentOffset;\n\t\t\tline.setAttribute('transform', `translate(0, ${alignOffset})`);\n\t\t\tlinesOffsetBuffer[row].currentOffset += linesOffsetBuffer[row].offset;\n\n\t\t\tlinesContainer.appendChild(line);\n\t\t});\n\n\t\tif (callback) callback();\n\n\t\tthis._fitLinesContainer();\n\t}\n\n\t/**\n\t * Fetch the file with lines\n\t * @param {String) gameId\n     * @param {String) providerPath Path to the js file with lines\n\t */\n\t_fetchWinLines(gameId, providerPath) {\n\t\tlet checksum = dopLines.filter(game => game.id === gameId)[0].hash;\n\t\treturn fetch(`${providerPath + gameId}.js?c=${checksum}`)\n\t\t\t.then((response) => {\n\t\t\t\tif (!response.ok) return [];\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then((linesArr) => {\n\t\t\t\tif (linesArr && linesArr.length > 0) {\n\t\t\t\t\tthis.gamesWinLines[this.currentGameId] = linesArr;\n\n\t\t\t\t\tthis._setWinLineSet(this.parsedData.winDetails.winLineSet);\n\t\t\t\t\tthis._showSpinScreen(0);\n\n\t\t\t\t\treturn this._drawLines(() => {\n\t\t\t\t\t\tthis._unselectTilesAndLineLabels();\n\t\t\t\t\t\tthis._highlightWinningLines(0);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_setWinLineSet(winLineSet = -1) {\n\t\tconst multiline = _.contains(Config.multiline, this.currentGameId);\n\t\tif (multiline) {\n\t\t\tif (winLineSet < 0) return console.error(\"Missing win lines set for win lines\");\n\t\t\tthis.winLines = this.gamesWinLines[this.currentGameId][winLineSet];\n\t\t} else {\n\t\t\tthis.winLines = this.gamesWinLines[this.currentGameId];\n\t\t}\n\n\t\tthis._currentWinLineSet = winLineSet;\n\t}\n\n\t_drawLines(callback) {\n\t\tlet dontDrawLines = _.contains(Config.dontDrawLines, this.currentGameId);\n\n\t\tif (dontDrawLines) return callback && callback();\n\n\t\tconst offsetsData = Config.gameReelsOffsets.find((item) => {\n\t\t\treturn item.gameId === this.currentGameId;\n\t\t});\n\t\t// If there is an offset data, pass its offset prop, otherwise undefined.\n\t\tthis._onLastTileLoaded(() => {\n\t\t\tthis._buildSVGLines(offsetsData && offsetsData.offsets, callback);\n\t\t});\n\t}\n\n\t_calculateLinesBufferArray(tileHeight, linesPadding, linesArr) {\n\t\tlet linesOffsetBuffer = [];\n\t\tlet linesFirstTileCount = {};\n\t\tfor (let i = 0, len = linesArr.length; i < len; i+=1) {\n\t\t\tlet firstTileInLineArr = linesArr[i][0];\n\n\t\t\tif (!linesFirstTileCount[firstTileInLineArr]) {\n\t\t\t\tlinesFirstTileCount[firstTileInLineArr] = 0;\n\t\t\t}\n\t\t\tlinesFirstTileCount[firstTileInLineArr]+=1;\n\t\t}\n\n\t\tfor (let key in linesFirstTileCount) {\n\t\t\tlet linesContainerHeight = tileHeight - (tileHeight * linesPadding.top) - (tileHeight * linesPadding.bottom); // Calculate the actual height of the container used for drawing the lines\n\t\t\tlet lineOffset = linesContainerHeight / linesFirstTileCount[key]; // Calculate the offset between each line\n\n\t\t\tlinesOffsetBuffer[key] = {\n\t\t\t\toffset: lineOffset,\n\t\t\t\tcurrentOffset: (tileHeight * linesPadding.top) + lineOffset / 2 // the starting offset for the first line\n\t\t\t};\n\t\t}\n\n\t\treturn linesOffsetBuffer;\n\t}\n\n\t/**\n\t * Resize svg element\n\t * @private\n\t * @param {number} width\n\t * @param {number} height\n\t */\n\t_resizeSVG(width, height) {\n\t\tlet svg = this.container.querySelector('.lines-overlay');\n\n\t\tsvg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\t\tsvg.setAttribute(\"width\", `${width}`);\n\t\tsvg.setAttribute(\"height\", `${height}`);\n\n\t\tsvg.style.maxHeight = 'none';\n\t}\n\n\t/**\n\t * Fit the lines overlay container to the reels screen size\n\t *\n\t * @private\n\t */\n\t_fitLinesContainer() {\n\t\tconst linesOverlay = this.container.querySelector('.lines-overlay');\n\t\tconst mainScreen = this.container.querySelector('table.main-screen.reels');\n\n\t\tif (!(linesOverlay || mainScreen)) return;\n\n\t\tlinesOverlay.style.height = `${mainScreen.offsetHeight}px`;\n\t}\n\n\t_addClickListeners() {\n\t\tlet winLinesLabels = this.container.querySelectorAll('.line-details');\n\n\t\tfor (let i = 0; i < winLinesLabels.length; i++) {\n\t\t\tlet lineItem = winLinesLabels[i];\n\t\t\tlineItem.addEventListener('click', this._onLineLabelSelect.bind(this, lineItem));\n\t\t}\n\n\t\tlet freespinScreenDetails = this.container.querySelectorAll('.free-spin-details');\n\n\t\tfor (let i = 0; i < freespinScreenDetails.length; i++) {\n\t\t\tconst itm = freespinScreenDetails[i];\n\t\t\tconst id = parseInt(itm.getAttribute('data-freespin-id'), 10);\n\t\t\tconst winLineSet = parseInt(itm.getAttribute('data-spin-winline-set'), 10);\n\n\t\t\titm.addEventListener('click', this._changeSpinScreen.bind(this, id, winLineSet));\n\t\t}\n\t}\n\n\t_setUpInfiniScreenWrapper() {\n\t\tif (!Config.infiniReels.includes(this.gameId)) return;\n\n\t\tconst screenWrapper = this.container.querySelector(`.spin-screen-wrapper`);\n\n\t\tif(!screenWrapper || screenWrapper.classList.contains('infini-reels')) return;\n\n\t\tscreenWrapper.classList.add('infini-reels');\n\n\t\tthis._scrollScreenWrapperToRight();\n\t}\n\n\t_scrollScreenWrapperToRight() {\n\t\tif (!Config.infiniReels.includes(this.gameId)) return;\n\n\t\tconst screen = this.container.querySelector('.spin-screen-active');\n\n\t\tif(!screen || !screen.children.length) return;\n\n\t\tscreen.children[screen.children.length-1].scrollIntoView();\n\t}\n}\n\nmodule.exports = DopSlotPanel;\n","const Panel = require('./Panel');\nconst tableTemplate = require('../../templates/table.hbs');\nconst DopTableParserFactory = require('../parsers/table/dop/DopTableParserFactory');\n/**\n * DopTablePanel. Manages how history is displayed for\n * Dop table games\n *\n * @class\n * @extends {Panel}\n */\nclass DopTablePanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(tableTemplate, null);\n\t\tthis.parserFactory = new DopTableParserFactory();\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Bet server response data\n\t * @param {String} adapter Current game type('dopBlackjack')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\treturn super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails)\n\t}\n}\n\nmodule.exports = DopTablePanel;\n","const Panel = require('./Panel');\nconst slotTemplate = require('../../templates/slots.hbs');\nconst NSGSlotParserFactory = require('../parsers/slots/nsg/NSGSlotParserFactory');\nconst gameLines = require('../config/NSGLines');\n\n/**\n * NSGSlotPanel. Manages how history is displayed for\n * NSG slot games\n *\n * @class\n * @extends {Panel}\n */\nclass NSGSlotPanel extends Panel {\n\n\tconstructor() {\n\t\tsuper(slotTemplate, null);\n\t\tthis.parserFactory = new NSGSlotParserFactory();\n\t\tthis.gameLines = gameLines;\n\t\tthis.container.setAttribute('class', 'history-panel-container'); // check that\n\t}\n\n\t/**\n\t * Render history screen state\n\t *\n\t * @param {String} gameId Current game id as a string\n\t * @param {Object} data Spin server response data\n\t * @param {String} adapter Current game type('caySlot')\n\t * @param {String} assetsPath Current game assets path\n\t * @return {String} The renderered html code as a string\n\t */\n\trender(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n\t\tthis.parser = this.parserFactory.createParser(gameId);\n\t\tthis.currGameWinLines = this._NSG2DopLines(this.gameLines[gameId],gameId);\n\n\t\tlet container = super.render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails);\n\n\t\treturn container;\n\t}\n\n\tonRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\t\tlet winLines = this.container.querySelectorAll('.line-details');\n\n\t\tfor (let i = 0; i < winLines.length; i++) {\n\t\t\tlet lineItem = winLines[i];\n\n\t\t\tthis._attachEventListeners(lineItem);\n\t\t}\n\n\t\tlet freespinScreenDetails = this.container.querySelectorAll('.free-spin-details');\n\n\t\tfor (let i = 0; i < freespinScreenDetails.length; i++) {\n\n\t\t\tlet itm = freespinScreenDetails[i];\n\n\t\t\titm.addEventListener('click', () => {\n\t\t\t\tlet id = parseInt(itm.getAttribute('data-freespin-id'), 10);\n\n\t\t\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\t\t\t$('.line-details').removeClass('line-details-active');\n\t\t\t\tthis._showSpinScreen(id);\n\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\tconst offsetsData = this.parser.getGameConfig().Reels;\n\t\t// If there is an offset data, pass its offset prop, otherwise undefined.\n\t\tthis._generateWinLinesSVG(offsetsData && offsetsData.offsets);\n\t\t\n\t\t// wait for the svg lines to render fully\t\n\t\tsetTimeout(()=>{\n\t\t\t// show main spin screen\n\t\t\tthis._showSpinScreen(0);\n\t\t}, 500);\n\t}\n\n\t_NSG2DopLines(NSGLines, gameId){\n\t\tlet DopLines = [];\n\t\tlet lines = [];\n\t\tlet gameConfig = this.parser.getGameConfig();\n\t\t//compiler fix because sort object by keys...\n\t\tfor(let line in NSGLines){\n\t\t\tlet index = NSGLines[line];\n\t\t\tif(gameConfig.Reels.linesMap){\n\t\t\t\tline = gameConfig.Reels.linesMap[line];\n\t\t\t}\n\t\t\tlines.push([index,line]);\n\t\t}\n\n\t\tNSGLines = lines.sort(function(a,b){\n            if(a[0]==b[0]){\n                return 0;\n            }\n            return a[0] < b[0]?-1:1;\n\t\t});\n\t\t\n\t\tNSGLines.forEach(a=>{\n\t\t\tlet index = a[0];\n\t\t\tlet p = a[1];\n\t\t\tlet DopLine = [];\n\n\t\t\tfor(let i=0;i<p.length;i++){\n\t\t\t\tDopLine.push(Math.abs(gameConfig.Reels.SCREEN_INDEX-p[i]));\n\t\t\t}\n\t\t\tDopLines.push(DopLine);\n\t\t});\n\t\t\n\t\treturn DopLines;\n\t}\n\n\t/**\n\t * Attatch win lines hover event listeners\n\t * @private\n\t * @param  {Element} item The target DOM element\n\t */\n\t_attachEventListeners(item) {\n\t\tlet container = this.container;\n\n\t\titem.addEventListener('click', () => {\n\t\t\tlet lineScreenId = parseInt(item.parentElement.getAttribute('data-freespin-id'), 10);\n\n\t\t\tthis._showSpinScreen(lineScreenId);\n\n\t\t\t$('.line-details').removeClass('line-details-active');\n\t\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\t\tif(this.currGameWinLines && typeof this.currGameWinLines[0] != 'undefined'){\n\t\t\t\tthis._highlightLine(item);\n\t\t\t\titem.classList.add('line-details-active');\n\t\t\t}else{\n\t\t\t\tthis._highlightTiles(item);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Shows the selected spin screen and hides the rest\n\t * @private\n\t * @param  {number} id The spin screen id\n\t */\n\t_showSpinScreen(id) {\n\t\tlet container = this.container;\n\n\t\t$('.spin-screen').hide().removeClass('spin-screen-active');\n\n\t\tlet screen = container.querySelector(`.spin-screen-${id}`);\n\n\t\tif(!screen) return;\n\n\t\tscreen.style.display = 'table-row';\n\t\tscreen.classList.add('spin-screen-active');\n\n\t\tlet winLines = container.querySelectorAll('.winline-path');\n\n\t\tfor (let i = 0; i < winLines.length; i++) {\n\t\t\tlet line = winLines[i];\n\n\t\t\tremoveClassSVG(line, 'winline-active');\n\t\t}\n\n\t\tlet linesList = container.querySelector(`.lines-list-${id}`);\n\n\t\tif (linesList !== null) {\n\t\t\tlet children = linesList.children;\n\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tlet winLine = children[i];\n\t\t\t\tlet lineId = parseInt(winLine.getAttribute('data-line-id'), 10);\n\t\t\t\tlet lineGraphic = container.querySelector(`.winline-path-${lineId}`);\n\n\t\t\t\tif (lineGraphic !== null) {\n\t\t\t\t\taddClassSVG(lineGraphic, 'winline-active');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet screenLinks =  container.querySelectorAll(`.free-spin-details`);\n\n\t\tfor (let i = 0; i < screenLinks.length; i++) {\n\t\t\tlet screenLink = screenLinks[i];\n\t\t\tlet freeSpinId = parseInt(screenLink.getAttribute('data-freespin-id'), 10);\n\n\t\t\tif (id === freeSpinId) {\n\t\t\t\tscreenLink.classList.add('free-spin-details-active');\n\t\t\t} else {\n\t\t\t\tscreenLink.classList.remove('free-spin-details-active');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Highlights(or removes the highlight) the winnings tiles of a line\n\t * @private\n\t * @param  {Element}  line  Selected dom line element\n\t * @param  {Boolean} selected Whether the line should be highlighted\n\t */\n\t_highlightLine(line, selected = true) {\n\t\tlet container = this.container;\n\t\tlet lineId = line.getAttribute('data-line-id');\n\t\tlet screenId = line.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tlet lines = this.currGameWinLines;\n\t\tlet lineArr = lines[lineId];\n\n\t\tlet screen = $(`.spin-screen-${screenId}`)[0];\n\n\t\t// deactivate all win lines\n\t\tlet activeLines = container.querySelectorAll('.winline-path.winline-active');\n\n\t\tfor (let activeLine of activeLines) {\n\t\t\tremoveClassSVG(activeLine, 'winline-active');\n\t\t}\n\t\t// activate the selected line\n\t\tlet selectedLine = container.querySelector(`.winline-path-${lineId}`);\n\n\t\tif (selectedLine !== null) {\n\t\t\taddClassSVG(selectedLine, 'winline-active');\n\t\t}\n\n\t\tlet lineStart = parseInt(line.getAttribute('data-line-start'), 10);\n\t\tlet lineLen = lineStart + parseInt(line.getAttribute('data-line-length'), 10);\n\t\tlet lineTiles = [];\n\t\tlet lineTilesData = line.getAttribute('data-line-tiles');\n\t\t\n\t\tlineTilesData.split(',').forEach((itm, index) => {\n\t\t\tlineTiles[index] = parseInt(itm, 10);\n\t\t});\n\t\tfor (let i = lineStart; i < lineLen; i++) {\n\t\t\tif (lineTiles[i] === 0) {\n\t\t\t\tlineLen++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet tileIndex = lineArr[i];\n\t\t\tlet reel = screen.children[i];\n\t\t\tlet tile = reel.children[tileIndex];\n\n\t\t\tif (selected) {\n\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t} else {\n\t\t\t\ttile.classList.remove('tile-highlight');\n\t\t\t}\n\t\t}\n\t}\n\n\n\t_highlightTiles(item){\n\t\tlet screenId = item.parentElement.getAttribute('data-freespin-id') || 0;\n\t\tlet screen = $(`.spin-screen-${screenId}`)[0];\n\t\t$('.tile-highlight').removeClass('tile-highlight');\n\t\tlet cells = JSON.parse(item.getAttribute('data-line-tiles'));\n\t\tfor(let x in cells){\n\t\t\tfor(let cy in cells[x]){\n\t\t\t\tlet y = cells[x][cy];\n\t\t\t\tlet reel = screen.children[x];\n\t\t\t\tlet tile = reel.children[y];\n\t\t\t\ttile.classList.add('tile-highlight');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fills the win lines svg document\n\t * @private\n\t */\n\t_generateWinLinesSVG(reelOffsets) {\n\t\tlet tileImg = this.container.querySelector('.tile-img');\n\n\t\tif (tileImg && (!tileImg.naturalWidth || !tileImg.naturalHeight)) {\n        \t// console.warn('no sizes, waiting img loading');\n\t\t\ttileImg.addEventListener('load', this._generateWinLinesSVG.bind(this, reelOffsets));\n\n\t\t\treturn;\n\t\t}\n\t\ttileImg && this._buildLinesPolyline(tileImg.naturalWidth, tileImg.naturalHeight, reelOffsets);\n\t}\n\n\t/**\n\t * Builds win lines using the <Polyline> element\n\t * @private\n\t * @param {number} tileWidth Tile image width\n\t * @param {number} tileHeight Tile image height\n\t * @param {number} reelOffsets Offsets of reels if any\n\t * @param {number} lineSize The line thickness, defaults to 5\n\t */\n\t_buildLinesPolyline(tileWidth, tileHeight, reelOffsets = 0, lineSize = 5) {\n\n\t\t// Scale tile natural size according to the svg container size\n\t\tlet svg = this.container.querySelector('.lines-overlay');\n\t\tlet svgWidth = parseInt(svg.getAttribute('width'), 10);\n\t\tlet len = typeof this.currGameWinLines[0] != 'undefined' ? this.currGameWinLines[0].length : 1;\n\t\tlet scaleRatio = svgWidth / (tileWidth * len);\n\n\t\ttileWidth *= scaleRatio;\n\t\ttileHeight *= scaleRatio;\n        // console.warn('_fPolyline', tileWidth, tileHeight, scaleRatio);\n\n\t\tlet linesContainer = this.container.querySelector('.lines-container');\n\t\tlet linesArr = this.currGameWinLines || [];\n        let betweenLines = 6;\n\t\tlet row = 0;\n\t\tlet alignOffset = 0;\n\t\tlet buffer = [-25, -25, -25, -25, -25, -25, -25, -25];// sets default value for each buffer element\n\t\tlet svgNS = 'http://www.w3.org/2000/svg';\n\n\t\tconst getVertOffset = (tileIndex, index, reelOffsets) => {\n\t\t\tconst reelOffset = reelOffsets ? reelOffsets : 0;\n\t\t\treturn ((tileIndex * tileHeight) + tileHeight / 2) + reelOffset;\n\t\t};\n\t\t\n\t\t\n\t\tlinesArr.forEach((lineArr, index) => {\n\t\t\tlet tileIndex = lineArr[0];\n\t\t\tlet startX = tileWidth/2;\n\t\t\tlet startY = getVertOffset(tileIndex, 0, reelOffsets);\n\t\t\tlet endX = startX+tileWidth;\n\n\t\t\tlet pointsStr = `0, ${startY} ${startX}, ${startY} `;\n\n\t\t\tlet endY = getVertOffset(lineArr[1], 1, reelOffsets);\n\n\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\tstartX += tileWidth;\n\t\t\tendX += tileWidth;\n\n\t\t\tfor (let i = 1; i < lineArr.length; i++) {\n\t\t\t\ttileIndex = lineArr[i];\n\t\t\t\tstartY = getVertOffset(tileIndex, i, reelOffsets);\n\t\t\t\tlet nextTileIndex = lineArr[i + 1] !== undefined ? lineArr[i + 1] : lineArr[lineArr.length - 1];\n\n\t\t\t\tendY = getVertOffset(nextTileIndex, (lineArr[i + 1] !== undefined) ? (i + 1) : i, reelOffsets);\n\n\t\t\t\tpointsStr += `${startX}, ${startY} ${endX}, ${endY} `;\n\n\t\t\t\tstartX += tileWidth;\n\t\t\t\tendX += tileWidth;\n\t\t\t}\n\n\t\t\tlet line = document.createElementNS(svgNS, 'polyline');\n\n\t\t\tline.setAttribute('points', pointsStr);\n\n\t\t\tline.setAttribute('fill', 'none');\n\t\t\tline.setAttribute('stroke-width', lineSize);\n\t\t\tline.setAttribute('class', `winline-path winline-path-${index}`);\n\n\t\t\t// calculate lines offset from eachother\n\t\t\trow = lineArr[0];\n\t\t\talignOffset = buffer[row];\n\t\t\tbuffer[row] += betweenLines;\n\t\t\tline.setAttribute('transform', `translate(0, ${alignOffset})`);\n\n\t\t\tlinesContainer.appendChild(line);\n\t\t});\n\t}\n}\n\n/**\n * Replacer for Element.classList.remove since classList is not supported in IE11 for SVG elements\n * @param  {Element} element The svg element\n * @param  {[type]} classValue The class string to be removed\n */\nfunction removeClassSVG(element, classValue) {\n\tlet className = element.className.baseVal;\n\n\tif (className && className.indexOf(classValue) !== -1) {\n\t\telement.className.baseVal = className.replace(classValue, '').replace(/\\s+/g, ' ');\n\t}\n}\n\n/**\n * Replacer for Element.classList.add since classList is not supported in IE11 for SVG elements\n * @param  {Element} element The svg element\n * @param  {[type]} classValue The class string to be added\n */\nfunction addClassSVG(element, classValue) {\n\tif (!element.className) {\n\t\telement.className = classValue;\n\n\t\treturn;\n\t}\n\tif (element.className.baseVal.indexOf(classValue) === -1)\t\t{ element.className.baseVal += ` ${classValue}`; }\n}\n\nmodule.exports = NSGSlotPanel;\n","const Handlebars = require('hbsfy/runtime');\nconst EventsHub = require('../EventsHub');\nconst Texts = require('../config/Texts');\nconst SlotPartials = require('../config/slotPartials');\nconst AssetsHelper = require('../utils/AssetsHelper');\nconst FeatureBuyParser = require('../utils/FeatureBuyParser');\n\nclass Panel {\n\n    /**\n     * @param {DefaultParser} template The server data parser\n     * @param {Function} parser The output template\n     */\n    constructor(template, parser) {\n\n        this._assetsHelper = new AssetsHelper();\n\n        /** @type {Function} The rendering template */\n        this.template = template;\n\n        /** @type {DefaultParser} The server data parser */\n        this.parser = parser;\n\n        /** @type {FeatureBuyParser} The parser to parse FeatureBuy data */\n        this.featureBuyParser = new FeatureBuyParser(this._assetsHelper);\n\n        /** @type {Element} The DOM container to be used for the screen output */\n        this.container = document.createElement('div');\n        this.container.className = 'history-panel-container';\n    }\n\n    /**\n     * Render history screen state\n     *\n     * @param {String} gameId\n     * @param {Object} data\n     * @param {String} adapter\n     * @param {String} assetsPath\n     * @param {String} language\n     * @param {String} symbolsPath\n     * @return {HTMLElement}\n     */\n    render(gameId, data, adapter, assetsPath, language, symbolsPath, hideGameDetails, hideTransactionDetails) {\n        this._registerPartials();\n\n        /** @type {string} The current game id */\n        this.gameId = gameId;\n\n        /** @private @type {Object} */\n        this._data = data;\n\n        /** @type {string} The current adapter */\n        this._adapter = adapter;\n\n        /** @type {string} The current game assets path */\n        this._assetsPath = assetsPath;\n\n        /** @type {boolean} whether to hide Game Details */\n        this._hideGameDetails = hideGameDetails;\n\n        /** @type {boolean} whether to hide Transaction Details */\n        this._hideTransactionDetails = hideTransactionDetails;\n\n        let container = this.container;\n        let parsedData = this.parser.sanitizeData(this._data);\n\n        this._assetsHelper.setOptions({\n            cdn: symbolsPath\n        });\n\n        if (parsedData.hasGameData) {\n            parsedData = this.parser.parse(this.gameId, parsedData, this._adapter);\n        }\n\n        this.parsedData = parsedData;\n\n        this.featureBuyParser.parse(gameId, language, parsedData).then(data => {\n            this._assetsHelper.getTiles({\n                games: [this.gameId],\n                lang: language,\n                onComplete: (result) => {\n                    let output;\n\n                    try {\n                        output = this.template({\n                            data: data, //see .tiles\n                            texts: Texts,\n                            assetsPath: this._assetsPath,\n                            tiles: result[this.gameId],\n                            gameId,\n                            hideGameDetails: this._hideGameDetails,\n                            hideTransactionDetails: this._hideTransactionDetails\n                        });\n                    } catch (error) {\n                        console.error(`#History: error while rendering history template`, error);\n                    }\n\n                    let outputHtml = $.parseHTML(output)[0];\n                    let assetsToLoad = outputHtml.querySelectorAll('img');\n                    let assetCount = assetsToLoad.length;\n                    let counter = 0;\n\n                    for (let i = 0; i < assetCount; i++) {\n                        assetsToLoad[i].onload = () => {\n                            counter++;\n                            if (counter >= assetCount) EventsHub.emit(EventsHub.events.ASSETS_LOADED);\n                        };\n                    }\n\n                    $(container).html(outputHtml);\n\n                    // Make sure that all elements are rendered and painted on screen\n                    requestAnimationFrame(() => this.onRendered(gameId, data, adapter, assetsPath, language, symbolsPath));\n                }\n            })\n        });\n\n        return container;\n    }\n\n    /**\n     * Hook which is executed once the template is rendered.\n     * Use this to attach listeners to DOM elements to ensure that the HTML is actually there.\n     * @param {String} gameId\n     * @param {Object} data\n     * @param {String} adapter\n     * @param {String} assetsPath\n     * @param {String} language\n     * @param {String} symbolsPath\n     * @return {HTMLElement}\n     */\n    onRendered(gameId, data, adapter, assetsPath, language, symbolsPath) {\n\n    }\n\n\t_registerPartials() {\n\t\tconst partials = SlotPartials;\n\n\t\tpartials.forEach((partial) => {\n\t\t\tconsole.log('Partial Name >>> ', partial.name);\n\t\t\tHandlebars.registerPartial(partial.name, partial.template);\n\t\t});\n\t}\n\n    resize(e) {\n        // Overwrite this\n    }\n\n}\n\nmodule.exports = Panel;\n","const DopSlotPanel = require('./DopSlotPanel');\nconst slotTemplate = require('../../templates/tigentSlots.hbs');\n\n/**\n * TigEntSlotPanel. Using a different slots template as tigent games require a different layout for history data\n *\n * @class\n * @extends {Panel}\n */\nclass TigEntSlotPanel extends DopSlotPanel {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.template = slotTemplate;\n\t}\n\n}\n\nmodule.exports = TigEntSlotPanel;\n","\nclass DefaultParser {\n\n    parse(gameId, serverData) {\n        const data = JSON.parse(JSON.stringify(serverData)); // deep clone\n        \n        // here you should do the parsing\n        // the final structure of the data should be the same as defaultResponse.json\n        \n        return data;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            data = responses[0]; //Use the main spin response for now\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n}\n\nmodule.exports = DefaultParser;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayScratchParser. Handles parsing spin result data\n *\n * @class\n */\nclass CayScratchParser extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\totherWins: [],\n\t\t\tscratchWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\tthis.nonBonusDtoNames = [];\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\tthis.stakeMultiplier = 1;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\twinDetails: this.winDetails,\n\t\t\tscreens: {\n\t\t\t\tsymbols: this.symbolsScreen,\n\t\t\t\tamounts: this.amountsScreen\n\t\t\t},\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_scratchBonusDice(data) {\n\t\tvar bonus = null;\n\t\tif(data.winAmount > 0) {\n\t\t\tbonus = {\n\t\t\t\ttype: 'sumOfSevenBonus',\n\t\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\t\tscratchWin: true\n\t\t\t};\n\t\t}\n\n\t\tif (!this.mainSpinHandled) {\n\t\t\tthis.winDetails.sumOfSevenBonus = [];\n\t\t\tdata.dices.forEach((dice) => {\n\t\t\t\tthis.winDetails.sumOfSevenBonus.push({\n\t\t\t\t\tdices: dice.slice(0, 2),\n\t\t\t\t\tamount: dice.slice(2)[0] * this.data.game.stake\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonusMatchNumbers(data) {\n\t\tvar bonus = null;\n\t\tif(data.winAmount > 0) {\n\t\t\tbonus = {\n\t\t\t\ttype: 'matchNumbersBonus',\n\t\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\t\tscratchWin: true\n\t\t\t};\n\t\t}\n\n\t\tif (!this.mainSpinHandled) {\n\t\t\tdata.mySymbols = data.mySymbols.map((symbol) => symbol == 99 ? false : symbol);\n\t\t\tdata.prizes = data.prizes.map((prize) => prize == 0 ? false : prize);\n\n\t\t\tthis.winDetails.matchNumbersBonus = {\n\t\t\t\tluckySymbols: data.luckySymbols,\n\t\t\t\tprizes: [\n\t\t\t\t\tdata.mySymbols.slice(0, 3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tdata.mySymbols.slice(3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx + 3] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonusMatchAmounts(data) {\n\t\treturn {\n\t\t\ttype:  'matchAmountsBonus',\n\t\t\tamount: data.winAmount,\n\t\t\tscratchWin: true\n\t\t}\n\t}\n\n\t_scratchBonusMatchSymbols(data) {\n\t\tlet symbols = data.screen.slice(0, data.screen.length / 2);\n\t\tlet bonus = null;\n\t\tfor(let i = 0; i < symbols.length; i++) {\n\t\t\tif(symbols.filter(s => s === symbols[i]).length >= 3) {\n\t\t\t\tbonus = {\n\t\t\t\t\ttype:  'matchSymbolsBonus',\n\t\t\t\t\tamount: this._getSymbolAmount(symbols[i]),\n\t\t\t\t\tscratchWin: true\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn bonus;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tif (data.game.gameData) {\n\t\t\tthis._parseScreens(data);\n\t\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t\t\tthis.mainSpinHandled = true;\n\t\t\tthis._handleRespins(data.game.gameData.slotGameArray[0]);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [10000,500,100,10,5,1][symbol - 1];\n\t}\n\n\t_parseScreens(data) {\n\t\tthis.symbolsScreen = [];\n\t\tthis.amountsScreen = [];\n\n\t\tlet screen = data.game.gameData.slotGameArray[0].screen;\n\t\tlet row = -1;\n\t\tlet col = 0;\n\t\tlet currScreen = this.symbolsScreen;\n\t\t\n\t\tscreen.forEach((reel, index) => {\n\t\t\tif (index > 8) currScreen = this.amountsScreen;\n\t\t\tif (col % 3 == 0) {\n\t\t\t\trow++;\n\t\t\t\tcurrScreen.push([]);\n\t\t\t}\n\n\t\t\t\n\t\t\tvar value = reel;\n\t\t\tif (currScreen == this.amountsScreen) {\n\t\t\t\tvalue = this._getSymbolAmount(value);\n\t\t\t}\n\n\t\t\tcurrScreen[currScreen.length - 1].push(value);\n\n\t\t\tcol++;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tvar respins = this._filterRespins(data);\n\n\t\tif (respins.length > 0) {\n\t\t\tthis.winDetails.freeCard = null;\n\t\t\tif (respins.length > 0) {\n\t\t\t\tvar respin = respins[0];\n\t\t\t\tvar freeCard = {\n\t\t\t\t\ttype: 1,\n\t\t\t\t\tamount: respin.winAmount,\n\t\t\t\t\totherWins: [],\n\t\t\t\t\tscratchWins: []\n\t\t\t\t};\n\n\t\t\t\tthis._getPayoutDataBonuses(respin).forEach((bonus) => {\n\t\t\t\t\tif (bonus.scratchWin) {\n\t\t\t\t\t\tfreeCard.scratchWins.push(bonus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfreeCard.otherWins.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.winDetails.totalWin += respin.winAmount;\n\t\t\t\tthis.winDetails.freeCard = freeCard;\n\t\t\t}\n\t\t}\n\t}\n\n\t_filterRespins(data) {\n\t\tvar respins = [];\n\t\tfor(const [key, value] of Object.entries(data.payoutData)) {\n\t\t\tvar clsName = value[0].className;\n\t\t\tif(clsName != undefined && clsName.indexOf(\"3Dto\") != -1) respins.push(value);\n\t\t}\n\t\treturn respins;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t\t\n\t\t\tif (bonus.scratchWin) {\n\t\t\t\tthis.winDetails.scratchWins.push(bonus);\n\t\t\t} else {\n\t\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tthis.stakeMultiplier = spin.stakeMultiplier;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key.indexOf(\"1Dto\") != -1) {\n\t\t\t\t\t\tvar bonus = this._scratchBonusDice(value[0]);\n\t\t\t\t\t\tif(bonus != null) bonuses.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t\telse if(key.indexOf(\"4Dto\") != -1) {\n\t\t\t\t\t\tvar bonus = this._scratchBonusMatchNumbers(value[0]);\n\t\t\t\t\t\tif(bonus != null) bonuses.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t\telse if (key === \"SymbolPayout\") {\n\t\t\t\t\t\tvalue.forEach(val => {\n\t\t\t\t\t\t\tif(val.winAmount > 0) {\n\t\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\t\ttype:  (val.tiles[0] > 8 ? 'matchAmountsBonus' : 'matchSymbolsBonus'),\n\t\t\t\t\t\t\t\t\tamount: val.winAmount,\n\t\t\t\t\t\t\t\t\tscratchWin: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if (key === \"SlotInstantWinBonus\") {\n\t\t\t\t\t\tif(value[0].winAmount > 0) {\n\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\ttype: \"cashPrize\",\n\t\t\t\t\t\t\t\tamount: value[0].winAmount,\n\t\t\t\t\t\t\t\tscratchWin: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CayScratchParser;","const CayScratchParser = require('./CayScratchParser');\nconst FourInOneScratchStake1Parser = require('./games/FourInOneScratchStake1Parser');\nconst FourInOneScratchStake2Parser = require('./games/FourInOneScratchStake2Parser');\nconst FourInOneScratchStake5Parser = require('./games/FourInOneScratchStake5Parser');\nconst FourInOneScratchStake10Parser = require('./games/FourInOneScratchStake10Parser');\nconst ScrFootyFrenzyParser = require('./games/ScrFootyFrenzyParser');\nconst ScrFootyFrenzy2020Parser = require('./games/ScrFootyFrenzy2020Parser');\nconst Scr10pFootyFrenzy2020Parser = require('./games/Scr10pFootyFrenzy2020Parser');\nconst Scr10pRubyWalshChampionsGoldParser = require('./games/Scr10pRubyWalshChampionsGoldParser');\nconst ScrRubyWalshChampionsGoldParser = require('./games/ScrRubyWalshChampionsGoldParser');\nconst Scr10pFootyFrenzy2022Parser = require('./games/Scr10pFootyFrenzy2022Parser');\nconst ScrFootyFrenzy2022Parser = require('./games/ScrFootyFrenzy2022Parser');\n/*require_parser*/\n\n\n/**\n * CayScratchParserFactory.\n *\n * @class\n */\nclass CayScratchParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tFourInOneScratchStake1: FourInOneScratchStake1Parser,\n\t\t\tFourInOneScratchStake2: FourInOneScratchStake2Parser,\n\t\t\tFourInOneScratchStake5: FourInOneScratchStake5Parser,\n\t\t\tFourInOneScratchStake10: FourInOneScratchStake10Parser,\n\t\t\tScrFootyFrenzy: ScrFootyFrenzyParser,\n\t\t\tScrFootyFrenzy2020: ScrFootyFrenzy2020Parser,\n\t\t\tScr10pFootyFrenzy2020: Scr10pFootyFrenzy2020Parser,\n\t\t\tScr10pRubyWalshChampionsGold: Scr10pRubyWalshChampionsGoldParser,\n\t\t\tScrRubyWalshChampionsGold: ScrRubyWalshChampionsGoldParser,\n\t\t\tScrFootyFrenzy2022: ScrFootyFrenzy2022Parser,\n\t\t\tScr10pFootyFrenzy2022: Scr10pFootyFrenzy2022Parser\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {CayScratchParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new CayScratchParser();\n\t}\n}\n\nmodule.exports = CayScratchParserFactory;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayScratchParserLegacy. Handles parsing spin result data\n *\n * @class\n */\nclass CayScratchParserLegacy extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\totherWins: [],\n\t\t\tscratchWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\tthis._respinDtos = [\n\t\t\t'cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneRespinWrapperDto'\n\t\t];\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\tthis.bonusDtos = {\n\t\t\t\"cayetano.games.slots.dto.SlotContactDataDto\": this._handleContactBonus.bind(this),\n\t\t\t\"cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto\": \"instantWin\",\n\t\t\t\"cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakeone.dto.ScratchStakeOneBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveBonus4Dto\": this._scratchBonus2Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus1Dto\": this._scratchBonus1Handler.bind(this),\n\t\t\t\"cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenBonus4Dto\": this._scratchBonus2Handler.bind(this)\n\t\t};\n\n\t\tthis.stakeMultiplier = 1;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\twinDetails: this.winDetails,\n\t\t\tscreens: {\n\t\t\t\tsymbols: this.symbolsScreen,\n\t\t\t\tamounts: this.amountsScreen\n\t\t\t},\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_handleContactBonus(data) {\n\t\treturn {\n\t\t\ttype:  (data.symbolPositions[0][0] > 8 ? 'matchAmountsBonus' : 'matchSymbolsBonus'),\n\t\t\tamount: data.winAmount,\n\t\t\tscratchWin: true\n\t\t};\n\t}\n\n\t_scratchBonus1Handler(data) {\n\t\tvar bonus = {\n\t\t\ttype: 'sumOfSevenBonus',\n\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\tscratchWin: true\n\t\t};\n\t\tif (!this.mainSpinHandled) {\n\t\t\tthis.winDetails.sumOfSevenBonus = [];\n\t\t\tdata.dices.forEach((dice) => {\n\t\t\t\tthis.winDetails.sumOfSevenBonus.push({\n\t\t\t\t\tdices: dice.slice(0, 2),\n\t\t\t\t\tamount: dice.slice(2)[0] * this.data.game.stake\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_scratchBonus2Handler(data) {\n\t\tvar bonus = {\n\t\t\ttype: 'matchNumbersBonus',\n\t\t\tamount: data.winAmount / this.stakeMultiplier,\n\t\t\tscratchWin: true\n\t\t};\n\t\tif (!this.mainSpinHandled) {\n\t\t\tdata.mySymbols = data.mySymbols.map((symbol) => symbol == 99 ? false : symbol);\n\t\t\tdata.prizes = data.prizes.map((prize) => prize == 0 ? false : prize);\n\n\t\t\tthis.winDetails.matchNumbersBonus = {\n\t\t\t\tluckySymbols: data.luckySymbols,\n\t\t\t\tprizes: [\n\t\t\t\t\tdata.mySymbols.slice(0, 3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tdata.mySymbols.slice(3).map((d, idx) => {\n\t\t\t\t\t\tif (d === false) return false;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsymbol: d,\n\t\t\t\t\t\t\tprize: data.prizes[idx + 3] * this.data.game.stake\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\n\t\treturn bonus;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tif (data.game.gameData) {\n\t\t\tthis._parseScreens(data);\n\t\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t\t\tthis.mainSpinHandled = true;\n\t\t\tthis._handleRespins(data.game.gameData.slotGameArray[0]);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [10000,500,100,10,5,1][symbol - 1];\n\t}\n\n\t_parseScreens(data) {\n\t\tthis.symbolsScreen = [];\n\t\tthis.amountsScreen = [];\n\n\t\tlet screen = data.game.gameData.slotGameArray[0].screen;\n\t\tlet row = -1;\n\t\tlet col = 0;\n\t\tlet currScreen = this.symbolsScreen;\n\t\tlet offset = Math.floor(screen[0][0] / 100) * 100;\n\t\tscreen.forEach((reel, index) => {\n\t\t\tif (index > 8) currScreen = this.amountsScreen;\n\t\t\tif (col % 3 == 0) {\n\t\t\t\trow++;\n\t\t\t\tcurrScreen.push([]);\n\t\t\t}\n\n\t\t\tvar value = reel[0] - offset;\n\t\t\tif (currScreen == this.amountsScreen) {\n\t\t\t\tvalue = this._getSymbolAmount(value);\n\t\t\t}\n\n\t\t\tcurrScreen[currScreen.length - 1].push(value);\n\n\t\t\tcol++;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tvar respins = this._filterRespins(data);\n\n\t\tif (respins.length > 0) {\n\t\t\tthis.winDetails.freeCard = null;\n\t\t\tif (respins.length > 0) {\n\t\t\t\tvar respin = respins[0];\n\t\t\t\tvar freeCard = {\n\t\t\t\t\ttype: 1,\n\t\t\t\t\tamount: respin.winAmount,\n\t\t\t\t\totherWins: [],\n\t\t\t\t\tscratchWins: []\n\t\t\t\t};\n\n\t\t\t\tthis._getPayoutDataBonuses(respin).forEach((bonus) => {\n\t\t\t\t\tif (bonus.scratchWin) {\n\t\t\t\t\t\tfreeCard.scratchWins.push(bonus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfreeCard.otherWins.push(bonus);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.winDetails.totalWin += respin.winAmount;\n\t\t\t\tthis.winDetails.freeCard = freeCard;\n\t\t\t}\n\t\t}\n\t}\n\n\t_filterRespins(data) {\n\t\treturn data.payoutData.filter(payoutData => {\n\t\t\treturn this._respinDtos.indexOf(payoutData.className) > -1;\n\t\t}).map(function(payoutData) {\n\t\t\treturn payoutData.respin;\n\t\t});\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t\tif (bonus.scratchWin) {\n\t\t\t\tthis.winDetails.scratchWins.push(bonus);\n\t\t\t} else {\n\t\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\t\tlet stakeMultiplier = this.stakeMultiplier = gameDto.stakeMultiplier;\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tvar amount = payoutData[i].winAmount;\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\tamount: amount\n\t\t\t\t\t});\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tbonuses.push(this.bonusDtos[payoutData[i].className].call(this, payoutData[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (stakeMultiplier > 1) {\n\t\t\tvar multWin = gameDto.winAmount - (gameDto.winAmount / stakeMultiplier);\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWin\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CayScratchParserLegacy;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake10Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake10Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketen.dto.ScratchStakeTenRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [25000,500,50,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake10Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake1Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake1Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketwo.dto.ScratchStakeOneRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [12500,500,100,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake1Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake2Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake2Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstaketwo.dto.ScratchStakeTwoRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [12500,500,100,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake2Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * FourInOneScratchStake5Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass FourInOneScratchStake5Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scratchstakefive.dto.ScratchStakeFiveRespinWrapperDto');\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [25000,500,50,10,5,1][symbol - 1] * this.data.game.stake;\n\t}\n}\n\nmodule.exports = FourInOneScratchStake5Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass Scr10pFootyFrenzy2020Parser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020RespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020Bonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10pfootyfrenzy2020.dto.Scr10pFootyFrenzy2020Bonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = Scr10pFootyFrenzy2020Parser;","const CayScratchParser = require('../CayScratchParser');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParser}\n */\nclass Scr10pFootyFrenzy2022Parser extends CayScratchParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_getSymbolAmount(symbol) {\n\t\treturn [1000,50,10,1,0.5,0.1][symbol - 1];\n\t}\n}\n\nmodule.exports = Scr10pFootyFrenzy2022Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass Scr10pRubyWalshChampionsGoldParser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scr10prubywalshchampionsgold.dto.Scr10pRubyWalshChampionsGoldBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = Scr10pRubyWalshChampionsGoldParser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrFootyFrenzy2020 extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020RespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020Bonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy2020.dto.ScrFootyFrenzy2020Bonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy2020;","const CayScratchParser = require('../CayScratchParser');\n\n/**\n * ScrFootyFrenzy2020. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParser}\n */\nclass ScrFootyFrenzy2022Parser extends CayScratchParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy2022Parser;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrFootyFrenzy. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrFootyFrenzy extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrfootyfrenzy.dto.ScrFootyFrenzyBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrFootyFrenzy;","const CayScratchParserLegacy = require('../CayScratchParserLegacy');\n\n/**\n * ScrRubyWalshChampionsGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CayScratchParserLegacy}\n */\nclass ScrRubyWalshChampionsGoldParser extends CayScratchParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._respinDtos.push('cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldRespinWrapperDto');\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldBonus1Dto\"] = this._scratchBonus1Handler.bind(this);\n\t\tthis.bonusDtos[\"cayetano.games.slots.scrprubywalshchampionsgold.dto.ScrRubyWalshChampionsGoldBonus4Dto\"] = this._scratchBonus2Handler.bind(this);\n\t}\n}\n\nmodule.exports = ScrRubyWalshChampionsGoldParser;","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCaySlotParser. Handles parsing spin result data\n *\n * @class\n */\nclass CaySlotParser extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.nonBonusDtoNames = [\"SymbolPayout\", \"SlotRespinWrapperDto\", \"SlotFreeSpinBonus\", \"SlotBonusRequest\", \"SlotRespinWrapper\"];\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\t\tthis.finalScreen = [];\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/**\n\t\t * Feature handlers map\n\t\t * Maps feature names to handler functions,\n\t\t * can be modified by game specific parsers\n\t\t * @type {Array}\n\t\t */\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'freeSpins', cb: this._handleFreeSpins },\n\t\t\t{ name: 'respin', cb: this._handleRespins }\n\t\t];\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\t\t\n\t\tif (!this.parseAdditionalResponses) return data;\n\n\t\treturn data;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.balanceAtStart = null;\n\t\tthis.freebetAtStart = null;\n\n\t\tif (data.responses && Array.isArray(data.responses)) {\n\t\t\tif (data.responses[0].user.balance.session) {\n\t\t\t\tdata.responses[0].user.balance.cash = data.responses[0].user.balance.session;\n\t\t\t}\n\t\t\tthis.balanceAtStart = parseFloat(data.responses[0].user.balance.cash.atStart);\n\t\t\tthis.freebetAtStart = parseFloat(data.responses[0].user.balance.freeBets.atStart);\n\t\t\tdata.responses.forEach((response, responseIndex) => {\n\t\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\t\tresponse.game.gameData = {slotGameArray: response.game.gameData};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.game.gameData && !Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\t\t\tdata.responses[responseIndex].game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tif (!this.data.responses || !this.data.responses.length) {\n\t\t\tthis.responses = [this.data];\n\t\t} else {\n\t\t\tthis.responses = this.data.responses;\n\t\t}\n\n\t\tthis.transactions = this.data.transactions;\n\n\t\tlet multiResponseFormat = !!this.data.responses && this.data.responses.length; //Check for multiple responses format\n\t\tif(multiResponseFormat){ //We are using multi-response format\n\t\t\tthis.data = this.data.responses[0]; //Use the main spin response for now\n\t\t\tthis.data.transactions = data.transactions;\n\t\t}\n\n\t\tthis._splitScreen(data);\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\t// parse the new screen to integers\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\tif(this.data.game.reelsBuffer) this._initReels(this.data.game);\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// apply all the feature handlers\n\t\tthis._initReels(this.data.game);\n\t\tthis._handleFeatures(this.data.game);\n\t\tthis._handleWins(this.data.game);\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => {\n\t\t\t\tthis._splitScreen(res);\n\t\t\t\tthis._handleAdditionalResponse(res)\n\t\t\t});\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tscreenCopy.push(sga.screen[i]);\n\t\t\t}\n\t\t\tvar parsedScr = [];\n\t\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\t\tvar symbols = [];\n\t\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\t\tsymbols.push(rows[row]);\n\t\t\t\t}\n\t\t\t\tparsedScr.push(symbols);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = parsedScr;\n\t\t});\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\t\tthis._initReels(response.game);\n\t\tthis._handleFeatures(response.game);\n\t\tthis._handleWins(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.finalScreen,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\treturn symbolId;\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol));\n\t\t}\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\t\treturn reels;\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.currentSpin > 0 && spin.isRespin === false });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.currentSpinWinAmount;\n\t\treturn {\n\t\t\ttype: spin.currentSpin,\n\t\t\tamount: spin.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif(respin != undefined && respin.isRespin === true) {\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: data.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (Array.isArray(gameDto.payoutData)) {\n\t\t\tgameDto.payoutData.forEach((data) => {\n\t\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in gameDto.payoutData) {\n\t\t\t\tvar data = gameDto.payoutData[property][0];\n\n\t\t\t\tif (data.type == 'SlotGame') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t}\n\n\t_afterParseOperations(data) {\n\t\t// this._handleStackedWilds(data.game);\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\n\t_handleGamble(data) {\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: data.winAmount\n\t\t});\n\t\tthis.winDetails.totalWin += data.winAmount;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value.length > 0 && value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t});\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tregulations: data.regulations,\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet winLines = [];\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = payoutData.SymbolPayout;\n\t\t\tif (symbolPayout === undefined) {\n\t\t\t\tfor (const [key, value] of Object.entries(payoutData)) {\n\t\t\t\t\tif (value.length > 0 && value[0].respin != undefined && value[0].respin.payoutData != undefined) {\n\t\t\t\t\t\tsymbolPayout = value[0].respin.payoutData.SymbolPayout;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (symbolPayout != undefined) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].winAmount,\n\t\t\t\t\t\tstart: symbolPayout[i].reels[0],\n\t\t\t\t\t\tlength: symbolPayout[i].reels.length,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn winLines;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CaySlotParser;","const CaySlotParser = require('./CaySlotParser');\nconst CaySlotParserLegacy = require('./CaySlotParserLegacy');\nconst SantasSpinsSlotParser = require('./games/SantasSpinsSlotParser');\nconst PaddyPowerGoldSlotParser = require('./games/PaddyPowerGoldSlotParser');\nconst FrootShootSlotParser = require('./games/FrootShootSlotParser');\nconst LuckyCabaretSlotParser = require('./games/LuckyCabaretSlotParser');\nconst RhinoRumbleSlotParser = require('./games/RhinoRumbleSlotParser');\nconst GypsyLuckSlotParser = require('./games/GypsyLuckSlotParser');\nconst AladinsLampSlotParser = require('./games/AladinsLampSlotParser');\nconst SparklingJackpotSlotParser = require('./games/SparklingJackpotSlotParser');\nconst PaddysLuckyMineSlotParser = require('./games/PaddysLuckyMineSlotParser');\nconst PaddysLuckyPigeonSlotParser = require('./games/PaddysLuckyPigeonSlotParser');\nconst PaddyPowerFanaticsSlotParser = require('./games/PaddyPowerFanaticsSlotParser');\nconst FantasiaSlotParser = require('./games/FantasiaSlotParser');\nconst AsianRichesSlotParser = require('./games/AsianRichesSlotParser');\nconst IndianPrincessSlotParser = require('./games/IndianPrincessSlotParser');\nconst RubyWalshChampionsGoldSlotParser = require('./games/RubyWalshChampionsGoldSlotParser');\nconst MrDiamondsSlotParser = require('./games/MrDiamondsSlotParser');\nconst SafariDreamSlotParser = require('./games/SafariDreamSlotParser');\nconst WildSheriffSlotParser = require('./games/WildSheriffSlotParser');\nconst JoustingWildsSlotParser = require('./games/JoustingWildsSlotParser');\nconst FruitPopsSlotParser = require('./games/FruitPopsSlotParser');\nconst GemBlastSlotParser = require('./games/GemBlastSlotParser');\nconst ForestRushSlotParser = require('./games/ForestRushSlotParser');\nconst AliBabasTreasureSlotParser = require('./games/AliBabasTreasureSlotParser');\nconst BallOfShameSlotParser = require('./games/BallOfShameSlotParser');\nconst TrickOTreatSlotParser = require('./games/TrickOTreatSlotParser');\nconst DarkJungleSlotParser = require('./games/DarkJungleSlotParser');\nconst ShamanSpinsSlotParser = require('./games/ShamanSpinsSlotParser');\nconst ReelsOfEgyptSlotParser = require('./games/ReelsOfEgyptSlotParser');\nconst FruitStackBigSpinsSlotParser = require('./games/FruitStackBigSpinsSlotParser');\nconst FruitStackDeluxeSlotParser = require('./games/FruitStackDeluxeSlotParser');\nconst BombTheJackpotSlotParser = require('./games/BombTheJackpotSlotParser');\nconst GoldenKingdomSlotParser = require('./games/GoldenKingdomSlotParser');\nconst DiamondRushSlotParser = require('./games/DiamondRushSlotParser');\nconst SkullsSlotParser = require('./games/SkullsSlotParser');\nconst RoyalGooseSlotParser = require('./games/RoyalGooseSlotParser');\nconst ClassyVegasSlotParser = require('./games/ClassyVegasSlotParser');\nconst BianconeriWildsSlotParser = require('./games/BianconeriWildsSlotParser');\nconst WildEgyptSlotParser = require('./games/WildEgyptSlotParser');\nconst FootyFrenzySlotParser = require('./games/FootyFrenzySlotParser');\nconst TumbleDwarfSlotParser = require('./games/TumbleDwarfSlotParser');\nconst GolderadoSlotParser = require('./games/GolderadoSlotParser');\nconst EasterMoneySlotParser = require('./games/EasterMoneySlotParser');\nconst SolarSnapSlotParser = require('./games/SolarSnapSlotParser');\nconst HotSlotSlotParser = require('./games/HotSlotSlotParser');\nconst GreatGemsSlotParser = require('./games/GreatGemsSlotParser');\nconst DetectiveWilderSlotParser = require('./games/DetectiveWilderSlotParser');\nconst GoldenPlanetSlotParser = require('./games/GoldenPlanetSlotParser');\nconst TheGreatWildSlotParser = require('./games/TheGreatWildSlotParser');\nconst BarbarianTreasuresSlotParser = require('./games/BarbarianTreasuresSlotParser');\nconst SuperFuegoSlotParser = require('./games/SuperFuegoSlotParser');\nconst FunFairSlotParser = require('./games/FunFairSlotParser');\nconst MaximusReelsSlotParser = require('./games/MaximusReelsSlotParser');\nconst GoldenThunderSlotParser = require('./games/GoldenThunderSlotParser');\nconst ManekiGoldSlotParser = require('./games/ManekiGoldSlotParser');\nconst HappyHourSlotParser = require('./games/HappyHourSlotParser');\nconst SonsOfAsgardSlotParser = require('./games/SonsOfAsgardSlotParser');\nconst JadeFortuneTempleSlotParser = require('./games/JadeFortuneTempleSlotParser');\nconst WormKingSlotParser = require('./games/WormKingSlotParser');\nconst FootyFrenzy2020SlotParser = require('./games/FootyFrenzy2020SlotParser');\nconst FootyFrenzy2022SlotParser = require('./games/FootyFrenzy2022SlotParser');\nconst GoldheadsSlotParser = require('./games/GoldheadsSlotParser');\nconst GoldenPotSlotParser = require('./games/GoldenPotSlotParser');\nconst CrusadeSlotParser = require('./games/CrusadeSlotParser');\nconst BuffaloRespinSlotParser = require('./games/BuffaloRespinSlotParser');\nconst LeagueOfWildsSlotParser = require('./games/LeagueOfWildsSlotParser');\nconst FruitStackOneSlotParser = require('./games/FruitStackOneSlotParser');\nconst RacingWildsSlotParser = require('./games/RacingWildsSlotParser');\nconst MagnificentWildSlotParser = require('./games/MagnificentWildSlotParser');\nconst PiratesHoldSlotParser = require('./games/PiratesHoldSlotParser');\nconst PiratesHoldDavyLockersCoinsSlotParser = require('./games/PiratesHoldDavyLockersCoinsSlotParser');\nconst MoneyMachineSlotParser = require('./games/MoneyMachineSlotParser');\nconst MoneyTowerSlotParser = require('./games/MoneyTowerSlotParser');\nconst LuckyMahjongSlotParser = require('./games/LuckyMahjongSlotParser');\nconst BeautysBeastSlotParser = require('./games/BeautysBeastSlotParser');\nconst MagicFairiesSlotParser = require('./games/MagicFairiesSlotParser');\nconst MoneyNightSlotParser = require('./games/MoneyNightSlotParser');\nconst MonteCarloRacingSlotParser = require('./games/MonteCarloRacingSlotParser');\nconst NudgingGemsSlotParser = require('./games/NudgingGemsSlotParser');\nconst ParadiseTreasuresSlotParser = require('./games/ParadiseTreasuresSlotParser');\nconst PersianGlorySlotParser = require('./games/PersianGlorySlotParser');\nconst PyramidGoldSlotParser = require('./games/PyramidGoldSlotParser');\nconst RussianGlorySlotParser = require('./games/RussianGlorySlotParser');\nconst SinbadsGoldSlotParser = require('./games/SinbadsGoldSlotParser');\nconst SphinxGoldSlotParser = require('./games/SphinxGoldSlotParser');\nconst ThaiThaiSlotParser = require('./games/ThaiThaiSlotParser');\nconst WildStarsSlotParser = require('./games/WildStarsSlotParser');\nconst CastlePillagerSlotParser = require('./games/CastlePillagerSlotParser');\nconst FruitStackSuperDoubleWildSlotParser = require('./games/FruitStackSuperDoubleWildSlotParser');\nconst KeepingUpWithThePaddysSlotParser = require('./games/KeepingUpWithThePaddysSlotParser');\nconst PoseidonFortuneSlotParser = require('./games/PoseidonFortuneSlotParser');\nconst HappyRoosterSlotParser = require('./games/HappyRoosterSlotParser');\nconst PaddyPowerMysteryGoldSlotParser = require('./games/PaddyPowerMysteryGoldSlotParser');\nconst FlirtingTangSlotParser = require('./games/FlirtingTangSlotParser');\nconst CaveMegaBlastSlotParser = require('./games/CaveMegaBlastSlotParser');\nconst CrazySuper7sSlotParser = require('./games/CrazySuper7sSlotParser');\nconst NeonWildsSlotParser = require('./games/NeonWildsSlotParser');\nconst FruitStackSlotParser = require('./games/FruitStackSlotParser');\nconst MississippiQueenSlotParser = require('./games/MississippiQueenSlotParser');\nconst HalloWinSlotParser = require('./games/HalloWinSlotParser');\nconst MayanMysterySlotParser = require('./games/MayanMysterySlotParser');\nconst DragonsWildSlotParser = require('./games/DragonsWildSlotParser');\nconst LittleRedRidingHoodSlotParser = require('./games/LittleRedRidingHoodSlotParser');\nconst JapaneseMysterySlotParser = require('./games/JapaneseMysterySlotParser');\nconst EgyptianWildsSlotParser = require('./games/EgyptianWildsSlotParser');\nconst IrishCloverSlotParser = require('./games/IrishCloverSlotParser');\nconst FruitStackMysteryWinSlotParser = require('./games/FruitStackMysteryWinSlotParser');\nconst BullfightSlotParser = require('./games/BullfightSlotParser');\nconst AgesOfFortuneSlotParser = require('./games/AgesOfFortuneSlotParser');\nconst PaddyPowerGoldOnTourSlotParser = require('./games/PaddyPowerGoldOnTourSlotParser');\nconst MineCrusherSlotParser = require('./games/MineCrusherSlotParser');\nconst BetfairsWildArcadeSlotParser = require('./games/BetfairsWildArcadeSlotParser');\nconst TheHeistSlotParser = require('./games/TheHeistSlotParser');\nconst PaddyPowerShowtimeSlotParser = require('./games/PaddyPowerShowtimeSlotParser');\nconst ShowtimeSpinnerSlotParser = require('./games/ShowtimeSpinnerSlotParser');\nconst CloningSheepSlotParser = require('./games/CloningSheepSlotParser');\nconst RobinHoodGoldenLootSlotParser = require('./games/RobinHoodGoldenLootSlotParser');\nconst TumbleDwarfMysteryGoldSlotParser = require('./games/TumbleDwarfMysteryGoldSlotParser');\nconst SlottingSlopesSlotParser = require('./games/SlottingSlopesSlotParser');\nconst SmoothieSmashSlotParser = require('./games/SmoothieSmashSlotParser');\nconst PaddyPowerGoldBookOfLuckSlotParser = require('./games/PaddyPowerGoldBookOfLuckSlotParser');\nconst BigRacingSlotParser = require('./games/BigRacingSlotParser');\nconst WishAWinSlotParser = require('./games/WishAWinSlotParser');\nconst WorldOfWizardsSlotParser = require('./games/WorldOfWizardsSlotParser');\nconst GiftsOfRaSlotParser = require('./games/GiftsOfRaSlotParser');\nconst OstrichLuckSlotParser = require('./games/OstrichLuckSlotParser');\nconst PaddysWonderWheelUnderConstructionSlotParser = require('./games/PaddysWonderWheelUnderConstructionSlotParser');\nconst MazeOfFortuneSlotParser = require('./games/MazeOfFortuneSlotParser');\n\n/*require_parser*/\n\n/**\n * CaySlotParserFactory.\n *\n * @class\n */\nclass CaySlotParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tSantasSpins: SantasSpinsSlotParser,\n\t\t\tPaddyPowerGold: PaddyPowerGoldSlotParser,\n\t\t\tPaddyPowerGoldHaxe: PaddyPowerGoldSlotParser,\n\t\t\tFrootShoot: FrootShootSlotParser,\n\t\t\tLuckyCabaret: LuckyCabaretSlotParser,\n\t\t\tRhinoRumble: RhinoRumbleSlotParser,\n\t\t\tGypsyLuck: GypsyLuckSlotParser,\n\t\t\tAladinsLamp: AladinsLampSlotParser,\n\t\t\tSparklingJackpot: SparklingJackpotSlotParser,\n\t\t\tPaddysLuckyMine: PaddysLuckyMineSlotParser,\n\t\t\tPaddysLuckyPigeon: PaddysLuckyPigeonSlotParser,\n\t\t\tPaddyPowerFanatics: PaddyPowerFanaticsSlotParser,\n\t\t\tFantasia: FantasiaSlotParser,\n\t\t\tAsianRiches: AsianRichesSlotParser,\n\t\t\tIndianPrincess: IndianPrincessSlotParser,\n\t\t\tRubyWalshChampionsGold: RubyWalshChampionsGoldSlotParser,\n\t\t\tMrDiamonds: MrDiamondsSlotParser,\n\t\t\tSafariDream: SafariDreamSlotParser,\n\t\t\tWildSheriff: WildSheriffSlotParser,\n\t\t\tJoustingWilds: JoustingWildsSlotParser,\n\t\t\tFruitPops: FruitPopsSlotParser,\n\t\t\tGemBlast: GemBlastSlotParser,\n\t\t\tForestRush: ForestRushSlotParser,\n\t\t\tAliBabasTreasure: AliBabasTreasureSlotParser,\n\t\t\tBallOfShame: BallOfShameSlotParser,\n\t\t\tTrickOTreat: TrickOTreatSlotParser,\n\t\t\tDarkJungle: DarkJungleSlotParser,\n\t\t\tShamanSpins: ShamanSpinsSlotParser,\n\t\t\tReelsOfEgypt: ReelsOfEgyptSlotParser,\n\t\t\tFruitStackBigSpins: FruitStackBigSpinsSlotParser,\n\t\t\tBombTheJackpot: BombTheJackpotSlotParser,\n\t\t\tFruitStackDeluxe: FruitStackDeluxeSlotParser,\n\t\t\tGoldenKingdom: GoldenKingdomSlotParser,\n\t\t\tDiamondRush: DiamondRushSlotParser,\n\t\t\tSkulls: SkullsSlotParser,\n\t\t\tRoyalGoose: RoyalGooseSlotParser,\n\t\t\tClassyVegas: ClassyVegasSlotParser,\n\t\t\tBianconeriWilds: BianconeriWildsSlotParser,\n\t\t\tWildEgypt: WildEgyptSlotParser,\n\t\t\tFootyFrenzy: FootyFrenzySlotParser,\n\t\t\tTumbleDwarf: TumbleDwarfSlotParser,\n\t\t\tGoldErado: GolderadoSlotParser,\n\t\t\tEasterMoney: EasterMoneySlotParser,\n\t\t\tSolarSnap: SolarSnapSlotParser,\n\t\t\tHotSlot: HotSlotSlotParser,\n\t\t\tGreatGems: GreatGemsSlotParser,\n\t\t\tDetectiveWilder: DetectiveWilderSlotParser,\n\t\t\tGoldenPlanet: GoldenPlanetSlotParser,\n\t\t\tTheGreatWild: TheGreatWildSlotParser,\n\t\t\tBarbarianTreasures: BarbarianTreasuresSlotParser,\n\t\t\tSuperFuego: SuperFuegoSlotParser,\n\t\t\tFunFair: FunFairSlotParser,\n\t\t\tGoldenThunder: GoldenThunderSlotParser,\n\t\t\tMaximusReels: MaximusReelsSlotParser,\n\t\t\tManekiGold: ManekiGoldSlotParser,\n\t\t\tHappyHour: HappyHourSlotParser,\n\t\t\tSonsOfAsgard: SonsOfAsgardSlotParser,\n\t\t\tJadeDragon: JadeFortuneTempleSlotParser,\n\t\t\tWormKing: WormKingSlotParser,\n\t\t\tFootyFrenzy2020: FootyFrenzy2020SlotParser,\n\t\t\tFootyFrenzy2022: FootyFrenzy2022SlotParser,\n\t\t\tGoldheads: GoldheadsSlotParser,\n\t\t\tCrusade: CrusadeSlotParser,\n\t\t\tGoldenPot: GoldenPotSlotParser,\n\t\t\tBuffaloRespin: BuffaloRespinSlotParser,\n\t\t\tLeagueOfWilds: LeagueOfWildsSlotParser,\n\t\t\tRacingWilds: RacingWildsSlotParser,\n\t\t\tMagnificentWild: MagnificentWildSlotParser,\n\t\t\tFruitStackOne: FruitStackOneSlotParser,\n\t\t\tPiratesHold: PiratesHoldSlotParser,\n\t\t\tPiratesHoldDavyLockersCoins: PiratesHoldDavyLockersCoinsSlotParser,\n\t\t\tMoneyMachine: MoneyMachineSlotParser,\n\t\t\tMoneyTower: MoneyTowerSlotParser,\n\t\t\tLuckyMahjong: LuckyMahjongSlotParser,\n\t\t\tBeautysBeast: BeautysBeastSlotParser,\n\t\t\tMagicFairies: MagicFairiesSlotParser,\n\t\t\tMoneyNight: MoneyNightSlotParser,\n\t\t\tMonteCarloRacing: MonteCarloRacingSlotParser,\n\t\t\tNudgingGems: NudgingGemsSlotParser,\n\t\t\tParadiseTreasures: ParadiseTreasuresSlotParser,\n\t\t\tPersianGlory: PersianGlorySlotParser,\n\t\t\tPyramidGold: PyramidGoldSlotParser,\n\t\t\tRussianGlory: RussianGlorySlotParser,\n\t\t\tSinbadsGold: SinbadsGoldSlotParser,\n\t\t\tSphinxGold: SphinxGoldSlotParser,\n\t\t\tThaiThai: ThaiThaiSlotParser,\n\t\t\tWildStars: WildStarsSlotParser,\n\t\t\tCastlePillager: CastlePillagerSlotParser,\n\t\t\tFruitStackSuperDoubleWild: FruitStackSuperDoubleWildSlotParser,\n\t\t\tKeepingUpWithThePaddys: KeepingUpWithThePaddysSlotParser,\n\t\t\tPoseidonFortune: PoseidonFortuneSlotParser,\n\t\t\tHappyRooster: HappyRoosterSlotParser,\n\t\t\tPaddyPowerMysteryGold: PaddyPowerMysteryGoldSlotParser,\n\t\t\tFlirtingTang: FlirtingTangSlotParser,\n\t\t\tCaveMegaBlast: CaveMegaBlastSlotParser,\n\t\t\tCrazySuper7s: CrazySuper7sSlotParser,\n\t\t\tNeonWilds: NeonWildsSlotParser,\n\t\t\tFruitStack: FruitStackSlotParser,\n\t\t\tMississippiQueen: MississippiQueenSlotParser,\n\t\t\tHalloWin: HalloWinSlotParser,\n\t\t\tMayanMystery: MayanMysterySlotParser,\n\t\t\tDragonsWild: DragonsWildSlotParser,\n\t\t\tLittleRedRidingHood: LittleRedRidingHoodSlotParser,\n\t\t\tJapaneseMystery: JapaneseMysterySlotParser,\n\t\t\tEgyptianWilds: EgyptianWildsSlotParser,\n\t\t\tIrishClover: IrishCloverSlotParser,\n\t\t\tFruitStackMysteryWin: FruitStackMysteryWinSlotParser,\n\t\t\tAgesOfFortune: AgesOfFortuneSlotParser,\n\t\t\tPaddyPowerGoldOnTour: PaddyPowerGoldOnTourSlotParser,\n\t\t\tBullfight: BullfightSlotParser,\n\t\t\tMineCrusher: MineCrusherSlotParser,\n\t\t\tBetfairsWildArcade: BetfairsWildArcadeSlotParser,\n\t\t\tTheHeist: TheHeistSlotParser,\n\t\t\tPaddyPowerShowtime: PaddyPowerShowtimeSlotParser,\n\t\t\tShowtimeSpinner: ShowtimeSpinnerSlotParser,\n\t\t\tCloningSheep: CloningSheepSlotParser,\n\t\t\tRobinHoodGoldenLoot: RobinHoodGoldenLootSlotParser,\n\t\t\tTumbleDwarfMysteryGold: TumbleDwarfMysteryGoldSlotParser,\n\t\t\tSlottingSlopes: SlottingSlopesSlotParser,\n\t\t\tSmoothieSmash: SmoothieSmashSlotParser,\n\t\t\tBigRacing: BigRacingSlotParser,\n\t\t\tPaddyPowerGoldBookOfLuck: PaddyPowerGoldBookOfLuckSlotParser,\n\t\t\tWishAWin: WishAWinSlotParser,\n\t\t\tWorldOfWizards: WorldOfWizardsSlotParser,\n\t\t\tSpyAffairs: CaySlotParserLegacy,\n\t\t\tGiftsOfRa: GiftsOfRaSlotParser,\n\t\t\tOstrichLuck: OstrichLuckSlotParser,\n\t\t\tPaddysWonderWheelUnderConstruction: PaddysWonderWheelUnderConstructionSlotParser,\n\t\t\tMazeOfFortune: MazeOfFortuneSlotParser/*add_parser*/\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {CaySlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tgameId = gameId.toLowerCase();\n\t\tvar keys = Object.keys(this.parsers);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tif (keys[i].toLowerCase() == gameId) {\n\t\t\t\treturn new this.parsers[keys[i]]();\n\t\t\t}\n\t\t}\n\n\t\treturn new CaySlotParser();\n\t}\n}\n\nmodule.exports = CaySlotParserFactory;\n","const Format = require('../../../utils/Format');\n\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCaySlotParserLegacy. Handles parsing spin result data\n *\n * @class\n */\nclass CaySlotParserLegacy extends DefaultParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\t/** @type {Object} Win amounts data */\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\ttotalWin: 0,\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/**\n\t\t * Feature handlers map\n\t\t * Maps feature names to handler functions,\n\t\t * can be modified by game specific parsers\n\t\t * @type {Array}\n\t\t */\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'stickyData', cb: this._handleStickyData },\n\t\t\t{ name: 'respin', cb: this._handleRespins },\n\t\t\t{ name: 'nudge', cb: this._handleNudges },\n\t\t\t{ name: 'freeSpins', cb: this._handleFreeSpins }\n\t\t];\n\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin' // fs instant win \n\t\t};\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tif (!this.parseAdditionalResponses) return data;\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n\n\t/**\n\t* Parses spin result data\n\t* @param {String} gameId The server id of the current game\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Object} data.game Spin result data\n\t*/\n\tparse(gameId, data) {\n\t\tthis.balanceAtStart = null;\n\t\tthis.freebetAtStart = null;\n\n\t\tif (data.responses && Array.isArray(data.responses)) {\n\t\t\tif (data.responses[0].user.balance.session) {\n\t\t\t\tdata.responses[0].user.balance.cash = data.responses[0].user.balance.session;\n\t\t\t}\n\t\t\tthis.balanceAtStart = parseFloat(data.responses[0].user.balance.cash.atStart);\n\t\t\tthis.freebetAtStart = parseFloat(data.responses[0].user.balance.freeBets.atStart);\n\t\t\tdata.responses.forEach((response, responseIndex) => {\n\t\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\t\tresponse.game.gameData = {slotGameArray: response.game.gameData};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.game.gameData && !Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\t\t\tdata.responses[responseIndex].game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\n\t\tif (!this.data.responses || !this.data.responses.length) {\n\t\t\tthis.responses = [this.data];\n\t\t} else {\n\t\t\tthis.responses = this.data.responses;\n\t\t}\n\n\t\tthis.transactions = this.data.transactions;\n\n\t\tlet multiResponseFormat = !!this.data.responses && this.data.responses.length; //Check for multiple responses format\n\t\tif(multiResponseFormat){ //We are using multi-response format\n\t\t\tthis.data = this.data.responses[0]; //Use the main spin response for now\n\t\t\tthis.data.transactions = data.transactions;\n\t\t}\n\n\t\tlet screenCopy = null; // make a copy for the new screen response\n\t\tif (typeof this.data.game.gameData.slotGameArray[0].screen[0] == \"string\") {\n\t\t\tscreenCopy = [];\n\t\t\tfor (let i = 0; i < this.data.game.gameData.slotGameArray[0].screen.length; i++) {\n\t\t\t\tscreenCopy.push(this.data.game.gameData.slotGameArray[0].screen[i]);\n\t\t\t}\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(this.data);\n\n\t\t// parse the new screen to integers\n\t\tif (screenCopy != null) {\n\t\t\tvar parsedScr = [];\n\t\t\t\n\t\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\t\tvar symbols = [];\n\t\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\t\tsymbols.push(parseInt(rows[row], 36));\n\t\t\t\t}\n\t\t\t\tparsedScr.push(symbols);\n\t\t\t}\n\t\t\t\n\t\t\tdata.game.gameData.slotGameArray[0].screen = parsedScr;\n\t\t}\n\n\t\tif (this._handleMaxPayout(this.data)) {\n\t\t\treturn this._generateOutput();\n\t\t}\n\n\t\tif(this.data.game.reelsBuffer) this._initReels(this.data.game);\n\n\t\t// game specific parsers can apply before parse operations here\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(this.data);\n\t\t}\n\n\t\t// apply all the feature handlers\n\t\tthis._initReels(this.data.game);\n\t\tthis._handleFeatures(this.data.game);\n\t\tthis._handleWins(this.data.game);\n\n\t\t// game specific parsers can apply after parse operations here\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(this.data);\n\t\t}\n\n\t\tthis._handleJackpots(this.data);\n\n\t\tif(data.responses.length > 1) { //Parse each additional response separatedly.\n\t\t\tconst remainingResponses = data.responses.slice(1);\n\n\t\t\tremainingResponses.forEach((res) => this._handleAdditionalResponse(res));\n\t\t}\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_handleMaxPayout(data) {\n\t\tif (!data.game.win.limitedWin) return false;\n\t\tthis.winDetails.totalWin = data.game.win.limitedWin;\n\t\tthis.winDetails.limitedWin = data.game.win.limitedWin;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Parses additional responses from the server.\n\t * @param {Object} response Game data, contains screen reels and every game feature in the response.\n\t */\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\t\tthis._handleWins(response.game);\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.data.game.reels,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t_mapSymbol(reel, row, symbolId) {\n\t\treturn symbolId;\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet pd = data.gameData.slotGameArray[0].payoutData;\n\t\tlet payoutData = [];\n\n\t\tif (Array.isArray(pd)) {\n\t\t\tpayoutData = pd.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto'});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in pd) {\n\t\t\t\tvar data = pd[property][0];\n\t\t\t\tif (data.type == \"SlotStackedWildBonusDataDto\") {\n\t\t\t\t\tpayoutData.push(data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n\n\t_handleStackedSymbol(dto) {\n\t\tlet newGameData = {gameData: {slotGameArray: [dto.bonusSpin]}};\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins(newGameData);\n\t}\n\n\t_handleStickyData(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tif (!stickyData || stickyData.length == 0 || stickyData.stickyPos.length == 0) return;\n\n\t\tvar newData = JSON.parse(JSON.stringify(data));\n\n\t\tif (data.gameData.slotGameArray[0].winAmount == 0) {\n\t\t\tstickyData.stickyPos.forEach(function(pos, idx) {\n\t\t\t\tnewData.gameData.slotGameArray[0].screen[stickyData.stickyReels[idx]][pos] = stickyData.stickySymbolIds[idx];\n\t\t\t});\n\t\t\tthis.data.game.reels = this._initReels(newData);\n\t\t}\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = this._flattenNudges(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.nudges = [];\n\n\t\trespins.forEach((respin) => {\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.nudges.push(currRespin);\n\t\t\tlet len = this.winDetails.nudges.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\tcurrRespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\tcurrRespin.amount -= bonusesWin;\n\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.nudges[len - 2].amount -= currRespin.amount;\n\t\t\t}\n\t\t});\n\n\t\tthis.winDetails.nudges.forEach((respin) => {\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length <= 1) return;\n\n\t\tthis.winDetails.respins = [];\n\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif (respin.spinNum > 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trespin.respinIndex = i - 1;\n\t\t\trespin = this._handleSingleRespin(respin);\n\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tlet len = this.winDetails.respins.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\trespin.amount -= bonusesWin;\n\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (Array.isArray(gameDto.payoutData)) {\n\t\t\tgameDto.payoutData.forEach((data) => {\n\t\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfor (const property in gameDto.payoutData) {\n\t\t\t\tvar data = gameDto.payoutData[property][0];\n\n\t\t\t\tif (data.type == 'SlotGame') {\n\t\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t\trespins.push(data);\n\t\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tthis._handleStackedWilds(data.game);\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\n\t_handleGamble(data) {\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: data.winAmount\n\t\t});\n\t\tthis.winDetails.totalWin += data.winAmount;\n\t\tconsole.log(arguments.length, data);\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.winAmount - (gameDto.winAmount / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t});\n\t}\n\n\t/**\n\t * Sanity check on the current spin data object\n\t * @private\n\t * @return {Boolean} True if everything is ok, false otherwise\n\t */\n\t_dataSanityCheck() {\n\t\tlet data = JSON.parse(JSON.stringify(this.data)); // deep clone\n\n\t\tif (!data.transactions) data.transactions = {}; // allow it ;)\n\t\t// TODO: this is temporary fix when the server returns game:null.\n\t\tif (!data.game) {\n\t\t\tdata = {\n\t\t\t\tgameDetails: {\n\t\t\t\t\tgameId: this.gameId,\n\t\t\t\t\troundId: data.transactions.roundId,\n\t\t\t\t\tprevRoundId: data.transactions.prevRoundId,\n\t\t\t\t\tnextRoundId: data.transactions.nextRoundId,\n\t\t\t\t\tserverTimeStart: data.transactions.startTime,\n\t\t\t\t\tserverTimeEnd: data.transactions.endTime,\n\t\t\t\t},\n\t\t\t\ttransactions: {\n\t\t\t\t\ttotalBet: null,\n\t\t\t\t\ttotalWin: null,\n\t\t\t\t\tbalance: {\n\t\t\t\t\t\tcash: data.user.balance.cash,\n\t\t\t\t\t\tfreeBets: data.user.balance.freeBets,\n\t\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\t\tbonus: data.user.balance.bonus\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tregulations: data.regulations,\n\t\t\t\twinDetails: null,\n\t\t\t\treels: null,\n\t\t\t\tpromo: data.promo\n\t\t\t};\n\n\t\t\treturn false;\n\t\t}\n\t\tthis.data = data;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet payoutData = spin.payoutData;\n\t\tlet winLines = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (payoutData[i].className == 'cayetano.games.slots.dto.SlotLineDataDto') {\n\t\t\t\tlet lineIndex = (payoutData[i].lineNum < 0 ? winLines.length : payoutData[i].lineNum);\n\t\t\t\twinLines.push({\n\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\tamount: payoutData[i].winAmount,\n\t\t\t\t\tstart: payoutData[i].lineStart,\n\t\t\t\t\tlength: payoutData[i].lineSize,\n\t\t\t\t\ttiles: payoutData[i].linePos\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twinLines.sort(function(a, b) {\n\t\t\treturn a.type - b.type;\n\t\t});\n\n\t\treturn winLines;\n\t}\n\n\t_handleJackpots(data) {\n\t\tlet winDetails = this.winDetails;\n\t\tlet hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\n\t\tif (hasJackpotWins) {\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, function (pot) {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\twinDetails.jackpotWins.push({ type: pot.id, amount: pot.win });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = CaySlotParserLegacy;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * AgesOfFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass AgesOfFortuneSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n        this.nonBonusDtoNames.push(\"SlotPrizeBonus\");\n\t}\n\n    _getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n            spin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n        else if (spin.payoutData.SlotPrizeBonus != undefined) {\n            bonuses.push({\n                type: 'multiplier',\n\t\t\t\tamount: spin.payoutData.SlotPrizeBonus[0].winAmount\n\t\t\t});\n        }\n\n\t\treturn bonuses;\n\t}\n\n    _handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { console.log(spin); return spin.currentSpin > 0 && spin.isRespin === false });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n}\n\nmodule.exports = AgesOfFortuneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * AladinsLampParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AladinsLampParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] <= 3) {\n\t\t\t\t\treels[reel][tile] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn reels;\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\nmodule.exports = AladinsLampParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * AliBabasTreasureParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AliBabasTreasureParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = AliBabasTreasureParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * AsianRichesParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass AsianRichesParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tdata.reels = [];\n\n\t\tlet i = 0;\n\n\t\tfor (let tile = 0; tile < 3; tile++) {\n\t\t\tfor (let reel = 0; reel < 5; reel++) {\n\t\t\t\tif (!data.reels[reel]) data.reels.push([]);\n\t\t\t\tdata.reels[reel].push(reelsBuffer[i++][0] - offset);\n\t\t\t}\n\t\t}\n\n\t\treturn data.reels;\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = data.gameData.slotGameArray;\n\t\tthis.winDetails.nudges = [];\n\n\t\tvar respinIndex = 0;\n\t\tvar totalBonusesWin = 0;\n\n\t\trespins.forEach((respin) => {\n\t\t\trespin.respinIndex = respinIndex++;\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.nudges.push(currRespin);\n\t\t\tlet len = this.winDetails.nudges.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\tcurrRespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\ttotalBonusesWin += bonusesWin;\n\t\t\tcurrRespin.amount -= bonusesWin;\n/*\t\t\tif (len > 1) {\n\t\t\t\tthis.winDetails.respins[len - 2].amount -= currRespin.amount;\n\t\t\t}*/\n\t\t});\n\n\t\tthis.winDetails.nudges.forEach((respin) => {\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t\tthis.winDetails.totalWin += totalBonusesWin;\n\t}\n}\n\n\nmodule.exports = AsianRichesParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * BallOfShameSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BallOfShameSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = BallOfShameSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BarbarianTreasuresParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BarbarianTreasuresParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresMiniScattersDto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar spinToUse = spin;\n\t\tspin.payoutData.forEach((pData) => {\n\t\t\tif (pData.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') {\n\t\t\t\tspinToUse = pData.bonusSpin;\n\t\t\t\tspinToUse.spinNum = spin.spinNum;\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\ttype: spinToUse.spinNum,\n\t\t\tamount: spinToUse.winAmount,\n\t\t\twinLines: this._getWinLines(spinToUse),\n\t\t\totherWins: pdatabonuses.concat(this._getPayoutDataBonuses(spinToUse))\n\t\t};\n\t}\n\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\n\t\tlet smallScatterPositionsByReel, smallScatterTypesByReel;\n\t\t\n\t\tdata.gameData.slotGameArray[0].payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.barbariantreasures.dto.BarbarianTreasuresMiniScattersDto\") {\n\t\t\t\tsmallScatterPositionsByReel = data.scatterPositions;\n\t\t\t\tsmallScatterTypesByReel = data.scatterTypes;\n\t\t\t}\n\t\t});\n\n\t\tif (smallScatterPositionsByReel != null) replaceSymbols(modifiedReels, smallScatterPositionsByReel, smallScatterTypesByReel);\n\n\t\treturn modifiedReels;\n\t}\n}\n\nfunction replaceSymbols(modifiedReels, smallScatterPositionsByReel, smallScatterTypesByReel) {\n\tlet symbolsMargin = 100;\n\tfor (let reel = 0; reel < modifiedReels.length; reel++) {\n\t\tfor (let row = 0; row < modifiedReels[0].length; row++) {\n\t\t\tlet scatterRow = smallScatterPositionsByReel[reel];\n\t\t\tif (scatterRow == row) {\n\t\t\t\tlet scatterType = smallScatterTypesByReel[reel];\n\t\t\t\tif (scatterType == -1) scatterType = 11;\n\t\t\t\tlet currentId = modifiedReels[reel][row];\n\t\t\t\tlet newId = currentId * symbolsMargin + scatterType;\n\t\t\t\tmodifiedReels[reel][scatterRow] = newId;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = BarbarianTreasuresParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BeautysBeastSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BeautysBeastSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = BeautysBeastSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * BetfairsWildArcadeSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass BetfairsWildArcadeSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t\tif (data.gameData.slotGameArray[0].payoutData.BetfairsWildArcadePachinkoBonusDataDto != null ||\n\t\t\tdata.gameData.slotGameArray[0].payoutData.BetfairsWildArcadeClawMachineBonusDataDto != null ||\n\t\t\tdata.gameData.slotGameArray[0].payoutData.BetfairsWildArcadeCoinPusherBonusDataDto != null ) return;\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = BetfairsWildArcadeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BianconeriWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BianconeriWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.juventus.dto.JuventusBonus3Dto\"] = this._handleStickyWilds;\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.juventus.dto.JuventusBonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\n\nmodule.exports = BianconeriWildsParser;","const CaySlotParser = require('../CaySlotParser');\nconst Format = require('../../../../utils/Format');\n\n/**\n * BigRacingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass BigRacingSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet payoutData = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].payoutData;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol, payoutData));\n\t\t}\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\t\treturn reels;\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tlet wildIds = [\"h\", \"i\", \"j\", \"k\", \"l\"];\n\t\tlet horseIds = [3, 4, 5, 6, 7];\n\t\tif(data.BigRacingHorseBeforeWildDto != null) {\n\t\t\tvar position = row * 5 + reel;\n\t\t\tif(data.BigRacingHorseBeforeWildDto[0].horseBeforeWildPosition.indexOf(position) != -1) {\n\t\t\t\tlet horseId = data.BigRacingHorseBeforeWildDto[0].horseBeforeWild[data.BigRacingHorseBeforeWildDto[0].horseBeforeWildPosition.indexOf(position)];\n\t\t\t\tsymbolId = wildIds[horseIds.indexOf(horseId)];\n\t\t\t}\t\n\t\t}\n\t\treturn symbolId;\n\t}\n\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\t\tthis._initReels(response.game);\n\t\tthis._handleFeatures(response.game);\n\t\t\n\t\tif (response.game.gameData.slotGameArray[0].payoutData.BigRacingRaceResultDto == null || response.game.gameData.slotGameArray[0].payoutData.BigRacingRaceResultDto.length == 0) {\n\t\t\tthis._handleWins(response.game);\n\t\t}\n\n\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\t\n}\n\nmodule.exports = BigRacingSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BombTheJackpotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BombTheJackpotParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n}\n\nmodule.exports = BombTheJackpotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BuffaloRespinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BuffaloRespinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t\n\t\tthis.bonusDtos[\"cayetano.games.slots.buffalorespin.dto.BuffaloRespinBonus2Dto\"] = this._handleWildRespins;\n\t\tthis.fsWildRespins = [];\n\t}\n\n\t_handleRespins(data) {}\n\n\t_handleWildRespins(bonusDto, inFreeSpins) {\n\t\tif (this.winDetails.respins == undefined) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar substractRespinIndex = 0;\n\t\tbonusDto.spins.forEach((respin, i) => {\n\t\t\trespin.respinIndex = i - substractRespinIndex;\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tif (!respin.amount) {\n\t\t\t\tsubstractRespinIndex++;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (inFreeSpins) {\n\t\t\t\tthis.fsWildRespins.push(respin);\n\t\t\t}\n\t\t\telse if (!inFreeSpins) {\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t\tif(!inFreeSpins) this.winDetails.totalWin += respin.amount;\n\t\t});\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: (gameDto.spinNum > 0 ? 0 :  payoutData[i].winAmount)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i], gameDto.spinNum > 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.winAmount - (gameDto.winAmount / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tthis.fsWildRespins = [];\n\t\tthis._getPayoutDataBonuses(spin); // fsWildRespins calculated here\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\trespins: this.fsWildRespins\n\t\t}\n\t}\n\n\t_handleNudges(data) {}\n}\n\n\nmodule.exports = BuffaloRespinSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BullfightSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass BullfightSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = BullfightSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CastlePillagerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CastlePillagerSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CastlePillagerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CaveMegaBlastSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CaveMegaBlastSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CaveMegaBlastSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ClassyVegasParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ClassyVegasParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar result = [[],[],[],[],[]];\n\n\t\tvar reel = 0;\n\t\tvar tile = 0;\n\t\tvar symb = null;\n\n\t\twhile(reels.length > 0) {\n\t\t\tsymb = reels.shift()[0];\n\t\t\tif (symb == 99) {\n\t\t\t\tif (reel > 4) reel = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult[reel].push(symb);\n\t\t\tif (++reel > 4) reel = 0;\n\t\t}\n\n\t\tdata.reels = result;\n\n\t\treturn result;\n\t}\n\n\t_handleNudges(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractContactDto(respin);\n\t\t});\n\n\t\tthis.winDetails.totalWin += initialRespin.winAmount;\n\t}\n\n\t_extractContactDto(slotGameDto) {\n\t\tvar contactDto = null;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tcontactDto = data;\n\t\t\t}\n\t\t});\n\n\t\tif (!contactDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = contactDto.winAmount;\n\n\t\trespin.otherWins = respin.otherWins.map((win) => {\n\t\t\tif (win.type != \"multiplier\") {\n\t\t\t\treturn win;\n\t\t\t}\n\t\t\twin.amount = (contactDto.winAmount * slotGameDto.stakeMultiplier) - contactDto.winAmount;\n\t\t\treturn win;\n\t\t});\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data));\n\t\t\t}\n\t\t});\n\n\t\tresult.unshift(respin);\n\n\t\treturn result;\n\t}\n}\n\n\nmodule.exports = ClassyVegasParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CloningSheepSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CloningSheepSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this._extractLastSpin(this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1]);\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_extractLastSpin(data) {\n\t\tif(data.payoutData === undefined) return data;\n\t\tlet lastSpin = data;\n\t\tdata.payoutData.forEach((pd) =>{\n\t\t\tif(pd.respin != undefined) {\n\t\t\t\tlastSpin = pd.respin;\n\t\t\t}\n\t\t});\n\t\treturn lastSpin;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length > 1) return;\n\n\t\tthis.winDetails.respins = [];\n\t\tif(data.gameData.slotGameArray[0].payoutData != null) {\n\t\t\tfor (let i = 0; i < data.gameData.slotGameArray[0].payoutData.length; i++) {\n\t\t\t\tif (data.gameData.slotGameArray[0].payoutData[i].respin != null) {\n\t\t\t\t\tlet respin = data.gameData.slotGameArray[0].payoutData[i].respin;\n\t\t\t\t\t\n\t\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\n\t\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t\t\tlet len = this.winDetails.respins.length;\n\t\t\t\t\tlet bonusesWin = 0;\n\t\t\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t\t\t});\n\t\t\t\t\trespin.amount -= bonusesWin;\n\t\t\t\t\tif (len > 1) {\n\t\t\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar totalRespinsWinAmount = 0;\n\t\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t});\n\t\n\t\t\tif (totalRespinsWinAmount > 0) {\n\t\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t\t} else {\n\t\t\t\tthis.winDetails.respins = [];\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nmodule.exports = CloningSheepSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * CrazySuper7sSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CrazySuper7sSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = CrazySuper7sSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass CrusadeSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleFeatures(data) {\n\t\tvar fsDto = data.gameData.slotGameArray[0].payoutData.filter((pdata) => {\n\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\";\n\t\t});\n\t\tif (fsDto.length > 0) {\n\t\t\tif (fsDto[0].bonusGameId == 5) {\n\t\t\t\tthis.fsAsRespins = true;\n\t\t\t}\n\t\t}\n\t\treturn super._handleFeatures(data);\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tif (this.fsAsRespins) {\n\t\t\tthis.winDetails.respins = fspins;\n\t\t} else {\n\t\t\tthis.winDetails.freeSpins = fspins;\n\t\t}\n\t}\n}\n\n\nmodule.exports = CrusadeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DarkJungleParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DarkJungleParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tfor (var i = 0; i < screen.length; i++) {\n\t\t\tfor (var j = 0; j < screen[i].length; j++) {\n\t\t\t\tif (screen[i][j] == 1) continue;\n\t\t\t\tif (screen[i][j] == 2) {\n\t\t\t\t\tscreen[i][j] = 13;\n\t\t\t\t} else {\n\t\t\t\t\tscreen[i][j]--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn screen;\n\t}\n\n\t_getWinLines(spin) {\n\t\tlet respinLines = super._getWinLines(spin);\n\t\tvar multiplier = 1;\n\t\tspin.payoutData.forEach((data, index) => {\n\t\t\t\t\t\tif (data.className != \"cayetano.games.slots.darkjungle.dto.DarkJungleRespinWrapperDto\") return;\n\t\t\t\t\t\trespinLines = super._getWinLines(data.respin);\n\t\t\t\t\t\tmultiplier = index;\n\t\t\t\t\t});\n\t\treturn respinLines.map((line) => { \n\t\t\tline.amount *= multiplier; \n\t\t\treturn line; \n\t\t});\n\t}\n}\n\n\nmodule.exports = DarkJungleParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DetectiveWilderParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DetectiveWilderParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.detectivewilder.dto.DetectiveWilderBonus2Dto\"] = this._handleWildRespins;\n\t}\n\n\t_handleWildRespins(bonusDto) {\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t\tvar substractRespinIndex = 0;\n\t\tbonusDto.bonusSpins.forEach((respin, i) => {\n\t\t\trespin.respinIndex = i - substractRespinIndex;\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tif (!respin.amount) {\n\t\t\t\tsubstractRespinIndex++;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tthis.winDetails.totalWin += respin.amount;\n\t\t});\n\t\tconsole.warn(bonusDto)\n\t}\n}\n\n\nmodule.exports = DetectiveWilderParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DiamondRushParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DiamondRushParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar bonusSpin = spin.payoutData.find((pdata) => pdata.className == \"cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto\");\n\t\tif (bonusSpin) {\n\t\t\tspin.payoutData = bonusSpin.bonusSpin.payoutData;\n\t\t}\n\t\treturn super._handleSingleFreeSpin(spin);\n\t}\n}\n\n\nmodule.exports = DiamondRushParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * DragonsWildSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass DragonsWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = DragonsWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * EasterMoneyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass EasterMoneyParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.parseAdditionalResponses = true;\n\t}\n\n\t_handleWins(data) {\n\t\tif (!data.choices || data.choices.selected) return;\n\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = EasterMoneyParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * EgyptianWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass EgyptianWildsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = EgyptianWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FantasiaParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FantasiaParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\t\tlet screens = [[],[],[],[]];\n\n\t\treelsBuffer.forEach(function(reel, reelIndex) {\n\t\t\tlet idx = 0;\n\t\t\tfor (let i = 0; i < 8; i+=2) {\n\t\t\t\tscreens[idx++].push(reel.slice(i * 3, (i+1)*3));\n\t\t\t}\n\t\t});\n\n\t\tdata.reels = [];\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tdata.reels.push(screens[0][i].concat(screens[2][i]).map(function(symbol) {\n\t\t\t\treturn symbol - offset;\n\t\t\t}));\n\t\t}\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tdata.reels.push(screens[1][i].concat(screens[3][i]).map(function(symbol) {\n\t\t\t\treturn symbol - offset;\n\t\t\t}));\n\t\t}\n\n\t\treturn data.reels;\n\t}\n}\n\n\nmodule.exports = FantasiaParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FlirtingTangSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FlirtingTangSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FlirtingTangSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzy2020Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzy2020Parser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.footyfrenzy2020.dto.FootyFrenzy2020Bonus3Dto\"] = this._handleRandomWildsBonus.bind(this);\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2020.dto.FootyFrenzy2020Bonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2020jackpot.dto.FootyFrenzy2020Bonus3Dto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n/*\t_initReels(data) {\n\t\tvar result = super._initReels(data);\n\n\t\tif (this._wilds && Array.isArray(this._wilds)) {\n\t\t\tthis._wilds.forEach((wild) => {\n\t\t\t\tresult[wild.x][wild.y] = 2;\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}*/\n}\n\n\nmodule.exports = FootyFrenzy2020Parser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzy2022Parser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzy2022Parser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.footyfrenzy2022.dto.FootyFrenzy2022Bonus3Dto\"] = this._handleRandomWildsBonus.bind(this);\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2022.dto.FootyFrenzy2022Bonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy2022jackpot.dto.FootyFrenzy2022Bonus3Dto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n/*\t_initReels(data) {\n\t\tvar result = super._initReels(data);\n\n\t\tif (this._wilds && Array.isArray(this._wilds)) {\n\t\t\tthis._wilds.forEach((wild) => {\n\t\t\t\tresult[wild.x][wild.y] = 2;\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}*/\n}\n\n\nmodule.exports = FootyFrenzy2022Parser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FootyFrenzyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FootyFrenzyParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.footyfrenzy.dto.FootyFrenzyBonus3Dto') return true;\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedWildBonusDataDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\n\nmodule.exports = FootyFrenzyParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ForestRushParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ForestRushParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.forestrush.dto.ForestRushBonus1Dto\"] = \"bonus\";\n\t}\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastPayoutData = this.data.game.gameData.slotGameArray[0].payoutData != undefined ? this.data.game.gameData.slotGameArray[0].payoutData[this.data.game.gameData.slotGameArray[0].payoutData.length - 1] : undefined\n\t\tif(lastPayoutData != undefined && lastPayoutData.respin != undefined) {\n\t\t\toutput.reels = this._initReels(lastPayoutData.respin); \n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = ForestRushParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FrootShootParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FrootShootParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotPyramidBonusDataDto\"] = \"bonus\";\n\t}\n}\n\nmodule.exports = FrootShootParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitPopsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitPopsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tlet reels = [[],[],[],[],[]];\n\t\tlet c = 0;\n\t\tfor (let reel = 0; reel < 5; reel++) {\n\t\t\tfor (let row = 0; row < 5; row++) {\n\t\t\t\treels[row].push(reelsBuffer[c++][0] - offset);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn data.reels = reels;\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\n\t\treturn respins;\n\t}\n}\n\n\nmodule.exports = FruitPopsParser;","const Format = require('../../../../utils/Format');\n\nconst CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackBigSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackBigSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.wheelDto = \"cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto\";\n\t\tdelete this.bonusDtos[this.wheelDto];\n\t\tthis.afterParseOperationsCalled = 0;\n\t}\n\n\t_handleAdditionalResponse(response){\n\t\tif (!Array.isArray(response.game.gameData.slotGameArray)) {\n\t\t\tresponse.game.gameData.slotGameArray = [response.game.gameData.slotGameArray];\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(response);\n\n\t\tif (typeof this._beforeParseOperations === 'function') {\n\t\t\tthis._beforeParseOperations(response);\n\t\t}\n\n\t\tthis._handleFeatures(response.game);\n\n\t\tif(response.user && response.user.balance) this.data.user = response.user;\n\n\t\tif (this.balanceAtStart != null) {\n\t\t\tthis.data.user.balance.cash.atStart = this.balanceAtStart;\n\t\t}\n\n\t\tif (this.freebetAtStart != null) {\n\t\t\tthis.data.user.balance.freeBets.atStart = this.freebetAtStart;\n\t\t}\n\n\t\tif (typeof this._afterParseOperations === 'function') {\n\t\t\tthis._afterParseOperations(response);\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.afterParseOperationsCalled++ < this.responses.length - 1) return;\n\n\t\tvar bonusWheel = data.game.gameData.slotGameArray[0].payoutData.filter((data) => {\n\t\t\treturn data.className == this.wheelDto && data.winAmount > 0;\n\t\t});\n\n\t\tif (bonusWheel.length) {\n\t\t\tbonusWheel = bonusWheel[0];\n\n\t\t\t// if not free spins\n\t\t\tif (bonusWheel.wheelValues[0] >= 0) {\n\t\t\t\tthis.winDetails.otherWins.push({\n\t\t\t\t\ttype: 'bonus',\n\t\t\t\t\tamount: bonusWheel.winAmount,\n\t\t\t\t\tdto: bonusWheel.className\n\t\t\t\t});\n\t\t\t\tthis.winDetails.totalWin += bonusWheel.winAmount;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = FruitStackBigSpinsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackDeluxeParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackDeluxeParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleStackedWilds(data) {\n\t\tvar WILD_SYMBOL = 12;\n\t\tvar offset = null;\n\t\tdata.gameData.slotGameArray.forEach((gameObj) => {\n\t\t\tvar result = gameObj.result; \n\t\t\tif (offset === null) {\n\t\t\t\toffset = Math.floor(gameObj.screen[0][0] / 100) * 100;\n\t\t\t}\n\t\t\tgameObj.payoutData.forEach((pData) => {\n\t\t\t\tif (pData.className != 'cayetano.games.slots.fruitstackdelux.dto.FruitStackDeluxWildSymbolDto' || !pData.replaceReels) return;\n\t\t\t\tpData.replaceReels.forEach((reelToReplace, id) => {\n\t\t\t\t\tdata.reels[reelToReplace].forEach((symbol, index) => {\n\t\t\t\t\t\tif (symbol == pData.replacementSymbol - offset && index <= Math.abs(result[reelToReplace] - pData.toPos[id])) {\n\t\t\t\t\t\t\tdata.reels[reelToReplace][index] = WILD_SYMBOL;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\tsuper._handleStackedWilds(data);\n\t}\n}\n\n\nmodule.exports = FruitStackDeluxeParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackMysteryWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackMysteryWinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackMysteryWinSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * FruitStackOneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass FruitStackOneSlotParser extends CaySlotParser {\n\tconstructor(){\n\t\tsuper();\n\t}\n\t_generateOutput() {\n\t\tlet lastSpinId = this.data.game.gameData.slotGameArray.length - 1;\n\n\t\tif (this.data.game.gameData.slotGameArray[lastSpinId].result != undefined) {\n\t\t\tlet resultPosition = this.data.game.gameData.slotGameArray[lastSpinId].result[0];\n\t\t\tlet symbolAbove = this.getAdjustedSymbol(resultPosition - 1, this.data.game.gameData.slotGameArray[lastSpinId].reelsIndex[0]);\n\t\t\tlet symbolBelow = this.getAdjustedSymbol(resultPosition + 1, this.data.game.gameData.slotGameArray[lastSpinId].reelsIndex[0]);\n\t\t\t\n\t\t\tthis.data.game.gameData.slotGameArray[lastSpinId].screen.unshift(symbolAbove);\n\t\t\tthis.data.game.gameData.slotGameArray[lastSpinId].screen.push(symbolBelow);\n\t\t\tthis.finalScreen = [this.data.game.gameData.slotGameArray[lastSpinId].screen.map((symbol, row) => this._mapSymbol(0, row, symbol))];\n\t\t\tthis.finalScreen.unshift([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.unshift([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.push([\"0\",\"0\",\"0\"]);\n\t\t\tthis.finalScreen.push([\"0\",\"0\",\"0\"]);\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tlimitedWin: this.winDetails.limitedWin,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels:  this.finalScreen,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\tgetAdjustedSymbol(position, reelsIndex) {\n\t\tconst reelsArray = [\n\t\t\t\"5z6z7z8z6z9z8z5z8y1z7z5z7z8z2z9y8z9z2z5z6z4z1z9z6z9z2z5z8z2z9z8z2z9z6z5z2z9z6z9z9z2z7z6z9z4z8z6z9z6z9z6z5z8z7z9z8z9y8z9z4z5z5z2z9z9z8z9z2z5z9z8y9z9z9y8z2z7z8y2z7z7z2z7z7z7z9z7z7z7z9z2z7z7z9z4z8y7z7z6z4z6z7z8z6z4z8z5z7z1z7z5z2y8z7z9z1z5z2z1z8z8z7z9z3z7z2z9y1z2z3z8z4z5z5z3z9z6z7z7z9z3z7z7z5z7z7z1z8y7z5z3z7z8z1z9z5z7z8z5z8z1z7z3z5z1z8z8z7z8z1y8z3z1z7z5z2z1z8z8z7z5z6z5z3z8z4z9z5z4z8z2y9z7z4y5z4z7y1z2z5z2z4z9z4y1z4z5y4z8z7z5z1y4z5z8y4z1z7z8z1z4z4z5y1z6z4z1z4y5z5z1z2z5z1z2y5z5z1z8z2z5y6z1z5z5z8y6z1z5z6z1z6z6z6z1z6z6z2z1z6z2z8z6z6z4z1z6z6z2z4z6z1z6z9z6z1z6z6z2z6z1z9z6z6z8y1z8z6z6z9z1z6z6z9z4z1z9z9z9z\",\n\t\t\t\"5z6z7z8z6z9z8z5z8y1z7z5z7z8z2z9y8z9z2z7z6z8z1z9z6z9z2z5z8z2z9z8z2z9z6z7z2z9z6z9z9z2z7z6z9z4z8z6z9z6z9z6z7z8z7z9z8z9y8z9z9z5z7z2z9z9z8z9z2z7z9z8y9z9z9y8z2z7z8y2z7z7z2z7z7z7z9z7z7z7z9z2z7z7z9z4z8y7z7z6z9z6z7z8z6z7z8z5z7z1z7z5z7y8z7z9z1z5z2z1z8z8z7z9z3z7z2z9y1z2z3z8z2z5z8z9z9z3z7z7z9z3z7z7z8z7z8z1z9y7z8z3z7z8z1z9z8z7z8z8z8z1z7z3z9z1z8z8z7z2z1y8z3z1z7z2z7z1z2z8z7z2z2z5z1z2z4z1z3z7z3z2y1z7z4y5z4z3y1z2z7z7z4z6z4y1z4z5z4z8z7z5z1y4z5z6z4z1z7z8z1z4z4z5y1z6z4z1z4y5z6z1z6z2z1z6y5z6z1z8z6z5z6z1z5z6z8y6z1z6z6z1z6z6z6z1z6z6z8z1z6z8z8z6z6z9z1z6z6z8z9z6z1z6z9z6z1z6z6z9z6z1z9z6z6z8y1z8z6z6z4z1z6z6z9z4z1z9z9z9z\",\n\t\t\t\"5z6z7z8z6z9z8z6z8y6z7z6z7z8z9z9y8z7z2z7z6z8z7z9z3z9z6z7z8y7z9z8z8z5z6z7z4z7z6z7z4z5z7z6z5z9z8z6z9z6y5z6z7z8z6z9z8z6y8z6z7z6z7z8z9z9z8z7y2z7z6z8z7z9z6z9z6z7z8z7z9z8z8z5z6z7y9z7z6z7z9z5z7z6z5z4z8z6z9z6z5z6z7y8z6z9z8z6z8z6z7z6z7z8z9z9z8z7z8z7y6z8z7z9z7z9z6z7z8z7z9z9y8z5z6z7z4z7z6z7z9z5z7z6z5z9z8z6z9y6z5z6z7z8z6z9z8z6z8z6z7z6z7z8y9z9z8z7z2z7z6z8z7z9z9z9z6z7z8z7z9z8z8z5z6z7z4z7z6z7z9z5z7z6z5z9z8z9z9z9z5y9z7z8z9z9z8z9z8z9z7y9z7z8z9z9y8z7z2z7z6y8z7z9z9z9z9z7z8z7z9z8z8z5z9z7y4z9z6z9z4y5z7z6z5z4z8z6z9z6z5z6y7z8z8z9z8z8z8z8z9z8y7z8z9z9z8z9z2z9z8z8y7z9z9z9z8z9z8z7z9z9y8z5z6z9z4z7z6z9z4z5y9z8z5z4z8z8z9z6z\"\n\t\t];\n\n\t\tif (position >= reelsArray[reelsIndex].length) position -= reelsArray[reelsIndex].length;\n\t\telse if (position < 0) position += reelsArray[reelsIndex].length;\n\n\t\treturn reelsArray[reelsIndex][position];\n\t}\n\n\t_splitScreen(data) {}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tif(symbolId == \"y\") return \"a\";\n\t\telse if(symbolId == \"z\") return \"0\";\n\t\telse return symbolId;\n\t}\n\n\t_initReels(data) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = FruitStackOneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FruitStackSuperDoubleWildSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FruitStackSuperDoubleWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FruitStackSuperDoubleWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * FunFairParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass FunFairParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = FunFairParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GemBlastParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.finalReels = [];\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\t\t\n\t\toutput.reels = this.finalReels;\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tvar screenSize = 7;\n\t\tlet reels = [];\n\t\tfor (let i = 0; i < screenSize; i++) reels.push([]);\n\n\t\tlet c = 0;\n\t\tfor (let reel = 0; reel < screenSize; reel++) {\n\t\t\tfor (let row = 0; row < screenSize; row++) {\n\t\t\t\treels[row].push(reelsBuffer[c++][0] - offset);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn data.reels = reels;\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis.finalReels = this._initReels(data);\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\t\t\n\t\treturn respins;\n\t}\n}\n\n\nmodule.exports = GemBlastParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GiftsOfRaSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GiftsOfRaSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t// this.bonusDtos[\"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\"] = this._handleManekiWildTransforms.bind(this);\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] > 4) reels[reel][tile] -= 4;\n\t\t\t}\n\t\t}\n\n\t\tvar specialSymbol = this.determineSpecialSymbol(data.gameData.slotGameArray[0].payoutData);\n\n\t\treels.push([0, specialSymbol, 0]);\n\n\t\treturn reels;\n\t}\n\n\tdetermineSpecialSymbol(data) {\n\t\tvar selectedSymbol = null;\n\t\tvar specialSymbolDto = data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaSpecialSymbolDto\");\n\t\tif (specialSymbolDto.length == 0) return null;\n\t\telse selectedSymbol = specialSymbolDto[0].selectedSymbol;\n\n\t\tlet offset = Math.floor(selectedSymbol / 100) * 100;\n\t\tlet symbolsMap = {\"6\":2,\"7\":3,\"8\":4,\"9\":5,\"10\":6,\"11\":7,\"12\":8,\"13\":9,\"14\":10};\n\t\tlet multiplierOffset = 100;\n\t\tlet linkedReelsOffset = 200;\n\t\tlet transformedSymbolOffset = 5;\n\t\tselectedSymbol -= offset;\n\n\t\tswitch(selectedSymbol) {\n\t\t\tcase 1:\n\t\t\t\treturn 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaDoublePayBonusDto\")[0].selectedSymbol - offset - 4;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWinMultiplierBonusDto\")[0].multiplier + multiplierOffset;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaLinkedReelsBonusDto\")[0].linkedReels.length + linkedReelsOffset;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWildTransformBonusDto\")[0].transformedSymbol - offset + transformedSymbolOffset;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tvar wildTransform = data.game.gameData.slotGameArray[0].payoutData.filter((d) => d.className == \"cayetano.games.slots.giftsofra.dto.GiftsOfRaWildTransformBonusDto\");\n\t\tif (wildTransform.length > 0) {\n\t\t\tthis.transformSymbols(wildTransform[0]);\n\t\t}\n\t}\n\n\ttransformSymbols(dto) {\n\t\tvar diff = dto.transformedSymbol - dto.selectedSymbol;\n\t\tdto.wildSticky.stickyPos.forEach((pos, i) => {\n\t\t\tthis.data.game.reels[dto.wildSticky.stickyReels[i]][pos] += diff + 9;\n\t\t});\n\t}\n}\n\n\nmodule.exports = GiftsOfRaSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenKingdomParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenKingdomParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus1Dto\"': \"bonus\",\n\t\t\t'cayetano.games.slots.dwarftreasures.dto.DwarfTreasuresBonus5Dto': \"bonus\"\n\t\t};\n\t}\n\n\t_hasFreeSpins(data) {\n\t\tvar hasFreeSpins = false;\n\t\tdata.gameData.slotGameArray.filter((fs) => {\n\t\t\tfs.payoutData.forEach((pdata) => {\n\t\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\") {\n\t\t\t\t\tif (pdata.bonusGameId == 2) {\n\t\t\t\t\t\thasFreeSpins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn hasFreeSpins;\n\t}\n\n\t_hasRespins(data) {\n\t\tvar hasRespins = false;\n\t\tdata.gameData.slotGameArray.filter((fs) => {\n\t\t\tfs.payoutData.forEach((pdata) => {\n\t\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto\") {\n\t\t\t\t\tif (pdata.bonusGameId == 3) {\n\t\t\t\t\t\thasRespins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn hasRespins;\n\t}\n\n\t_getDefaultRespin(data) {\n\t\tlet respin = null;\n\t\tdata.filter((obj) => {\n\t\t\tif (obj.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\trespin = obj.respin;\n\t\t\t}\n\t\t\t\n\t\t});\n\t\treturn respin;\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tif (this._hasFreeSpins(data)) super._handleFreeSpins(data);\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length <= 1) return;\n\n\t\tif (!this._hasRespins(data)) return;\n\n\t\tthis.winDetails.respins = [];\n\n\t\tfor (let i = 0; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tlet defaultR = this._getDefaultRespin(respin.payoutData);\n\t\t\tif(defaultR != null) {\n\t\t\t\trespin = defaultR;\n\t\t\t}\n\t\t\telse if(i == 0) continue;\n\t\t\trespin.respinIndex = i - 1;\n\t\t\t\n\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.respins.push(respin);\n\t\t\tlet len = this.winDetails.respins.length;\n\t\t\tlet bonusesWin = 0;\n\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t});\n\t\t\trespin.amount -= bonusesWin;\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t}\n\t}\n}\n\n\nmodule.exports = GoldenKingdomParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenPlanetParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenPlanetParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.goldenplanet.dto.GoldenPlanetCloneDto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (var x = 0; x < 5; x++) {\n\t\t\treels.push([]);\n\t\t\tfor (var y = 0; y < 5; y++) {\n\t\t\t\treels[x][y] = reelsBuffer[y * 7 + x] - offset;\n\t\t\t}\n\t\t}\n\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tthis._handleGoldenPlanetRespins(initialSpin);\n\t}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: this._handleGoldenPlanetRespins(spin, true)\n\t\t};\n\t}\n\n\t_handleGoldenPlanetRespins(data, returnResult = false) {\n\t\tif (returnResult) {\n\t\t\treturn this._getGoldenPlanetRespins(data);\n\t\t}\n\t\tdata.payoutData.forEach((pData, i) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tthis._handleGoldenPlanetContact(pData, returnResult, returnResult ? i + 1 : null);\n\t\t\t}\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleGoldenPlanetRespins(pData);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getGoldenPlanetRespins(data, respinIndex = 1) {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < data.payoutData.length; i++) {\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotContactDataDto') {\n\t\t\t\tresult.push(this._handleGoldenPlanetContact(data.payoutData[i], true, respinIndex));\n\t\t\t}\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tresult = result.concat(this._getGoldenPlanetRespins(data.payoutData[i], respinIndex + 1));\n\t\t\t\trespinIndex++;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t_handleGoldenPlanetContact(data, returnResult = false, respinNum = null) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tif (respinNum == null) {\n\t\t\trespinNum = this.winDetails.respins.length + 1;\n\t\t}\n\t\tvar respinData = {\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\n\t\tif (returnResult) {\n\t\t\treturn respinData;\n\t\t}\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push(respinData);\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\n\nmodule.exports = GoldenPlanetParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenPotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\n\t _generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this._extractLastSpin(this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1]);\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_extractLastSpin(data) {\n\t\tif(data.payoutData === undefined) return data;\n\t\tlet lastSpin = data;\n\t\tdata.payoutData.forEach((pd) =>{\n\t\t\tif(pd.respin != undefined) {\n\t\t\t\tlastSpin = pd.respin;\n\t\t\t}\n\t\t});\n\t\treturn lastSpin;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\t\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray.length > 1) return;\n\n\t\tthis.winDetails.respins = [];\n\t\tif(data.gameData.slotGameArray[0].payoutData != null) {\n\t\t\tfor (let i = 0; i < data.gameData.slotGameArray[0].payoutData.length; i++) {\n\t\t\t\tif (data.gameData.slotGameArray[0].payoutData[i].respin != null) {\n\t\t\t\t\tlet respin = data.gameData.slotGameArray[0].payoutData[i].respin;\n\t\t\t\t\t\n\t\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\n\t\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t\t\tlet len = this.winDetails.respins.length;\n\t\t\t\t\tlet bonusesWin = 0;\n\t\t\t\t\trespin.otherWins.forEach((bonus) => {\n\t\t\t\t\t\tbonusesWin += bonus.amount;\n\t\t\t\t\t});\n\t\t\t\t\trespin.amount -= bonusesWin;\n\t\t\t\t\tif (len > 1) {\n\t\t\t\t\t\tthis.winDetails.respins[len - 2].amount -= respin.amount;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar totalRespinsWinAmount = 0;\n\t\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t});\n\t\n\t\t\tif (totalRespinsWinAmount > 0) {\n\t\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t\t} else {\n\t\t\t\tthis.winDetails.respins = [];\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nmodule.exports = GoldenPotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldenThunderSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldenThunderSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tconsole.warn('asdf1123');\n\t}\n\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet linesWinAmount = this._getWinLines(gameDto).reduce((a, b) => a + b.amount, 0);\n\t\tlet bonuses = [];\nconsole.warn(linesWinAmount);\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1 && linesWinAmount > 0) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: linesWinAmount * (gameDto.stakeMultiplier - 1)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = GoldenThunderSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GolderadoParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GolderadoParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tsuper._beforeParseOperations(data);\n\t\tdata.game.gameData.slotGameArray.slice(1).forEach((elem) => this._handlePayoutDataBonuses(elem));\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n\nmodule.exports = GolderadoParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GoldheadsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GoldheadsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.goldheads.logic.dto.GoldheadsRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin', // fs instant win \n\t\t\t'cayetano.games.slots.goldheads.logic.dto.GoldheadsSerpentWildInstantWinDto': 'instantWin' // fs instant win \n\t\t};\n\t\t\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length-1].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tvar mystery = data.gameData.slotGameArray[0].payoutData.filter(p => p.className == \"cayetano.games.slots.goldheads.logic.dto.GoldheadsMysterySymbolDto\");\n\t\tvar wildType = 0;\n\t\tvar wildSymbol = 2;\n\t\tif (mystery.length > 0) {\n\t\t\twildType = mystery[0].wildType\n\t\t}\n\t\tswitch(wildType) {\n\t\t\tcase 1: wildSymbol += 20; break;\n\t\t\tcase 3: wildSymbol += 30; break;\n\t\t}\n\n\t\treturn data.reels = reels.map(reel => reel.map(symbol => symbol == 2 ? wildSymbol : symbol));\n\t}\n}\n\nmodule.exports = GoldheadsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GreatGemsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GreatGemsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = GreatGemsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GypsyLuckParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass GypsyLuckParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.gypsyluck.dto.GypsyLuckWinLinesDto\"] = \"bonus\";\n\t}\n\n\tsanitizeData(data) {\n\t\tdata = super.sanitizeData(data);\n\n\t\tdata.responses.forEach((response, idx) => {\n\t\t\tif (Array.isArray(response.game.gameData)) {\n\t\t\t\tresponse.game.gameData = {\n\t\t\t\t\tslotGameArray: response.game.gameData\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\t\tdata.reels = reels.map(function(reel, index) {\n\t\t\tif (index == 0 || index == 4) {\n\t\t\t\treturn reel.slice(0, 3);\n\t\t\t}\n\t\t\tif (index == 1 || index == 3) {\n\t\t\t\treturn reel.slice(0, 4);\n\t\t\t}\n\t\t\treturn reel;\n\t\t});\n\t\treturn data.reels;\n\t}\n}\n\n\nmodule.exports = GypsyLuckParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HalloWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HalloWinSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HalloWinSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HappyHourParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HappyHourParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HappyHourParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HappyRoosterSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HappyRoosterSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = HappyRoosterSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * HotSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass HotSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol) => symbol - offset);\n\t\t}\n\n\t\tif (data.gameData.slotGameArray != null && data.gameData.slotGameArray[0].payoutData.length == 0) {\n\t\t\treels[3] = reels[3].map((s) => 99);\n\t\t}\n\n\t\treels[3].forEach((symbol, idx) => {\n\t\t\tif (idx != 1) {\n\t\t\t\treels[3][idx] = 99;\n\t\t\t} else if (symbol != 3) {\n\t\t\t\treels[4] = reels[4].map((s) => 99);\n\t\t\t} else {\n\t\t\t\treels[4] = reels[4].map((s,i) => i != 1 ? 99 : s);\n\t\t\t}\n\t\t});\n\n\t\tfor (var i = 0; i < 5; i++) {\n\t\t\treels[i][0] = 98;\n\t\t\treels[i][2] = 98;\n\t\t}\n\n\t\tfor (var i = 0; i < reels.length; i++) {\n\t\t\tfor (var j = 0; j < reels[i].length; j++) {\n\t\t\t\tif (reels[i][j] >= 20 && reels[i][j] < 30) {\n\t\t\t\t\treels[i][j] -= 9\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn data.reels = reels;\n\t}\n}\n\n\nmodule.exports = HotSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * IndianPrincessParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass IndianPrincessParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t//\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto'];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tthis._handleStackedSymbol(data.game);\n\t}\n\n\t_handleStackedSymbol(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto'});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t}\n}\n\nmodule.exports = IndianPrincessParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * IrishCloverSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass IrishCloverSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = IrishCloverSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JadeFortuneTempleParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JadeFortuneTempleParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// this.cummulativeWin = 0;\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto'];\n\t\tthis.bonusDtos['cayetano.games.slots.jadefortunetemple.dto.JadeFortuneTempleScattersPayDto'] = 'bonus';\n\t\tthis.pendingMultiplier = null;\n\t}\n\n\t_initReels(data) {\n\t\tvar superRes = super._initReels(data);\n\n\n\t\tsuperRes = superRes.map(function(reel) {\n\t\t\treturn reel.map((symbol) => symbol == 99 ? 16 : symbol);\n\t\t});\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\tsuperRes.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel >= 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\n\n\t_handlePayoutDataBonuses(){}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleNudges(data) {\n\t\t// \n\t}\n\n\t_handleRespins(data, featureName, respinData = null, respinIndex = 1, currAmount = 0) {\n\t\tif (data && !respinData) {\n\t\t\trespinData = data.gameData.slotGameArray[0];\n\t\t}\n\t\trespinData.respinIndex = respinIndex;\n\t\tif (respinData.stakeMultiplier > 1) {\n\t\t\tif (!this.pendingMultiplier) this.pendingMultiplier = respinData.stakeMultiplier;\n\t\t}\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar nextRespin = this._handleSingleRespin(respinData);\n\n\t\tvar rData = respinData.payoutData.filter(d => d.className == \"cayetano.games.slots.jadefortunetemple.dto.JadeFortuneTempleSlotContactDataDto\");\n\t\tif (rData.length > 0) {\n\t\t\tif (rData[0].respinCumulativeWinAmount)\n\t\t\tnextRespin.amount = rData[0].respinCumulativeWinAmount - currAmount;\n\t\t\tcurrAmount += nextRespin.amount;\n\t\t}\n\n\t\tthis.winDetails.respins.push(nextRespin);\n\n\t\tthis.winDetails.totalWin += nextRespin.amount;\n\t\tnextRespin.otherWins.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t})\n\n\t\tvar hasNextRespin = false;\n\t\trespinData.payoutData.filter(pdata => pdata.className == 'cayetano.games.slots.dto.SlotGameDto').forEach(respin => {\n\t\t\thasNextRespin = true;\n\t\t\tthis._handleRespins(null, 'respin', respin, ++respinIndex, currAmount);\n\t\t});\n\n\t\tif (!hasNextRespin && this.pendingMultiplier) {\n\t\t\tvar multiplierWin = this.winDetails.totalWin * (this.pendingMultiplier - 1);\n\t\t\tnextRespin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multiplierWin\n\t\t\t});\n\t\t\tthis.winDetails.totalWin += multiplierWin;\n\t\t\tthis.pendingMultiplier = null;\n\t\t}\n\t}\n\n\t_handleSingleRespin(data) {\n\t\tlet payoutData = data.payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.SlotContactDataDto'});\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: payoutData.length == 0 ? 0 : payoutData[0].winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t}\n\t}\n}\n\n\nmodule.exports = JadeFortuneTempleParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JapaneseMysterySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JapaneseMysterySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = JapaneseMysterySlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * JoustingWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass JoustingWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis._pendingData = null;\n\t\tthis.finalReels = [];\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\t\n\t\tif(this.finalReels.length > 0) output.reels = this.finalReels;\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tdata.reels.forEach((reel, reelIndex) => {\n\t\t\tdata.reels[reelIndex] = reel.map((symbol, tileIndex) => {\n\t\t\t\tif (symbol != 1) return symbol;\n\t\t\t\tif (reelIndex < 2) return 13;\n\t\t\t\tif (reelIndex > 2) return 12;\n\t\t\t\treturn 1;\n\t\t\t});\n\t\t});\n\n\t\treturn data.reels;\n\t}\n\n\t_handleStickyData(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tvar payoutData = data.gameData.slotGameArray[0].payoutData;\n\n\t\tlet respin = payoutData.filter(function(pdata) {\n\t\t\t\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\" && pdata.bonusGameId == 3;\n\t\t\t\t\t});\n\n\t\tlet respinCommon = payoutData.filter(function(pdata) {\n\t\t\t\treturn pdata.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\";\n\t\t\t});\n\n\t\tif (respinCommon.length > 0) this.finalReels = this._initReels(respinCommon[0].respin);\n\n\t\tif (respin.length > 0) {\n\t\t\treturn this._customStickyDataHandler({gameData: {slotGameArray: [respin[0].respin]}});\n\t\t}\n\n\t\t\n\t\treturn this._customStickyDataHandler(data);\n\t}\n\n\t_customStickyDataHandler(data) {\n\t\tvar stickyData = data.gameData.slotGameArray[0].slotGameStickyData;\n\t\tif (!stickyData || stickyData.stickyPos.length == 0) return;\n\n\t\tvar newData = JSON.parse(JSON.stringify(data));\n\n\t\tstickyData.stickyPos.forEach(function(pos, idx) {\n\t\t\tnewData.gameData.slotGameArray[0].screen[stickyData.stickyReels[idx]][pos] = stickyData.stickySymbolIds[idx];\n\t\t});\n\t\tthis.data.game.reels = this._initReels(newData);\n\t\tthis._pendingData = newData.gameData.slotGameArray[0];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this._pendingData) {\n\t\t\tthis.winDetails.winLines = this._getWinLines(this._pendingData);\n\t\t\tthis._pendingData = null;\n\t\t}\n\t}\n}\n\n\nmodule.exports = JoustingWildsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * KeepingUpWithThePaddysSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass KeepingUpWithThePaddysSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = KeepingUpWithThePaddysSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LeagueOfWildsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LeagueOfWildsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos = {\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotExtendedInstantWinBonusDataDto': 'instantWin',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotWheelOfFortuneBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotPathBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotStackedSymbolBonusDataDto': this._handleStackedSymbol,\n\t\t\t'cayetano.games.slots.dto.SlotGambleWinCardPickDataDto': this._handleGamble,\n\t\t\t'cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsGreenWildBonusDataDto': 'bonus',\n\t\t\t'cayetano.games.slots.dto.bonuses.SlotFreeSpinBonusDataDto': 'instantWin' // fs instant win \n\t\t};\n\t}\n\t\n\t_initReels(data) {\n\t\tlet modifiedReels = super._initReels(data);\n\n\t\tlet screen = data.gameData.slotGameArray[0].screen;\n\t\tlet wildType;\n\t\tdata.gameData.slotGameArray[0].payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.leagueofwilds.dto.LeagueOfWildsWildTypeDataDto\") {\n\t\t\t\twildType = data.wildType;\n\t\t\t}\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tscreen = data.respin.screen;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (wildType != null) replaceSymbols(modifiedReels, screen, wildType);\n\n\t\treturn modifiedReels;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tlet spinFinal = spin;\n\t\t\n\t\tspinFinal.payoutData.forEach(data => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tspinFinal = data.respin;\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spinFinal.winAmount,\n\t\t\twinLines: this._getWinLines(spinFinal),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t}\n\t}\n\t\n\t_handleStackedWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\t\tlet lines = this._getWinLines(newGameData.gameData.slotGameArray[0]);\n\t\tif(data.gameData.slotGameArray[0].cumulativeNumSpins == 0) {\n\t\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\t\tthis.winDetails.totalWin = 0;\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\t}\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nfunction replaceSymbols(modifiedReels, screen, wildType) {\n\tlet symbolsMargin = 100;\n\tfor (let reel = 0; reel < modifiedReels.length; reel++) {\n\t\tfor (let row = 0; row < modifiedReels[0].length; row++) {\n\t\t\tlet symbol = screen[reel][row] - Math.floor(screen[reel][row] / 100) * 100;\n\t\t\tif (symbol  == 3) {\n\t\t\t\tlet reelMargin = 0;\n\t\t\t\t\n\t\t\t\tif (wildType == 3) reelMargin = reel;\n\t\t\t\t\n\t\t\t\tlet newId = symbol + symbolsMargin * wildType + reelMargin * 10;\n\t\t\t\tmodifiedReels[reel][row] = newId;\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = LeagueOfWildsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LittleRedRidingHoodSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LittleRedRidingHoodSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = LittleRedRidingHoodSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * LuckyCabaretParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LuckyCabaretParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.moulinrouge.dto.MoulinRougeBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_handleNudges(data) {\n\t\tlet respins = this._flattenNudges(data.gameData.slotGameArray[0]);\n\n\t\trespins.forEach((respin) => {\n\t\t\tlet currRespin = this._handleSingleRespin(respin);\n\t\t\tthis.winDetails.otherWins = currRespin.otherWins;\n\t\t\tconsole.warn(currRespin)\n\t\t\tthis.winDetails.totalWin += currRespin.amount;\n\t\t});\n\t}\n}\n\nmodule.exports = LuckyCabaretParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass LuckyMahjongSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n}\n\n\nmodule.exports = LuckyMahjongSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MagicFairiesSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MagicFairiesSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MagicFairiesSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * BuffaloRespinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MagnificentWildSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t}\n\t\n\t_initReels(data) {\n\t\tvar respins = this._extractRespins(data.gameData.slotGameArray[0]);\n\t\tlet reelsBuffer = respins[respins.length - 1].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\t\n\t\t\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractLineDto(respin);\n\t\t});\n\n\t\tinitialRespin.screen = respins[respins.length - 1].screen;\n\t\tthis.winDetails.totalWin = initialRespin.cumulativeWinAmount;\n\t}\n\n\t_extractLineDto(slotGameDto) {\n\t\tvar lineDto = null;\n\t\tlet cumulativeLinesWinAmount = 0;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotLineDataDto\") {\n\t\t\t\tlineDto = data;\n\t\t\t\tcumulativeLinesWinAmount += lineDto.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tif (!lineDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = cumulativeLinesWinAmount;\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data.respin));\n\t\t\t}\n\t\t});\n\n\t\tresult.push(respin);\n\n\t\treturn result;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = MagnificentWildSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ManekiGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ManekiGoldParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\t// this.bonusDtos[\"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\"] = this._handleManekiWildTransforms.bind(this);\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tfor (let reel = 0; reel < reels.length; reel++) {\n\t\t\tfor (let tile = 0; tile < reels[reel].length; tile++) {\n\t\t\t\tif (reels[reel][tile] > 4) reels[reel][tile] -= 4;\n\t\t\t}\n\t\t}\n\n\t\tvar specialSymbol = this.determineSpecialSymbol(data.gameData.slotGameArray[0].payoutData);\n\n\t\treels.push([0, specialSymbol, 0]);\n\n\t\treturn reels;\n\t}\n\n\tdetermineSpecialSymbol(data) {\n\t\tvar selectedSymbol = null;\n\t\tvar specialSymbolDto = data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldSpecialSymbolDto\");\n\t\tif (specialSymbolDto.length == 0) return null;\n\t\telse selectedSymbol = specialSymbolDto[0].selectedSymbol;\n\n\t\tlet offset = Math.floor(selectedSymbol / 100) * 100;\n\t\tlet symbolsMap = {\"6\":2,\"7\":3,\"8\":4,\"9\":5,\"10\":6,\"11\":7,\"12\":8,\"13\":9,\"14\":10};\n\t\tlet multiplierOffset = 100;\n\t\tlet linkedReelsOffset = 200;\n\t\tlet transformedSymbolOffset = 5;\n\t\tselectedSymbol -= offset;\n\n\t\tswitch(selectedSymbol) {\n\t\t\tcase 1:\n\t\t\t\treturn 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldDoublePayBonusDto\")[0].selectedSymbol - offset - 4;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWinMultiplierBonusDto\")[0].multiplier + multiplierOffset;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldLinkedReelsBonusDto\")[0].linkedReels.length + linkedReelsOffset;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\treturn data.filter((payoutData) => payoutData.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\")[0].transformedSymbol - offset + transformedSymbolOffset;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tvar wildTransform = data.game.gameData.slotGameArray[0].payoutData.filter((d) => d.className == \"cayetano.games.slots.manekigold.dto.ManekiGoldWildTransformBonusDto\");\n\t\tif (wildTransform.length > 0) {\n\t\t\tthis.transformSymbols(wildTransform[0]);\n\t\t}\n\t}\n\n\ttransformSymbols(dto) {\n\t\tvar diff = dto.transformedSymbol - dto.selectedSymbol;\n\t\tdto.wildSticky.stickyPos.forEach((pos, i) => {\n\t\t\tthis.data.game.reels[dto.wildSticky.stickyReels[i]][pos] += diff + 9;\n\t\t});\n\t}\n}\n\n\nmodule.exports = ManekiGoldParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MaximusReelsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MaximusReelsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.maximusreels.dto.MaximusReelsBonus1Dto\"] = this._handleMaximusFreeSpinsDto.bind(this);\n\t\tthis.freeSpinsMultiplier = 1;\n\t}\n\n\t_handleMaximusFreeSpinsDto(data) {\n\t\tthis.freeSpinsMultiplier = data.freeSpinParams.stakeMultiplier;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar multWinAmount = this.freeSpinsMultiplier > 1 ? spin.winAmount - (spin.winAmount / this.freeSpinsMultiplier) : 0;\n\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar spin = {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t};\n\n\t\tif (multWinAmount > 0) {\n\t\t\tspin.winLines = spin.winLines.map((line) => {\n\t\t\t\tline.amount /= this.freeSpinsMultiplier;\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\tspin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWinAmount\n\t\t\t});\n\t\t}\n\n\t\treturn spin;\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen.filter((reel) => reel.length > 0);\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = MaximusReelsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MayanMysterySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MayanMysterySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MayanMysterySlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * MazeOfFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass MazeOfFortuneSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tconsole.log(key);\n\t\t\t\tconsole.log(value);\n\t\t\t\tif (key == \"MazeOfFotruneRandomFallingPrizesDetailsDto\") {\n\t\t\t\t\tvalue.forEach(element => {\n\t\t\t\t\t\tif (element.winAmount > 0) {\n\t\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\t\tamount: element.winAmount\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\tamount: value[value.length - 1].winAmount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\tif (spin.payoutData != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n}\n\nmodule.exports = MazeOfFortuneSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * MineCrusherSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass MineCrusherSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"MineCrusherAllSymbolPayouts\"];\n\t\t\n\t}\n\t\n\tparse(gameId, data) {\n\t\tdata.game.gameData.slotGameArray.forEach(spinData => {\n\t\t\tif (spinData.payoutData.MineCrusherAllSymbolPayouts != undefined) {\n\t\t\t\tspinData.payoutData.MineCrusherAllSymbolPayouts[0].MineCrusherSymbolPayout.forEach(payout => {\n\t\t\t\t\tpayout.reels = payout.tiles;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn super.parse(gameId, data);\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], [], [], []];\n\t\t\tvar gridWidth = 7;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tif (payoutData.MineCrusherAllSymbolPayouts != undefined) {\n\t\t\t\tsymbolPayout = payoutData.MineCrusherAllSymbolPayouts[0].MineCrusherSymbolPayout;\n\t\t\t}\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin * this.data.game.stake,\n\t\t\t\t\t\tstart: symbolPayout[i].reels[0],\n\t\t\t\t\t\tlength: symbolPayout[i].reels.length,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleMineCrusherSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleMineCrusherSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"MineCrusherAllSymbolPayouts\") {\n\t\t\t\tvar payouts = data.payoutData[property][0].MineCrusherSymbolPayout;\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleMineCrusherContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleMineCrusherContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n\t\n\t_handlePayoutDataBonuses(gameDto) {\n\t\tlet bonuses = this._getPayoutDataBonuses(gameDto);\n\n\t\tbonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.otherWins.push(bonus);\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t}\n\t\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\t\n\t\tif (spin.payoutData != null && spin.payoutData.MineCrusherRedFairyDto != null) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'bonus',\n\t\t\t\tamount: spin.payoutData.MineCrusherRedFairyDto[0].winAmount\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = MineCrusherSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MississippiQueenSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MississippiQueenSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MississippiQueenSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyMachineParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyMachineParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = MoneyMachineParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyNightSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyNightSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MoneyNightSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MoneyTowerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MoneyTowerSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = MoneyTowerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MonteCarloRacingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MonteCarloRacingSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MonteCarloRacingSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * MrDiamondsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass MrDiamondsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.mrdiamonds.dto.MrDiamondsBonus1Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = MrDiamondsParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * NeonWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass NeonWildsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = NeonWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * NudgingGemsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass NudgingGemsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = NudgingGemsSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * WorldOfWizardsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass OstrichLuckSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalEggsWinAmount = this._handleEggsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{ \"type\": \"bonus\", \"amount\": parseFloat(totalEggsWinAmount) }];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\n\t\treturn generateOutput;\n\t}\n\n\t_handleEggsWin(spin) {\n\t\tvar eggsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"OstrichLuckEggSpinBonusDto\") eggsWin = payoutData[className][0].winAmount\n\t\t\t}\n\t\t}\n\t\treturn eggsWin;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif (respin != undefined && respin.isRespin === true && (respin.payoutData.OstrichLuckSpinDto == undefined || respin.payoutData.OstrichLuckSpinDto == null)) {\n\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tthis.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tvar totalRespinsWinAmount = 0;\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\n}\n\nmodule.exports = OstrichLuckSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddyPowerFanaticsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerFanaticsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = PaddyPowerFanaticsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerGoldBookOfLuckSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerGoldBookOfLuckSlotParser extends CaySlotParser {\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\tif(data.gameData.slotGameArray[0].totalSpins == 0 || data.gameData.slotGameArray[0].currentSpin > 1){\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\t}\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n}\n\nmodule.exports = PaddyPowerGoldBookOfLuckSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerGoldOnTourSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerGoldOnTourSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n    _getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet bonuses = [];\n\t\tlet spin = gameDto;\n\t\tif (spin.payoutData != undefined) {\n\t\t\tfor (const [key, value] of Object.entries(spin.payoutData)) {\n\t\t\t\tif (value[value.length - 1].winAmount > 0 && this.nonBonusDtoNames.indexOf(key.toString()) == -1) {\n\t\t\t\t\tif(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\t\t\tamount: value[value.length - 1].winAmount / spin.stakeMultiplier\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(key == \"SlotGambleWinCardPick\") {\n\t\t\t\t\tthis._handleGamble(value[value.length - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (spin.payoutData != undefined && \n\t\t\tspin.payoutData.SlotRespinWrapper != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin != undefined &&\n\t\t\tspin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier != undefined &&\n            spin.payoutData.SlotRespinWrapper[0].respin.stakeMultiplier > 1) {\n\t\t\t\tspin = spin.payoutData.SlotRespinWrapper[0].respin;\n\t\t\t}\n\n\t\tif (spin.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.currentSpinWinAmount - (gameDto.currentSpinWinAmount / spin.stakeMultiplier)\n\t\t\t});\n\t\t}\n        else if (spin.payoutData.SlotPrizeBonus != undefined) {\n            bonuses.push({\n                type: 'multiplier',\n\t\t\t\tamount: spin.payoutData.SlotPrizeBonus[0].winAmount\n\t\t\t});\n        }\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = PaddyPowerGoldOnTourSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PaddyPowerGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldBonus1Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldBonus2Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddyspotogold.dto.PaddysPotOGoldWinLineDto\"] = this._handlePotOGoldWinLineDto;\n\n\t\tthis.overrideLines = null;\n\t\tthis.reelsParsed = false;\n\t}\n\n\t_handlePotOGoldWinLineDto(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tif (dto.multiplier > 1) {\n\t\t\tlet notMultipliedAmount = dto.winAmount / dto.multiplier;\n\t\t\tthis.winDetails.otherWins.push({ type: 'multiplier', amount: dto.winAmount - notMultipliedAmount });\n\t\t\tthis.winDetails.totalWin += dto.winAmount - notMultipliedAmount;\n\t\t}\n\t\tthis.data.game.reels = this._initReels({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tthis.reelsParsed = true;\n\t}\n\n\t_initReels(data) {\n\t\tif (this.reelsParsed) return;\n\t\treturn data.reels = super._initReels(data);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t}\n}\n\nmodule.exports = PaddyPowerGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PaddyPowerMysteryGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddyPowerMysteryGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PaddyPowerMysteryGoldSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * PaddyPowerShowtimeSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddyPowerShowtimeSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"CumulativeSymbolPayout\", \"SymbolPayout\"];\t\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], []];\n\t\t\tvar gridWidth = 5;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tsymbolPayout = payoutData.SymbolPayout;\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleShowtimeSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleShowtimeSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"SymbolPayout\") {\n\t\t\t\tvar payouts = data.payoutData[property];\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleShowtimeContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleShowtimeContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n}\n\nmodule.exports = PaddyPowerShowtimeSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddysLuckyMineParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddysLuckyMineParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.paddysluckymine.dto.PaddysLuckyMineBonus2Dto\"] = \"bonus\";\n\t}\n\n}\n\n\nmodule.exports = PaddysLuckyMineParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * PaddysLuckyPigeonParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PaddysLuckyPigeonParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.PaddysLuckyPigeon.dto.PaddysLuckyPigeonBonus2Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto\"] = \"instantWin\";\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tvar instantWinAmount = 0;\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (bonuses[bonuses.length - 1].type == \"instantWin\") {\n\t\t\t\t\t\t\tinstantWinAmount += bonuses[bonuses.length - 1].amount;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tvar multAmount = gameDto.winAmount - instantWinAmount;\n\t\t\tif (multAmount > 0) {\n\t\t\t\tbonuses.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: multAmount - (multAmount / gameDto.stakeMultiplier)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn bonuses;\n\t}\n\n\t_handleStickyData(data) {\n\t\t// do nothing\n\t\t// in other games, this method replaces no winning wilds with the symbols from styicky data\n\t}\n}\n\n\nmodule.exports = PaddysLuckyPigeonParser;","const CaySlotParser = require('../CaySlotParser');\nconst Format = require('../../../../utils/Format');\n\n/**\n * PaddysWonderWheelUnderConstructionSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PaddysWonderWheelUnderConstructionSlotParser extends CaySlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.nonBonusDtoNames.push(\"CumulativeSymbolPayout\");\n\t}\n\n\t_handleRespins(data) {\n\t\tif (data.gameData.slotGameArray[0].hasRespin) return super._handleRespins(data);\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\tlet reels = [];\n\t\tlet respin = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].payoutData.SlotRespinWrapper;\n\n\t\tif (respin != undefined) {\n\t\t\treelsBuffer = respin[0].respin.screen;\n\t\t\treelsBuffer = reelsBuffer.map(element => {\n\t\t\t\treturn element.toString().split(\"\");\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol));\n\t\t}\n\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tconst brand = urlParams.get('brand');\n\t\tif (brand === \"paddyMars\") reels = this._replaceBrandedSymbols(reels);\n\n\t\tdata.reels = reels;\n\t\tthis.finalScreen = reels;\n\n\t\treturn reels;\n\t}\n\n\t_replaceBrandedSymbols(screen) {\n\t\treturn screen.map(reel => {\n\t\t\treturn reel = reel.map(symbol => {\n\t\t\t\tif (symbol == 1) return 'c';\n\t\t\t\telse if (symbol == 2) return 'd';\n\t\t\t\telse return symbol;\n\t\t\t});\n\t\t});\n\t}\n\n}\n\nmodule.exports = PaddysWonderWheelUnderConstructionSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ParadiseTreasuresSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ParadiseTreasuresSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = ParadiseTreasuresSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PersianGlorySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PersianGlorySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PersianGlorySlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PiratesHoldDavyLockersCoinsSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalCoinsWinAmount = this._handleCoinsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(totalCoinsWinAmount)}];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_handleCoinsWin(spin) {\n\t\tvar coinsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\t\t\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"PiratesHoldBonus3Dto\") coinsWin = payoutData[className][0].winAmount //DavyBonus dto\n\t\t\t}\n\t\t}\n\t\treturn coinsWin;\n\t}\n\n\t_parseScreen(screen) {\n\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\tfor (let i = 0; i < screen.length; i++) {\n\t\t\tscreenCopy.push(screen[i]);\n\t\t}\n\t\tvar parsedScr = [];\n\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\tvar symbols = [];\n\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\tsymbols.push(rows[row]);\n\t\t\t}\n\t\t\tparsedScr.push(symbols);\n\t\t}\n\t\treturn parsedScr;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {}\n\n\t_handleRespins(data) {}\n}\n\nmodule.exports = PiratesHoldDavyLockersCoinsSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * GemBlastParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass PiratesHoldSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\t\tvar totalCoinsWinAmount = this._handleCoinsWin(this.data.game.gameData.slotGameArray[0]);\n\t\tgenerateOutput.winDetails.otherWins = [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(totalCoinsWinAmount)}];\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_handleCoinsWin(spin) {\n\t\tvar coinsWin = 0;\n\t\tlet payoutData = spin.payoutData;\n\t\t\n\t\tfor (var className in payoutData) {\n\t\t\tif (payoutData.hasOwnProperty(className)) {\n\t\t\t\tif (className == \"PiratesHoldBonus2Dto\") coinsWin = payoutData[className][0].totalPrizeWinAmount //AnneBonus dto\n\t\t\t\telse if (className == \"PiratesHoldBonus3Dto\" || className == \"PiratesHoldBonus1Dto\") coinsWin = payoutData[className][0].winAmount //DavyBonus dto, JackBonus(fs) dto\n\t\t\t}\n\t\t}\n\t\treturn coinsWin;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\treturn {\n\t\t\ttype: spin.currentSpin,\n\t\t\tamount: spin.currentSpinWinAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\totherWins: [{\"type\":\"totalCoinsWin\",\"amount\":parseFloat(this._handleCoinsWin(spin))}]\n\t\t}\n\t}\n\n\t_davyBonusInFS(spin) {\n\t\treturn spin.currentSpin > 0 && spin.hasRespin;\n\t}\n\n\t_initReels(data) {\n\t\tlet slotGameArray = data.gameData.slotGameArray;\n\t\tlet reels = [];\n\t\tfor (let i = 0; i < slotGameArray.length; i++) {\n\t\t\tif (slotGameArray[i].isRespin) return;\n\t\t\tlet reelsBuffer = data.gameData.slotGameArray[i].screen;\n\t\t\tfor (let j = 0; j < reelsBuffer.length; j++) {\n\t\t\t\treels[j] = reelsBuffer[j].map((symbol, row) => this._mapSymbol(j, row, symbol, data.gameData.slotGameArray[i]));\n\t\t\t}\n\t\t\tdata.reels = reels;\n\t\t\tthis.finalScreen = reels;\n\t\t}\n\t\treturn reels;\n\t}\n\n\t_mapSymbol(reel, row, symbolId, data) {\n\t\tif(data != undefined && data.payoutData != undefined && data.payoutData.PiratesHoldBonus2Dto != undefined) {\n\t\t\tconsole.log(data.payoutData.PiratesHoldBonus2Dto[0]);\n\t\t\tfor (let i = 0; i < data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData.length; i++) {\n\t\t\t\tif(data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].x == reel && data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].y == row) {\n\t\t\t\t\tsymbolId = data.payoutData.PiratesHoldBonus2Dto[0].respin.slotGameStickyData[i].s;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} \n\t\treturn symbolId;\n\t}\n\n\t_parseScreen(screen) {\n\t\tlet screenCopy = []; // make a copy for the new screen response\n\t\tfor (let i = 0; i < screen.length; i++) {\n\t\t\tscreenCopy.push(screen[i]);\n\t\t}\n\t\tvar parsedScr = [];\n\t\tfor (let reel = 0; reel < screenCopy.length; reel++) {\n\t\t\tlet rows = screenCopy[reel].split(\"\");\n\t\t\tvar symbols = [];\n\t\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\t\tsymbols.push(rows[row]);\n\t\t\t}\n\t\t\tparsedScr.push(symbols);\n\t\t}\n\t\treturn parsedScr;\n\t}\n\n\t_handlePayoutDataBonuses(gameDto) {}\n\n\t_handleRespins(data) {}\n}\n\nmodule.exports = PiratesHoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PoseidonFortuneSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PoseidonFortuneSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PoseidonFortuneSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * PyramidGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass PyramidGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = PyramidGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RacingWildsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RacingWildsSlotParser extends CaySlotParserLegacy {\n\tconstructor(){\n\t\tsuper();\n\t}\n\t\n\t_generateOutput() {\n\t\tvar generateOutput = super._generateOutput();\n\n\t\tgenerateOutput.transactions.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\tgenerateOutput.winDetails.totalWin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1].accumulatedWinAmount;\n\t\t\n\t\treturn generateOutput;\n\t}\n\n\t_initReels(data) {\n\t\t// let modifiedReels =;\n\n\t\tlet screen = data.gameData.slotGameArray[0].screen;\n\t\tlet wildReels = [];\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsGreenWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsGreenWildDto[0].greenWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [11,12,13];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsBlueWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsBlueWildDto[0].blueWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [14,15,16];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(data.gameData.slotGameArray[0].payoutData.RacingWildsPinkWildDto != null) {\n\t\t\tlet stickyReels = data.gameData.slotGameArray[0].payoutData.RacingWildsPinkWildDto[0].pinkWilds.stickyReels;\n\t\t\tfor(let i = 0; i < stickyReels.length; i++) {\n\t\t\t\tif(wildReels.indexOf(stickyReels[i]) == -1) {\n\t\t\t\t\twildReels.push(stickyReels[i]);\n\t\t\t\t\tscreen[stickyReels[i]] = [17,18,19];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn super._initReels(data);\n\t}\n\t\n\t_getWinLines(spin) {\n\t\tlet payoutData = spin.payoutData;\n\t\tlet winLines = [];\n\n\t\tif(payoutData.SymbolPayout != null) {\n\t\t\tfor (let i = 0; i < payoutData.SymbolPayout.length; i++) {\n\t\t\t\twinLines.push({\n\t\t\t\t\tindex: i,\n\t\t\t\t\ttype: 1 + i,\n\t\t\t\t\tamount: payoutData.SymbolPayout[i].winAmount,\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tlength: payoutData.SymbolPayout[i].reels.length,\n\t\t\t\t\ttiles: payoutData.SymbolPayout[i].tiles\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twinLines.sort(function(a, b) {\n\t\t\treturn a.type - b.type;\n\t\t});\n\n\t\treturn winLines;\n\t}\n\t\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.totalSpins > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\tconsole.log(lines);\n\t\tlines.forEach((line) => {\n\t\t\tif(isNaN(this.winDetails.totalWin)) {\n\t\t\t\tthis.winDetails.totalWin = 0;\n\t\t\t}\n\n\t\t\tif(isNaN(this.winDetails.totalWin)) {\n\t\t\t\tthis.winDetails.totalWin = 0;\n\t\t\t}\n\n\t\t\tconsole.log(this.winDetails.totalWin, line.amount);\n\t\t\tthis.winDetails.totalWin += line.amount;\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tlet payoutData = gameDto.payoutData;\n\t\tlet bonuses = [];\n\n\t\tfor (let i = 0; i < payoutData.length; i++) {\n\t\t\tif (this.bonusDtos[payoutData[i].className]) {\n\t\t\t\tif (typeof this.bonusDtos[payoutData[i].className] == 'string') {\n\t\t\t\t\tif (payoutData[i].winAmount > 0) {\n\t\t\t\t\t\tbonuses.push({\n\t\t\t\t\t\t\ttype: this.bonusDtos[payoutData[i].className],\n\t\t\t\t\t\t\tamount: payoutData[i].winAmount\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof this.bonusDtos[payoutData[i].className] == 'function' && runScreenBonuses) {\n\t\t\t\t\tthis.bonusDtos[payoutData[i].className].call(this, payoutData[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (gameDto.stakeMultiplier > 1) {\n\t\t\tbonuses.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: gameDto.cumulativeWin - (gameDto.cumulativeWin / gameDto.stakeMultiplier)\n\t\t\t});\n\t\t}\n\n\t\treturn bonuses;\n\t}\n}\n\nmodule.exports = RacingWildsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ReelsOfEgyptParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ReelsOfEgyptParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t/*\n\t\t\tline win 40\n\t\t\tbonus:\n\t\t\t\t- try #1: 90x\n\t\t\t\t- try #2: 80x\n\t\t\t\t- collect - total win 160\n\t\t */\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\"] = this._handlePyramidBonus;\n\n\t\tthis.pyramidBonus = null;\n\t\tthis.afterParseOperationsCalled = 0;\n\t\tthis.parseAdditionalResponses = true;\n\t}\n\n\t_handlePyramidBonus(bonusDto) {\n\t\tif (bonusDto.winAmount == 0) return;\n\t\tthis.pyramidBonus = bonusDto;\n\t}\n\n\t_afterParseOperations(data, index) {\n\t\tsuper._afterParseOperations(data, index);\n\n\t\tif (!this.pyramidBonus) return;\n\n\t\tif (!this.winDetails.otherWins) {\n\t\t\tthis.winDetails.otherWins = [];\n\t\t}\n\n\t\tconsole.log(this.winDetails.otherWins, this.pyramidBonus);\n\t\t// remove other pyramid bonuses\n\t\tthis.winDetails.otherWins = this.winDetails.otherWins.filter((win) => {\n\t\t\tif (!win.dto) return true;\n\t\t\tif (win.dto != this.pyramidBonus.className) return true;\n\t\t\treturn false;\n\t\t});\n\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'bonus',\n\t\t\tamount: this.pyramidBonus.winAmount,\n\t\t\tdto: this.pyramidBonus.className\n\t\t});\n\n\t\tif (this.afterParseOperationsCalled++ == this.responses.length - 1) {\n\t\t\tthis.winDetails.totalWin += this.pyramidBonus.winAmount;\n\t\t}\n\t}\n\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = this.winDetails.winLines.concat(lines);\n\t}\n}\n\n\nmodule.exports = ReelsOfEgyptParser;\n/*\ncollect on first round\n{\"success\":true,\"result\":{\"history\":{\"responses\":[{\"user\":{\"balance\":{\"cash\":{\"atStart\":\"1270.40\",\"afterBet\":\"1268.40\",\"atEnd\":\"1268.40\"},\"freeBets\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"},\"bonus\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"}},\"bonuses\":[]},\"game\":{\"stake\":\"2.00\",\"win\":{\"lines\":\"0.00\",\"total\":\"0.00\"},\"choices\":{\"selected\":null,\"available\":[0,1]},\"gameData\":{\"slotGameArray\":[{\"winAmount\":210,\"className\":\"cayetano.games.slots.dto.SlotGameDto\",\"ticketId\":null,\"finished\":false,\"maxPayoutEnforced\":false,\"data\":null,\"userData\":null,\"cumulativeWinAmount\":210,\"reelsIndex\":0,\"result\":[45,2,19],\"screenSize\":3,\"screen\":[[14006,14008,14002],[14008,14004,14001],[14008,14004,14002]],\"reelSpinsLonger\":[],\"reelHasScatter\":[],\"payoutData\":[{\"winAmount\":40,\"className\":\"cayetano.games.slots.dto.SlotLineDataDto\",\"lineNum\":2,\"linePos\":[2,2,2],\"lineSymbols\":[14002,14001,14002],\"lineSize\":3,\"lineStart\":0,\"lineMultiplier\":1},{\"winAmount\":0,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptFourthReelDto\",\"stopPosition\":15,\"outcome\":-2,\"reelSet\":[1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,-2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2]},{\"winAmount\":170,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\",\"bonusGameId\":2,\"chosenPyramids\":[3,4,7],\"chosenFaces\":[20,25,40],\"allPyramids\":[5,10,15,20,25,30,35,40,50,0],\"multiplier\":85},{\"winAmount\":0,\"className\":\"cayetano.games.slots.dto.SlotInputRequestDto\",\"userInput\":{\"value\":{\"choices\":[0,1]}},\"bonusGameId\":-2}],\"cumulativeNumSpins\":0,\"spinNum\":0,\"slotGameStickyData\":{\"stickyReels\":[],\"stickyPos\":[],\"stickySymbolIds\":[]},\"preSpinStates\":[0,0],\"postSpinStates\":[2,2],\"stakeMultiplier\":1,\"jackpotTriggerEventDtos\":null,\"preSpinDecompressedStates\":[[0],[0]],\"postSpinDecompressedStates\":[[2],[2]]}],\"sequence\":\"[]\"},\"hasState\":true},\"jackpots\":null},{\"user\":{\"balance\":{\"cash\":{\"atStart\":\"1268.40\",\"afterBet\":\"1268.40\",\"atEnd\":\"1648.40\"},\"freeBets\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"},\"bonus\":{\"atStart\":\"0.00\",\"afterBet\":\"0.00\",\"atEnd\":\"0.00\"}},\"bonuses\":[]},\"game\":{\"choices\":{\"selected\":\"0\",\"available\":[]},\"win\":{\"total\":\"380.00\",\"bonus\":\"170.00\"},\"gameData\":{\"slotGameArray\":[{\"winAmount\":170,\"className\":\"cayetano.games.slots.dto.SlotGameDto\",\"ticketId\":null,\"finished\":false,\"maxPayoutEnforced\":false,\"data\":null,\"userData\":null,\"cumulativeWinAmount\":170,\"reelsIndex\":0,\"result\":[45,2,19],\"screenSize\":3,\"screen\":[[14006,14008,14002],[14008,14004,14001],[14008,14004,14002]],\"reelSpinsLonger\":[],\"reelHasScatter\":[],\"payoutData\":[{\"winAmount\":0,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptFourthReelDto\",\"stopPosition\":15,\"outcome\":-2,\"reelSet\":[1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,-2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,2,1,3,1,2,1,5,1,3,1,2,1,3,1,2,1,3,1,2]},{\"winAmount\":170,\"className\":\"cayetano.games.slots.reelsofegypt.dto.ReelsOfEgyptBonus2Dto\",\"bonusGameId\":2,\"chosenPyramids\":[3,4,7],\"chosenFaces\":[20,25,40],\"allPyramids\":[5,10,15,20,25,30,35,40,50,0],\"multiplier\":85}],\"cumulativeNumSpins\":0,\"spinNum\":0,\"slotGameStickyData\":{\"stickyReels\":[],\"stickyPos\":[],\"stickySymbolIds\":[]},\"preSpinStates\":[0,0],\"postSpinStates\":[0,0],\"stakeMultiplier\":1,\"jackpotTriggerEventDtos\":null,\"preSpinDecompressedStates\":[[0],[0]],\"postSpinDecompressedStates\":[[0],[0]]}]},\"hasState\":true},\"jackpots\":null}],\"transactions\":{\"roundId\":15127,\"nextRoundId\":false,\"prevRoundId\":15074,\"startTime\":\"2017-10-26 08:45:20\",\"endTime\":\"2017-10-26 08:46:04\"}}}}\n */","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RhinoRumbleSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RhinoRumbleSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\tthis.bonusDtos[\"cayetano.games.slots.rhinorumble.dto.RhinoRumbleWinLineDto\"] = this._handleLineWinDto;\n\n\t\tthis.overrideLines = null;\n\t}\n\n\t_handleLineWinDto(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData:  {slotGameArray: [dto.bonusSpin]}});\n\t\tthis.data.game.reels = this._initReels({gameData:  {slotGameArray: [dto.bonusSpin]}});\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t}\n}\n\nmodule.exports = RhinoRumbleSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RobinHoodGoldenLootParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RobinHoodGoldenLootParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.RobinHoodGoldenLoot.dto.RobinHoodGoldenLootBonus1Dto\"] = this._handleMaximusFreeSpinsDto.bind(this);\n\t\tthis.freeSpinsMultiplier = 1;\n\t}\n\n\t_handleMaximusFreeSpinsDto(data) {\n\t\tthis.freeSpinsMultiplier = data.freeSpinParams.stakeMultiplier;\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tvar multWinAmount = this.freeSpinsMultiplier > 1 ? spin.winAmount - (spin.winAmount / this.freeSpinsMultiplier) : 0;\n\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar spin = {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin)\n\t\t};\n\n\t\tif (multWinAmount > 0) {\n\t\t\tspin.winLines = spin.winLines.map((line) => {\n\t\t\t\tline.amount /= this.freeSpinsMultiplier;\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\tspin.otherWins.push({\n\t\t\t\ttype: 'multiplier',\n\t\t\t\tamount: multWinAmount\n\t\t\t});\n\t\t}\n\n\t\treturn spin;\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen.filter((reel) => reel.length > 0);\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = RobinHoodGoldenLootParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RoyalGooseParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RoyalGooseParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = RoyalGooseParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RubyWalshChampionsGoldParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RubyWalshChampionsGoldParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.rubywalshchampionsgold.dto.RubyWalshChampionsGoldBonus7Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = RubyWalshChampionsGoldParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * RussianGlorySlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass RussianGlorySlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = RussianGlorySlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SafariDreamParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SafariDreamParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.africantour.dto.AfricanTourBonus2Dto\"] = \"bonus\";\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\tvar bonuses = super._getPayoutDataBonuses(gameDto, runScreenBonuses);\n\t\tvar tourBonusDto = null;\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.africantour.dto.AfricanTourBonus2Dto\") {\n\t\t\t\ttourBonusDto = data;\n\t\t\t}\n\t\t});\n\t\tbonuses.forEach((bonus) =>{\n\t\t\tif (bonus.type == \"multiplier\" && tourBonusDto != null) {\n\t\t\t\tbonus.amount = gameDto.winAmount - tourBonusDto.winAmount;\n\t\t\t}\n\t\t});\n\t\treturn bonuses;\n\t}\n}\n\n\nmodule.exports = SafariDreamParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SantasSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SantasSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.santa.dto.SantaSwapSymbolDto\"] = \"bonus\";\n\t\tthis.parseAdditionalResponses = true;\n\t}\n}\n\nmodule.exports = SantasSpinsParser;\n","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ShamanSpinsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ShamanSpinsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.shamanspell.dto.ShamanSpellBonus2Dto\"] = this._handleWildShowerBonus;\n\n\t\tthis.reelsParsed = false;\n\t\tthis.linesParsed = false;\n\t}\n\n\t_initReels(data, useThisReels) {\n\t\tif (!useThisReels && this.reelsParsed) return data.reels;\n\t\tthis.reelsParsed = true;\n\t\tvar reels = super._initReels(data);\n\t\tdata.reels = reels.map(function(reel, index) {\n\t\t\tif (index == 0 || index == 4) {\n\t\t\t\treturn reel.slice(0, 3);\n\t\t\t}\n\t\t\treturn reel;\n\t\t});\n\t\treturn data.reels;\n\t}\n\n\t_handleWins(data, useThisData) {\n\t\tif (!useThisData && this.linesParsed) return;\n\t\tthis.linesParsed = true;\n\t\treturn super._handleWins(data);\n\t}\n\n\t_handleWildShowerBonus(dto) {\n\t\tlet respin = dto.bonusSpin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData, true);\n\t\tthis._handleWins(newGameData, true);\n\t}\n}\n\n\nmodule.exports = ShamanSpinsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * ShowtimeSpinnerSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass ShowtimeSpinnerSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n        this.nonBonusDtoNames = [\"CumulativeSymbolPayout\", \"SymbolPayout\"];\t\n\t}\n\t\n\t_splitScreen(data) {\n\t\tdata.game.gameData.slotGameArray.forEach(sga => {\n\t\t\tlet screenCopy = [[], [], [], [], []];\n\t\t\tvar gridWidth = 5;\n\t\t\t\n\t\t\tfor (let i = 0; i < sga.screen.length; i++) {\n\t\t\t\tvar arrayIndex = i % gridWidth;\n\t\t\t\tscreenCopy[arrayIndex].push(sga.screen[i]);\n\t\t\t}\n\t\t\t\n\t\t\tsga.screen = screenCopy;\n\t\t});\n\t}\n\t\n\t_handleWins(data) {\n\t\tlet lines = this._getWinLinesInitialSpin(data.gameData.slotGameArray[0]);\n\n\t\tlines.forEach((line) => {\n\t\t\tthis.winDetails.totalWin += line.amount\n\t\t});\n\n\t\tthis.winDetails.winLines = lines;\n\t}\n\t\n\t_getWinLines(spin) {\n\t\treturn [];\n\t}\n\t\n\t_getWinLinesInitialSpin(spin) {\n\t\tlet winLines = [];\n\t\t\n\t\tlet payoutData = spin.payoutData;\n\t\tif(payoutData != undefined) {\n\t\t\tlet symbolPayout = null;\n\t\t\tsymbolPayout = payoutData.SymbolPayout;\n\t\t\t\n\t\t\tif (symbolPayout != null) {\n\t\t\t\tfor (let i = 0; i < symbolPayout.length; i++) {\n\t\t\t\t\tlet lineIndex = (symbolPayout[i].lineNum < 0 ? winLines.length : symbolPayout[i].id);\n\t\t\t\t\t\n\t\t\t\t\twinLines.push({\n\t\t\t\t\t\tindex: lineIndex,\n\t\t\t\t\t\ttype: 1 + lineIndex,\n\t\t\t\t\t\tamount: symbolPayout[i].multipliedWin,\n\t\t\t\t\t\ttiles: symbolPayout[i].tiles\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\twinLines.sort(function(a, b) {\n\t\t\t\t\treturn a.type - b.type;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn winLines;\n\t}\n\t\n\t_afterParseOperations(data) {\n\t\tdata.game.gameData.slotGameArray.forEach((i, spin) => {\n\t\t\tthis._handleShowtimeSpin(spin, i);\n\t\t});\n\t}\n\t\n\t_handleShowtimeSpin(data, respinNum) {\n\t\tvar result = [];\n\t\t\n\t\tfor (const property in data.payoutData) {\n\t\t\tif (property == \"SymbolPayout\") {\n\t\t\t\tvar payouts = data.payoutData[property];\n\t\t\t\tpayouts.forEach((p) => {\n\t\t\t\t\tresult.push(this._handleShowtimeContact(p, respinNum));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t\n\t_handleShowtimeContact(data, respinNum) {\n\t\treturn {\n\t\t\tamount: data.multipliedWin,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: respinNum\n\t\t};\n\t}\n\n    _initReels(data) {\n\t\tthis.finalScreen = data.gameData.slotGameArray[data.gameData.slotGameArray.length - 1].screen;\n\t\t\n\t\treturn this.finalScreen;\n\t}\n}\n\nmodule.exports = ShowtimeSpinnerSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SinbadsGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SinbadsGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = SinbadsGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SkullsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SkullsParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar screen = super._initReels(data);\n\n\t\tscreen.forEach((reel, idx) => {\n\t\t\treturn screen[idx] = reel.filter((symbol) => symbol < 99);\n\t\t});\n\n\t\tdata.reels = screen;\n\n\t\treturn screen;\n\t}\n}\n\n\nmodule.exports = SkullsParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * SlottingSlopesParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass SlottingSlopesSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handlePayoutDataBonuses(data.game.gameData.slotGameArray[0]);\n\n\t\tlet payoutData = data.game.gameData.slotGameArray[0].payoutData;\n\n\t\tif (payoutData.SlotRespinWrapper != undefined &&\n\t\t\tpayoutData.SlotRespinWrapper[0].respin != undefined) {\n\n\t\t}\n\t}\n\n\t_splitScreen(data) {\n\t\tlet payoutData = data.game.gameData.slotGameArray[0].payoutData;\n\n\t\tif (payoutData.SlotRespinWrapper != undefined &&\n\t\t\tpayoutData.SlotRespinWrapper[0].respin != undefined) {\n\t\t\t\tdata.game.gameData.slotGameArray[0].screen = payoutData.SlotRespinWrapper[0].respin.screen;\n\t\t}\n\n\t\tsuper._splitScreen(data);\n\t}\n}\n\nmodule.exports = SlottingSlopesSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SmoothieSmashSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SmoothieSmashSlotParser extends CaySlotParserLegacy {\n\t_flattenNudges(gameDto, index = 0) {}\n\t_handleNudges(data) {}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = this._getFuegoRespins(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.respins.forEach((respin) => this.winDetails.totalWin += respin.amount);\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar respins = this._getFuegoRespins(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: respins\n\t\t};\n\t}\n\n\t_getLinesWinAmount(gameDto) {\n\t\treturn gameDto.payoutData\n\t\t\t\t\t\t.filter((data) => data.className == \"cayetano.games.slots.dto.SlotLineDataDto\")\n\t\t\t\t\t\t.reduce((accum, elem) => accum + elem.winAmount, 0);\n\t}\n\n\t_getFuegoRespins(data) {\n\t\tvar respins = this._flattenRespins(data);\n\t\tvar result = [];\n\n\t\tfor (var i = 1; i < respins.length; i++) {\n\t\t\tlet respin = respins[i];\n\t\t\tlet respinParsed = this._getSingleRespin(respin);\n\n\t\t\tvar linesAmount = this._getLinesWinAmount(respin);\n\n\t\t\trespinParsed.amount = linesAmount;\n\t\t\trespinParsed.otherWins = [];\n\t\t\tif (respinParsed.amount > 0 && respin.stakeMultiplier > 1) {\n\t\t\t\trespinParsed.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: linesAmount * respin.stakeMultiplier - linesAmount\n\t\t\t\t});\n\t\t\t\trespinParsed.amount = linesAmount * respin.stakeMultiplier\n\t\t\t}\n\n\t\t\tresult.push(respinParsed);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_flattenRespins(gameDto, index = 0) {\n\t\tvar respins = [gameDto];\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t// respins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenRespins(data, index));\n\t\t\t}\n\t\t});\n\t\treturn respins;\n\t}\n\n\t_getSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t};\n\t}\n}\n\n\nmodule.exports = SmoothieSmashSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SolarSnapParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SolarSnapParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.lastRespinAmount = 0;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 4) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tthis._handleSolarSnapRespins(initialSpin);\n\t}\n\n\t_handleSolarSnapRespins(data) {\n\t\tdata.payoutData.forEach((pData) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.solarsnapremake.dto.SolarSnapRemakeSlotContactDataDto\") {\n\t\t\t\tthis._handleSolarSnapContact(pData);\n\t\t\t}\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleSolarSnapRespins(pData);\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleSolarSnapContact(data) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push({\n\t\t\tamount: data.respinCumulativeWinAmount - this.lastRespinAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: [],\n\t\t\ttype: this.winDetails.respins.length + 1\n\t\t});\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t\tthis.lastRespinAmount = data.respinCumulativeWinAmount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\n\nmodule.exports = SolarSnapParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n\n/**\n * SonsOfAsgardSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SonsOfAsgardSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto']\n\t\tthis._reelsInitialized = false;\n\t\tthis._winsHandled = false;\n\t}\n\n\t_beforeParseOperations(data) {\n\t\tthis._handleShuffleBonus(data.game);\n\t\treturn super._beforeParseOperations(data);\n\t}\n\n\t_handleWins(data) {\n\t\tif (!this._winsHandled) {\n\t\t\tthis._winsHandled = true;\n\t\t\tsuper._handleWins(data);\n\t\t}\n\t}\n\n\t_handleShuffleBonus(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {\n\t\t\tif (pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto') return true;\n\t\t\treturn false;\n\t\t});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t\tthis._reelsInitialized = true;\n\t}\n\n\t_initReels(data) {\n\t\tvar reels;\n\t\tif (this._reelsInitialized) {\n\t\t\treels = data.reels;\n\t\t} else {\n\t\t\treels = super._initReels(data).map((reel) => reel.slice(2,6));\n\t\t}\n\t\treturn data.reels = reels;\n\t}\n}\n\n\nmodule.exports = SonsOfAsgardSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SparklingJackpotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SparklingJackpotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.dto.bonuses.SlotInstantWinBonusDataDto\"] = \"bonus\";\n\t\tthis.bonusDtos[\"cayetano.games.slots.diamondfactory.dto.DiamondFactoryCrossDto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\t\n\n\t_flattenNudges(gameDto, index = 0) {\n\t\tlet respins = [];\n\n\t\tif (index == 0) {\n\t\t\tvar data = gameDto;\n\t\t\tdata.respinIndex = index++;\n\t\t\trespins.push(data);\n\t\t}\n\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\trespins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenNudges(data, index));\n\t\t\t}\n\t\t})\n\n\t\treturn respins;\n\t}\n}\n\nmodule.exports = SparklingJackpotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SphinxGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SphinxGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = SphinxGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * SuperFuegoParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass SuperFuegoParser extends CaySlotParserLegacy {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_flattenNudges(gameDto, index = 0) {}\n\t_handleNudges(data) {}\n\n\t_handleFreeSpins(data) {\n\t\tlet fspins = data.gameData.slotGameArray.filter((spin) => { return spin.spinNum > 0 });\n\n\t\tfspins = fspins.map(this._handleSingleFreeSpin.bind(this));\n\t\tthis.winDetails.freeSpins = fspins;\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = this._getFuegoRespins(data.gameData.slotGameArray[0]);\n\t\tthis.winDetails.respins.forEach((respin) => this.winDetails.totalWin += respin.amount);\n\t}\n\n\t_handleSingleFreeSpin(spin) {\n\t\tthis.winDetails.totalWin += spin.winAmount;\n\t\tvar pdatabonuses = this._getPayoutDataBonuses(spin);\n\t\tvar respins = this._getFuegoRespins(spin);\n\t\treturn {\n\t\t\ttype: spin.spinNum,\n\t\t\tamount: spin.winAmount,\n\t\t\twinLines: this._getWinLines(spin),\n\t\t\totherWins: this._getPayoutDataBonuses(spin),\n\t\t\trespins: respins\n\t\t};\n\t}\n\n\t_getLinesWinAmount(gameDto) {\n\t\treturn gameDto.payoutData\n\t\t\t\t\t\t.filter((data) => data.className == \"cayetano.games.slots.dto.SlotLineDataDto\")\n\t\t\t\t\t\t.reduce((accum, elem) => accum + elem.winAmount, 0);\n\t}\n\n\t_getFuegoRespins(data) {\n\t\tvar respins = this._flattenRespins(data);\n\t\tvar result = [];\n\n\t\tfor (var i = 1; i < respins.length; i++) {\n\t\t\tlet respin = respins[i];\n\t\t\tlet respinParsed = this._getSingleRespin(respin);\n\n\t\t\tvar linesAmount = this._getLinesWinAmount(respin);\n\n\t\t\trespinParsed.amount = linesAmount;\n\t\t\trespinParsed.otherWins = [];\n\t\t\tif (respinParsed.amount > 0 && respin.stakeMultiplier > 1) {\n\t\t\t\trespinParsed.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: linesAmount * respin.stakeMultiplier - linesAmount\n\t\t\t\t});\n\t\t\t\trespinParsed.amount = linesAmount * respin.stakeMultiplier\n\t\t\t}\n\n\t\t\tresult.push(respinParsed);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_flattenRespins(gameDto, index = 0) {\n\t\tvar respins = [gameDto];\n\t\tgameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tdata.respinIndex = index++;\n\t\t\t\t// respins.push(data);\n\t\t\t\trespins = respins.concat(this._flattenRespins(data, index));\n\t\t\t}\n\t\t});\n\t\treturn respins;\n\t}\n\n\t_getSingleRespin(data) {\n\t\treturn {\n\t\t\ttype: data.respinIndex,\n\t\t\tamount: data.winAmount,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: this._getPayoutDataBonuses(data)\n\t\t};\n\t}\n}\n\n\nmodule.exports = SuperFuegoParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * ThaiThaiSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass ThaiThaiSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = ThaiThaiSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TheGreatWildParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TheGreatWildParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.bonusDtos['cayetano.games.slots.thegreatwild.dto.TheGreatWildBonus1Dto'] = 'bonus';\n\t\tthis.bonusDtos['cayetano.games.slots.thegreatwild.dto.TheGreatWildCarDto'] = this._handleCarBonus.bind(this);\n\t\tdelete this.bonusDtos['cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto'];\n\t}\n\n\t_afterParseOperations(data) {\n\t\tthis._handleWilds(data.game);\n\t}\n\n\t// this overrides the freeSpins array\n\t_handleFreeSpins() {}\n\t_handleCarBonus(data) {\n\t\tthis.winDetails.freeSpins = data.blackSpinsPayouts.map((payout, index) => {\n\t\t\tthis.winDetails.totalWin += payout;\n\t\t\treturn {\n\t\t\t\ttype: index + 1,\n\t\t\t\tamount: payout,\n\t\t\t\twinLines: [],\n\t\t\t\totherWins: []\n\t\t\t};\n\t\t});\n\t}\n\n\t_handleWilds(data) {\n\t\tlet payoutData = data.gameData.slotGameArray[0].payoutData;\n\t\tpayoutData = payoutData.filter((pdata) => {return pdata.className == 'cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto'});\n\t\tif (payoutData.length == 0) return;\n\t\tlet respin = payoutData[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tif (!this.winDetails.otherWins) {\n\t\t\tthis.winDetails.otherWins = [];\n\t\t}\n\t\tvar respinBonuses = this._getPayoutDataBonuses(respin);\n\t\tthis.winDetails.otherWins = this.winDetails.otherWins.concat(respinBonuses);\n\t\trespinBonuses.forEach((bonus) => {\n\t\t\tthis.winDetails.totalWin += bonus.amount;\n\t\t});\n\t\tthis._handleWins(newGameData);\n\t\tthis._handleWilds(newGameData)\n\t}\n\n\t_mapSymbol(reel, row, symbolId) {\n\t\tif (symbolId == 0) return 17;\n\t\telse if (symbolId == 6) {\n\t\t\tif (reel == 2) return 18;\n\t\t\tif (reel > 2) return 16;\n\t\t\telse return 15;\n\t\t}\n\t\telse if (symbolId > 6) return symbolId - 1;\n\n\t\treturn symbolId;\n\t}\n}\n\n\nmodule.exports = TheGreatWildParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * TheHeistSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass TheHeistSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleWins(data) {\n\t\tif(data.gameData.slotGameArray[0].payoutData.TheHeistFreeSpinBonusDataDto == null) {\n\t\t\tlet lines = this._getWinLines(data.gameData.slotGameArray[0]);\n\t\t\tlines.forEach((line) => {\n\t\t\t\tthis.winDetails.totalWin += line.amount\n\t\t\t});\n\t\n\t\t\tthis.winDetails.winLines = lines;\n\t\t}\n\t}\n}\n\nmodule.exports = TheHeistSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TrickOTreatParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TrickOTreatParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.trickotreat.dto.TrickOTreatBonus1Dto\"] = \"bonus\";\n\t}\n\n\t_generateOutput() {\n\t\tvar output = super._generateOutput();\n\t\tvar lastSpin = this.data.game.gameData.slotGameArray[this.data.game.gameData.slotGameArray.length - 1];\n\n\t\toutput.reels = this._initReels(lastSpin);\n\t\t \n\t\treturn output;\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n}\n\n\nmodule.exports = TrickOTreatParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TumbleDwarfMysteryGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TumbleDwarfMysteryGoldSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = TumbleDwarfMysteryGoldSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * TumbleDwarfParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass TumbleDwarfParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.tumbledwarf.dto.TumbleDwarfWinLineDto\"] = this._handleLuckyLineBonus.bind(this);\n\t\tthis.overrideLines = null;\n\t\tthis.overrideReels = null;\n\t}\n\n\t_handleLuckyLineBonus(dto) {\n\t\tthis.overrideLines = this._getWinLines(dto.bonusSpin);\n\t\tthis._handleWins({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t\tif (dto.bonusSpin.stakeMultiplier > 1) {\n\t\t\tlet notMultipliedAmount = dto.winAmount / dto.bonusSpin.stakeMultiplier;\n\t\t\tthis.winDetails.otherWins.push({ type: 'multiplier', amount: dto.winAmount - notMultipliedAmount });\n\t\t\tthis.winDetails.totalWin += dto.winAmount - notMultipliedAmount;\n\t\t}\n\t\tthis.overrideReels = this._initReels({gameData: {slotGameArray: [dto.bonusSpin]}});\n\t}\n\n\t_afterParseOperations(data) {\n\t\tsuper._afterParseOperations(data);\n\t\tif (this.overrideLines != null) {\n\t\t\tthis.winDetails.winLines = this.overrideLines;\n\t\t\tthis.overrideLines = null;\n\t\t}\n\t\tif (this.overrideReels != null) {\n\t\t\tthis.data.game.reels = this.overrideReels;\n\t\t\tthis.overrideReels = null;\n\t\t}\n\t}\n}\n\nmodule.exports = TumbleDwarfParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildEgyptParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildEgyptParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.gameData === undefined ? data.screen : data.gameData.slotGameArray[0].screen;\n\t\tlet screen = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\tscreen[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = screen;\n\n\t\tfor (var i = 0; i < screen.length; i++) {\n\t\t\tfor (var j = 0; j < screen[i].length; j++) {\n\t\t\t\tif (screen[i][j] == 99) {\n\t\t\t\t\tscreen[i][j] = 11;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn screen;\n\t}\n\n\t_handleNudges(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\trespins.shift();\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis.winDetails.respins.push(this._handleSingleRespin(respin));\n\t\t});\n\t}\n\n\t_handleSingleRespin(data) {\n\t\tthis.data.game.reels = this._initReels(data);\n\t\tvar respin = {\n\t\t\ttype: data.respinIndex + 1,\n\t\t\tamount: 0,\n\t\t\twinLines: this._getWinLines(data),\n\t\t\totherWins: []\n\t\t};\n\t\t\n\t\tvar linesWinAmount = 0;\n\t\trespin.winLines.forEach((line) => linesWinAmount += line.amount);\n\n\t\trespin.amount += linesWinAmount;\n\n\t\tif (data.stakeMultiplier > 1) {\n\t\t\tvar multAmount = linesWinAmount * (data.stakeMultiplier - 1);\n\t\t\tif (multAmount > 0) {\n\t\t\t\trespin.amount += multAmount;\n\n\t\t\t\trespin.otherWins.push({\n\t\t\t\t\ttype: 'multiplier',\n\t\t\t\t\tamount: multAmount\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tdata.payoutData.forEach((pdata) => {\n\t\t\tif (pdata.className == \"cayetano.games.slots.dto.bonuses.SlotPrizeBonusDataDto\") {\n\t\t\t\trespin.otherWins.push({\n\t\t\t\t\ttype: \"bonus\",\n\t\t\t\t\tamount: pdata.winAmount\n\t\t\t\t});\n\t\t\t\trespin.amount += pdata.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tthis.winDetails.totalWin += respin.amount;\n\n\t\treturn respin;\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data));\n\t\t\t}\n\t\t});\n\n\t\tresult.unshift(respin);\n\n\t\treturn result;\n\t}\n}\n\nmodule.exports = WildEgyptParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildSheriffParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildSheriffParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusDtos[\"cayetano.games.slots.wildsheriff.dto.WildSheriffBonus2Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = WildSheriffParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WildStarsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WildStarsSlotParser extends CaySlotParserLegacy {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\t// this.bonusDtos[\"cayetano.games.slots.santa.dto.SantaBonus4Dto\"] = \"bonus\";\n\t}\n}\n\n\nmodule.exports = WildStarsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WishAWinSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WishAWinSlotParser extends CaySlotParserLegacy {\n\t_handleWins(data) {\n\t}\n\t\n\t_initReels(data) {\n\t\tvar respins = this._extractRespins(data.gameData.slotGameArray[data.gameData.slotGameArray.length -1]);\n\t\tlet reelsBuffer = respins[0].screen;\n\t\tlet reels = [];\n\n\t\tlet offset = Math.floor(reelsBuffer[0][0] / 100) * 100;\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i].map((symbol, row) => this._mapSymbol(i, row, symbol - offset));\n\t\t}\n\t\tdata.reels = reels;\n\t\treturn reels;\n\t}\n\n\t_handleRespins(data) {\n\t\tvar initialRespin = data.gameData.slotGameArray[0];\n\t\tvar respins = this._extractRespins(initialRespin);\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\t\n\t\t\n\t\trespins.forEach((respin, index) => {\n\t\t\trespin.respinIndex = index;\n\t\t\tthis._extractLineDto(respin);\n\t\t});\n\n\t\tinitialRespin.screen = respins[respins.length - 1].screen;\n\t\tthis.winDetails.totalWin = initialRespin.cumulativeWinAmount;\n\t}\n\n\t_extractLineDto(slotGameDto) {\n\t\tvar lineDto = null;\n\t\tlet cumulativeLinesWinAmount = 0;\n\n\t\tslotGameDto.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.SlotLineDataDto\") {\n\t\t\t\tlineDto = data;\n\t\t\t\tcumulativeLinesWinAmount += lineDto.winAmount;\n\t\t\t}\n\t\t});\n\n\t\tif (!lineDto) return;\n\n\t\tif (!this.winDetails.respins) {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\n\t\tvar respin = this._handleSingleRespin(slotGameDto);\n\t\trespin.amount = cumulativeLinesWinAmount;\n\n\t\tthis.winDetails.respins.push(respin);\n\t}\n\n\t_extractRespins(respin) {\n\t\tvar result = [];\n\n\t\trespin.payoutData.forEach((data) => {\n\t\t\tif (data.className == \"cayetano.games.slots.dto.bonuses.SlotRespinWrapperDto\") {\n\t\t\t\tresult = result.concat(this._extractRespins(data.respin));\n\t\t\t}\n\t\t});\n\n\t\tresult.push(respin);\n\n\t\treturn result;\n\t}\n\n\t_getPayoutDataBonuses(gameDto, runScreenBonuses = true) {\n\t\treturn [];\n\t}\n}\n\n\nmodule.exports = WishAWinSlotParser;","const CaySlotParser = require('../CaySlotParser');\n\n/**\n * WorldOfWizardsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n * \n * @class\n * @extends {CaySlotParser}\n */\nclass WorldOfWizardsSlotParser extends CaySlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\t_handleRespins(data) {\n\t\tthis.winDetails.respins = [];\n\t\tvar totalRespinsWinAmount = 0;\n\n\t\tfor (let i = 1; i < data.gameData.slotGameArray.length; i++) {\n\t\t\tlet respin = data.gameData.slotGameArray[i];\n\t\t\tif(respin != undefined && respin.isRespin === true) {\n\t\t\t\trespin.respinIndex = i - 1;\n\t\t\t\trespin = this._handleSingleRespin(respin);\n\t\t\t\tif(data.gameData.slotGameArray[i].currentSpin > 0) {\n\t\t\t\t\tlet spinId = data.gameData.slotGameArray[i].currentSpin - 1;\n\t\t\t\t\tif(this.winDetails.freeSpins[spinId].respins === undefined) this.winDetails.freeSpins[spinId].respins = [];\n\t\t\t\t\tthis.winDetails.freeSpins[spinId].respins.push(respin);\n\t\t\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t\t\t}\n\t\t\t\telse this.winDetails.respins.push(respin);\n\t\t\t}\n\t\t}\n\n\t\tthis.winDetails.respins.forEach((respin) => {\n\t\t\ttotalRespinsWinAmount += respin.amount;\n\t\t});\n\t\t\n\t\tif (totalRespinsWinAmount > 0) {\n\t\t\tthis.winDetails.totalWin += totalRespinsWinAmount;\n\t\t} else {\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t\n}\n\nmodule.exports = WorldOfWizardsSlotParser;","const CaySlotParserLegacy = require('../CaySlotParserLegacy');\n\n/**\n * WormKingSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * @class\n * @extends {CaySlotParserLegacy}\n */\nclass WormKingSlotParser extends CaySlotParserLegacy {\n\n\tstatic get wkSoloAttackDto() { return \"cayetano.games.slots.wormking.dto.WormKingSoloAttackDto\"; }\n\tstatic get wkCallToArmsDto() { return \"cayetano.games.slots.wormking.dto.WormKingCallToArmsDto\"; }\n\tstatic get wkFruitBombDto() { return \"cayetano.games.slots.wormking.dto.WormKingFruitBombDto\"; }\n\tstatic get wkKingBonusDto() { return \"cayetano.games.slots.wormking.dto.WormKingKingDto\"; }\n\tstatic get wkRandomWildsDto() { return \"cayetano.games.slots.wormking.dto.WormKingRandomWildsDto\"; }\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\t//\n\t\t// Add custom dto's for bonuses like this:\n\t\tthis.bonusIds = {};\n\t\tthis.bonusIds[WormKingSlotParser.wkSoloAttackDto] = \"solo_attack_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkCallToArmsDto] = \"call_to_arms_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkFruitBombDto] = \"fruit_bomb_bonus\";\n\t\tthis.bonusIds[WormKingSlotParser.wkKingBonusDto] = \"worm_king_bonus\";\n\t\tthis._pendingBonusesToHandle = [];\n\t}\n\n\t_initReels(data) {\n\t\tvar reels = super._initReels(data);\n\n\t\tvar newReels = [];\n\n\t\tvar reel = 0;\n\t\treels.forEach(function(s, index) {\n\t\t\tif (reel == newReels.length) {\n\t\t\t\tnewReels.push([]);\n\t\t\t}\n\t\t\tnewReels[reel].push(s[0]);\n\t\t\tif (++reel > 6) reel = 0;\n\t\t});\n\n\t\treturn data.reels = newReels;\n\t}\t\n\n\t_handleRandomWilds(data) {\n\t\tconsole.warn(data)\n\t\tif (!data || !data.length || !data[0].respin) return;\n\t\tlet respin = data[0].respin;\n\t\tlet newGameData = {gameData: {slotGameArray: [respin]}};\n\n\t\tthis.data.game.reels = this._initReels(newGameData);\n\t\tthis.winDetails.winLines = this._getWinLines(respin);\n\t\tthis._handleWins(newGameData);\n\t\tthis._handleWormKingRespins(respin);\n\t}\n\n\t_afterParseOperations(data) {\n\t\tvar initialSpin = data.game.gameData.slotGameArray[0];\n\t\tvar wilds = initialSpin.payoutData.filter((pData) => pData.className == WormKingSlotParser.wkRandomWildsDto);\n\t\tif (wilds.length > 0) {\n\t\t\tthis._handleRandomWilds(wilds);\n\t\t}\n\t\tthis._handleWormKingRespins(initialSpin);\n\t}\n\n\t_handleWormKingRespins(data, returnResult = false) {\n\t\tvar superFruits = data.payoutData.filter(pData => pData.className == \"cayetano.games.slots.wormking.dto.WormKingSuperFruitDto\");\n\t\tif (superFruits.length > 0) superFruits = superFruits[0];\n\t\telse superFruits = null;\n\t\tif (returnResult) {\n\t\t\treturn this._getWormKingRespins(data);\n\t\t}\n\t\tdata.payoutData.forEach((pData, i) => {\n\t\t\tif (pData.className == \"cayetano.games.slots.dto.SlotContactDataDto\") {\n\t\t\t\tthis._handleWormKingContact(pData, returnResult, returnResult ? i + 1 : null, superFruits);\n\t\t\t}\n\t\t\telse if (pData.className == \"cayetano.games.slots.dto.SlotGameDto\") {\n\t\t\t\tthis._handleWormKingRespins(pData);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar dtos = Object.keys(this.bonusIds);\n\t\t\t\tfor (var i = 0; i < dtos.length; i++) {\n\t\t\t\t\tif (dtos[i] == pData.className) {\n\t\t\t\t\t\tthis._pendingBonusesToHandle.push(this.bonusIds[dtos[i]]);\n\t\t\t\t\t\tthis._handleWormKingRespins(pData.respin);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_getWormKingRespins(data, respinIndex = 1) {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < data.payoutData.length; i++) {\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotContactDataDto') {\n\t\t\t\tresult.push(this._handleWormKingContact(data.payoutData[i], true, respinIndex));\n\t\t\t}\n\t\t\tif (data.payoutData[i].className == 'cayetano.games.slots.dto.SlotGameDto') {\n\t\t\t\tresult = result.concat(this._getWormKingRespins(data.payoutData[i], respinIndex + 1));\n\t\t\t\trespinIndex++;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t_handleWormKingContact(data, returnResult = false, respinNum = null, superFruits = null) {\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tif (respinNum == null) {\n\t\t\trespinNum = this.winDetails.respins.length + 1;\n\t\t}\n\t\tvar superFruitsAmount = superFruits != null ? superFruits.winAmount : 0;\n\t\tvar respinData = {\n\t\t\tamount: data.winAmount + superFruitsAmount,\n\t\t\twinLines: [],\n\t\t\totherWins: this._pendingBonusesToHandle.map((bonus) => {return {\n\t\t\t\ttype: \"bonus\",\n\t\t\t\tamount: 0\n\t\t\t}}),\n\t\t\ttype: respinNum\n\t\t};\n\t\tthis._pendingBonusesToHandle = [];\n\n\t\tif (returnResult) {\n\t\t\treturn respinData;\n\t\t}\n\n\t\tif (!this.winDetails.respins) this.winDetails.respins = [];\n\t\tthis.winDetails.respins.push(respinData);\n\t\tthis.winDetails.totalWin += this.winDetails.respins[this.winDetails.respins.length - 1].amount;\n\t};\n\n\t_flattenNudges(gameDto, index = 0) {\n\t}\n\n\t_handleNudges(data) {\n\t}\n}\n\nmodule.exports = WormKingSlotParser;","const DefaultParser = require('../../DefaultParser');\nconst Config = require('../../../config/Config');\nconst Format = require('../../../utils/Format');\n\n/**\n * DopSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DefaultParser}\n */\nclass DopSlotParser extends DefaultParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Object} The server spin data */\n\t\tthis.data = {};\n\n\t\tthis.winDetails = {\n\t\t\twinLines: [],\n\t\t\textraSpins: [],\n\t\t\totherWins: [],\n\t\t\tjackpotWins: [],\n\t\t\tmultipliers: [],\n\t\t\ttotalWin: 0,\n\t\t\tinitialLinesWin: 0,\n\t\t\ttotalWinCorrection: 0,\n\t\t\twinLineSet: -1, // mutliline games have several win line sets\n\t\t};\n\n\t\t/** @type {string} The current game id */\n\t\tthis.gameId = '';\n\n\t\t/** @type {Number} Extra spins counter */\n\t\tthis.extraSpinCounter = 1; //todo rename to indices\n\n\t\t/** @type {Object} Object of bonusWins types with corresponding names */\n\t\tthis.otherWins = {\n\t\t\tbonus: [\n\t\t\t\t'pickerBonus',\n\t\t\t\t'pathBonus',\n\t\t\t\t'pathPickerBonus',\n\t\t\t\t'multiPickerBonus'\n\t\t\t],\n\t\t\tinstantWin: [\n\t\t\t\t'instantWin',\n\t\t\t\t'instantPrize',\n\t\t\t\t'limitedWin'\n\t\t\t],\n\t\t\tmultiplier: [\n\t\t\t\t'multiplier' // stake multiplier, not winlines multiplier!\n\t\t\t]\n\t\t};\n\n\t\tthis.hide0s = false; // eg. in Midas Gold interim respins don't pay, so we shouldn't show the 0s\n\n\t\t// free spins removed, no respin on purpose\n\t\tthis.featureHandlers = [\n\t\t\t{name: 'nudge', cb: this._handleNudge},\n\t\t\t{name: 'nudgeBonus', cb: this._handleNudge},\n\t\t\t{name: 'fatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'mysterySymbols', cb: this._handleMysterySymbols},\n\t\t\t{name: 'randomTiles', cb: this._handleFeature},\n\t\t\t{name: 'swapTiles', cb: this._handleFeature},\n\t\t\t{name: 'megaWilds', cb: this._handleFatTiles},\n\t\t\t{name: 'freeSpinsMegaFatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'instantWinMegaFatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'randomReels', cb: this._handleFeature},\n\t\t\t{name: 'swapReels', cb: this._handleSwapReels},\n\t\t\t{name: 'lockedTiles', cb: this._handleFeature},\n\t\t\t{name: 'randomWays', cb: this._handleMultipliers},\n\t\t\t{name: 'fatTiles', cb: this._handleMultipliers},\n\t\t];\n\t}\n\n\tparse(gameId, data) {\n\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\t\tthis.hide0s = Config.respinWinEndOnly.indexOf(gameId) !== -1;\n\n\t\tif (this.data.game.reelsBuffer) this._initReels(this.data.game);\n\t\tthis.winDetails.freeSpins = []; // TODO rename to freespins after removing DopSlotParser\n\t\tthis.winDetails.respins = []; // ditto\n\n\t\tthis.data.responses.forEach((response) => {\n\n\t\t\tFormat.convertMoneyToNumber(response);\n\n\t\t\tthis._beforeParseOperations(response);\n\n\t\t\tthis._handleHorizontalReels(response.game);\n\t\t\tthis._handleFeatures(response.game);\n\n\t\t\t// can't have both free spins and respin in one spin (there can be a fs IN a respin and vice versa\n\t\t\tif (response.game.respin) {\n\t\t\t\tthis._flattenRespins(response.game.respin, this.winDetails.respins);\n\t\t\t}\n\n\t\t\tlet freeSpins = null;\n\t\t\tif (this.winDetails.respins.length && _.last(this.winDetails.respins).freeSpins) {\n\t\t\t\tfreeSpins = _.last(this.winDetails.respins).freeSpins;\n\t\t\t} else if (response.game.freeSpins) {\n\t\t\t\tfreeSpins = response.game.freeSpins;\n\t\t\t} else if (response.game.gameData && response.game.gameData.freeSpins) { // new game data format and format for choice responses\n\t\t\t\tfreeSpins = response.game.gameData.freeSpins;\n\t\t\t}\n\n\t\t\tif (freeSpins && freeSpins.length && freeSpins.length > 0) {\n\t\t\t\tthis._flattenFreeSpins(freeSpins, this.winDetails.freeSpins);\n\t\t\t}\n\n\t\t\tthis._handleWins(response);\n\n\t\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\t\tif(response.user && response.user.balance) {\n\t\t\t\tthis.data.user.balance.cash.atEnd = response.user.balance.cash.atEnd;\n\t\t\t\tthis.data.user.balance.freeBets.atEnd = response.user.balance.freeBets.atEnd;\n\t\t\t\tthis.data.user.balance.sessionCash.atEnd = response.user.balance.sessionCash.atEnd;\n\t\t\t\tthis.data.user.balance.sessionFreeBets.atEnd = response.user.balance.sessionFreeBets.atEnd;\n\t\t\t\tthis.data.user.balance.bonus.atEnd = response.user.balance.bonus.atEnd;\n\t\t\t}\n\n\t\t\tthis._afterParseOperations(response);\n\t\t});\n\n\t\tthis._roundingCorrection(data);\n\n\t\treturn this._generateOutput();\n\t}\n\n\t/**\n\t * Initializes the reels array with the current spin data object and apply screen mask\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_initReels(data) {\n\t\tlet reelsBuffer = data.reelsBuffer;\n\t\tlet reels = [];\n\n\t\tfor (let i = 0; i < reelsBuffer.length; i++) {\n\t\t\treels[i] = reelsBuffer[i][1];\n\t\t}\n\t\tdata.reels = reels;\n\n\t\tConfig.resizableSlot.includes(this.gameId) && this._applyScreenMask(data);\n\t}\n\n\t/**\n\t * Returns parsed spin data in the specified format\n\t * @return {Object} The parsed data\n\t */\n\t_generateOutput() {\n\t\treturn {\n\t\t\tgameDetails: {\n\t\t\t\tgameId: this.gameId,\n\t\t\t\troundId: this.data.transactions.roundId,\n\t\t\t\tprevRoundId: this.data.transactions.prevRoundId,\n\t\t\t\tnextRoundId: this.data.transactions.nextRoundId,\n\t\t\t\tserverTimeStart: this.data.transactions.startTime,\n\t\t\t\tserverTimeEnd: this.data.transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: this.data.game.stake,\n\t\t\t\ttotalWin: this.winDetails.totalWin,\n\t\t\t\tfeatureBuyCost: this.data.game.featureBuyCost,\n\t\t\t\tfeatureBuyName: this.data.game.spinMode,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: this.data.user.balance.cash,\n\t\t\t\t\tfreeBets: this.data.user.balance.freeBets,\n\t\t\t\t\tsessionCash: this.data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: this.data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: this.data.user.balance.bonus\n\t\t\t\t},\n\t\t\t},\n\t\t\tregulations: this.data.regulations,\n\t\t\twinDetails: this.winDetails,\n\t\t\treels: this.data.game.reels,\n\t\t\tpromo: this.data.promo\n\t\t};\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tlet winDetails = this.winDetails;\n\n\t\t// handle game(spin) wins\n\t\tif (data.game.win.total) {\n\t\t\twinDetails.totalWin += data.game.win.total;\n\t\t}\n\n\t\tif (data.game.win.lines) {\n\t\t\twinDetails.initialLinesWin = data.game.win.lines;\n\n\t\t\tlet winLinesData = data.game.winLines;\n\n\t\t\twinLinesData.forEach((line) => {\n\t\t\t\tline.type = line.index + 1;\n\t\t\t});\n\t\t\twinDetails.winLines = winLinesData;\n\t\t}\n\n\t\tthis.winDetails.winLineSet = typeof data.game.linesGroupIndex !== 'undefined' ? data.game.linesGroupIndex : -1;\n\n\t\t// Gamble\n\t\tif (data.game.win.gamble) {\n\t\t\twinDetails.otherWins.push({\n\t\t\t\ttype: 'gamble',\n\t\t\t\tamount: this.data.game.win.gamble\n\t\t\t});\n\t\t}\n\t\t// bonuses, multipliers etc\n\t\tthis._addOtherWins(data.game);\n\n\t\t// handle jackpot wins\n\t\tif (data.jackpots && data.jackpots.win > 0) {\n\t\t\tconst gameData = data.game;\n\t\t\tconst showJackpotScreen = !Config.noJackpotScreen.includes(this.gameId);\n\n\t\t\twinDetails.totalWin += data.jackpots.win;\n\t\t\t_.each(data.jackpots.pots, pot => {\n\t\t\t\tif (pot.win > 0) {\n\t\t\t\t\tconst lastSpinData = this._getLastSpinData(winDetails, gameData);\n\t\t\t\t\tconst jackpot = {\n\t\t\t\t\t\ttype: pot.id,\n\t\t\t\t\t\tamount: pot.win,\n\t\t\t\t\t\treels: showJackpotScreen ? this._cloneReels(lastSpinData.reels) : null\n\t\t\t\t\t};\n\n\t\t\t\t\tif (showJackpotScreen) {\n\t\t\t\t\t\tthis._handleJackpotTiles(gameData.jackpotTiles, jackpot.reels);\n\n\t\t\t\t\t\tthis._nudgeJackpotTiles(lastSpinData, jackpot.reels, gameData);\n\t\t\t\t\t}\n\n\t\t\t\t\twinDetails.jackpotWins.push(jackpot);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Iterates through all types of 'otherWins' and\n\t * if preent in the response, adds it to the otherWins winDetails\n\t * @param winDetails\n\t * @param data\n\t * @param type\n\t */\n\t_addOtherWins(data, type) {\n\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\tthis.winDetails.otherWins.push({ type: winType, amount: data.win[winName] });\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t}\n\n\t/**\n\t * Handles all the features present in the current spin data object\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFeatures(data) {\n\t\tthis.featureHandlers.forEach((featureHandler) => {\n\t\t\tif (featureHandler.name in data) {\n\t\t\t\tfeatureHandler.cb.call(this, data, featureHandler.name);\n\t\t\t}\n\t\t\tif (data.gameData && featureHandler.name in data.gameData) { // choice\n\t\t\t\tfeatureHandler.cb.call(this, data.gameData, featureHandler.name);\n\t\t\t}\n\t\t\tif (data.autofinish) {\n\t\t\t\tdata.autofinish.forEach((autoFinishData) => {\n\n\t\t\t\t\tautoFinishData = this._convertNewFormat(autoFinishData); // TODO remove after migration to new response format\n\n\t\t\t\t\tif (featureHandler.name in autoFinishData) {\n\t\t\t\t\t\tfeatureHandler.cb.call(this, autoFinishData, featureHandler.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// TODO remove after migration to new response format\n\t_convertNewFormat(responseData) {\n\t\tlet gameData = responseData['gameData'];\n\t\tif (gameData) {\n\t\t\t['freeSpins', 'respin', 'fortuneRespin'].forEach(key => {\n\t\t\t\tif (gameData[key]) {\n\t\t\t\t\tgameData[key].forEach(obj => {\n\t\t\t\t\t\tif (obj['gameData']) this._convertNewFormat(obj);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.assign(responseData, gameData);\n\t\t\tdelete responseData['gameData'];\n\t\t}\n\t\treturn responseData;\n\t}\n\n\t/**\n\t * Handler for the 'Nudge' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Array} data.reelsBuffer reels buffer array\n\t * @param {Array} data.nudge Nudge modification object\n\t * @param {Array} data.nudgeBonus Nudge modification object\n\t */\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tlet nudgeData = data[featureName];\n\t\tlet reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tlet buffer = data.reelsBuffer[nudge.index];\n\t\t\tlet flatten = _.flatten(buffer);\n\n\t\t\tlet startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\t\tlet endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t/**\n\t * @description\n\t * Handler for the 'Fat tiles' feature\n\t *\n\t * There is an option to visualize FT as a whole tile,\n\t * if the game is added to the \"assembledFatTiles\" subsection in the config and puzzle assets that form it are available.\n\t *\n\t * The asset pieces that form the FT need to have a suitable id, which includes the dimensions of the tile.\n\t * For example id = 10_3x3, as the number in front of \"x\" is width, and the one behind it is the height of the FT.\n\t * Then, for each piece, a width position index and a height position index are added along the imaginary grid on which the FT is formed,\n\t * as the number in front of \"x\" is width index, and the one behind it is the height index of the grid.\n\t *\n\t * Example: fat tile 3x3 with id equal to 10: | 10_3x3_0x0 | 10_3x3_1x0 | 10_3x3_2x0 |\n\t *                                            | 10_3x3_0x1 | 10_3x3_1x1 | 10_3x3_2x1 |\n\t *                                            | 10_3x3_0x2 | 10_3x3_1x2 | 10_3x3_2x2 |\n\t *\n\t * Example: fat tile 3x2 with id equal to 3:  | 3_3x2_0x0 | 3_3x2_1x0 | 3_3x2_2x0 |\n\t *                                            | 3_3x2_0x1 | 3_3x2_1x1 | 3_3x2_2x1 |\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * @param  {String} featureName\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the features with same data format\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param  {String} featureName\n\t */\n\t_handleFeature(data, featureName) {\n\t\tthis._applyReelsModifier(data[featureName], data.reels);\n\t}\n\n\t/**\n\t * Handler for the 'Swap Reels' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleSwapReels(data) {\n\t\tlet swapReelsData = data.swapReels;\n\t\tlet reels = data.reels;\n\n\t\tif (swapReelsData) {\n\t\t\tswapReelsData.swaps.forEach((swap) => {\n\t\t\t\tlet A = swap[0];\n\t\t\t\tlet B = swap[1];\n\t\t\t\tlet tmp = reels[A];\n\n\t\t\t\treels[A] = reels[B];\n\t\t\t\treels[B] = tmp;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Handler for the 'Mystery Symbols' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleMysterySymbols(data) {\n\t\tlet reels = data.reels;\n\t\tlet mysterySymbolsData = data.mysterySymbols;\n\t\tlet { toTile, tileId } = mysterySymbolsData;\n\t\tlet id = typeof toTile !== 'undefined' ? toTile : tileId;\n\n\t\tmysterySymbolsData.tiles.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = id;\n\t\t});\n\t}\n\n\t/**\n\t * @description It takes in a data object and a name string, and if the gameId is in the Config.hasMultipliers array, it pushes the reel, index, and multiplier values from the data object into the winDetails.multipliers array.\n\t * @param {object} data - The data that is returned from the server.\n\t * @param {string} [name] - The name of the array in the response.\n\t */\n\t_handleMultipliers(data, name) {\n\t\tif (!Config.hasMultipliers.includes(this.gameId)) return;\n\n\t\tconst multipliers = data[name];\n\n\t\tif (!multipliers) return;\n\n\t\tmultipliers.forEach(multiply => {\n\t\t\tconst { reel, index, multiplier } = multiply;\n\t\t\tconst type = data.type || 0;\n\t\t\tconst previousMultiplier = this.winDetails.multipliers\n\t\t\t\t.find(m => m.reel === reel && m.index === index && m.type === type);\n\n\t\t\t// handles multiplier swapping features\n\t\t\tif (previousMultiplier) previousMultiplier.multiplier = multiplier;\n\t\t\telse this.winDetails.multipliers.push({ type, reel, index, multiplier });\n\t\t});\n\t}\n\n\t/**\n\t * Hook that is called before a free spin features are parsed\n\t * @private\n\t * @param  {Object} data Spin data, contains\n\t * screen reels and every game feature for the spin\n\t */\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\totherWins.push({ type: 'instantWin', amount: instantWin });\n\t\t}\n\t}\n\n\t/**\n\t * Recursively parses nested features and applies a modifier feature to the given reels array\n\t * @private\n\t * @param {Array} feature Array of tile modification objects\n\t * @param {Array} reels Reels array to work on\n\t * @param {Number} feature.reel Reel index\n\t * @param {Number} feature.index Tile index\n\t * @param {Number} feature.toTile Tile id that will be used to replace the existing tile\n\t */\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach(data => {\n\t\t\tconst isNested = data instanceof Array;\n\n\t\t\tif (isNested) {\n\t\t\t\tthis._applyReelsModifier(data, reels);\n\t\t\t} else {\n\t\t\t\tconst { toTile, tileId, tile, reel, index } = data;\n\t\t\t\tconst id = typeof toTile !== 'undefined' ? toTile :\n\t\t\t\t\ttypeof tileId !== 'undefined' ? tileId : tile;\n\n\t\t\t\tif (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n\t\t\t\t\treels[reel][index] = id;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleExtraSpin(extraSpin) {\n\t\textraSpin.type = this.extraSpinCounter++; // unique spin ID, not index\n\t\textraSpin.hide0s = this.hide0s;\n\t\textraSpin.winLineSet = typeof extraSpin.linesGroupIndex !== 'undefined' ? extraSpin.linesGroupIndex : -1;\n\t\textraSpin.otherWins = [];\n\n\t\tif (extraSpin.freeSpins) {\n\t\t\textraSpin.amount = extraSpin.win.total - extraSpin.win.freeSpins;\n\t\t} else if (extraSpin.respin) {\n\t\t\textraSpin.amount = extraSpin.win.total - extraSpin.win.respin;\n\t\t} else {\n\t\t\textraSpin.amount = extraSpin.win.total;\n\t\t}\n\n\t\tFormat.convertMoneyToNumber(extraSpin);\n\t\tthis._initReels(this._convertNewFormat(extraSpin));\n\n\t\tif (typeof this._freeSpinsBeforeParseOperations === 'function') {\n\t\t\tthis._freeSpinsBeforeParseOperations(extraSpin);\n\t\t}\n\n\t\tthis._handleHorizontalReels(extraSpin);\n\t\tthis._handleFeatures(extraSpin);\n\n\t\tif (typeof this._freeSpinsAfterParseOperations === 'function') {\n\t\t\tthis._freeSpinsAfterParseOperations(extraSpin);\n\t\t}\n\t}\n\n\t_beforeParseOperations(response) {\n\t\t// Can be provided by extending class\n\t}\n\n\t_afterParseOperations(response) {\n\t\t// Can be provided by extending class\n\t}\n\n\t/**\n\t * Recursively parses free spins for nested free spins in free spins and free spins in respins, returning a collection\n\t * with all free spins at the top level. Any respins remain children to the respective free spin.\n\t * Recursion takes place immediately on encountering new free spins, analogically to the handling in games.\n\t * Example\n\t * [ freeSpins: [\n\t *\ta: {...},\n\t *\tb: {...},\n\t *\tc: {..., freeSpins: [e: {...}, f: {...}]}\n\t *\td: {...}\n\t * ]\n\t * results to => [a, b, c, e, f, d] with possible respins in free spins\n\t * @param freeSpins\n\t * @param result\n\t * @private\n\t */\n\t_flattenFreeSpins(freeSpins, result) {\n\t\tfreeSpins.forEach((freeSpin, i) => {\n\n\t\t\tthis._handleExtraSpin(freeSpin);\n\t\t\tresult.push(freeSpin);\n\n\t\t\tif (freeSpin.respin) {\n\t\t\t\tlet respins = [];\n\t\t\t\tthis._flattenRespins(freeSpin.respin, respins);\n\t\t\t\trespins.forEach((respin) => {\n\t\t\t\t\tthis._handleExtraSpin(respin);\n\t\t\t\t});\n\t\t\t\tfreeSpin.respins = respins;\n\n\t\t\t\tlet lastRespin = _.last(respins);\n\t\t\t\tif (lastRespin.freeSpins) {\n\t\t\t\t\tthis._flattenFreeSpins(lastRespin.freeSpins, result);\n\t\t\t\t}\n\t\t\t} else if (freeSpin.freeSpins) {\n\t\t\t\tthis._flattenFreeSpins(freeSpin.freeSpins, result);\n\t\t\t}\n\t\t});\n\t}\n\n\t_flattenRespins(respins, result) {\n\t\trespins.forEach((respin, i) => {\n\t\t\tthis._handleExtraSpin(respin);\n\t\t\tresult.push(respin);\n\t\t\tif (respin.respin) {\n\t\t\t\tthis._flattenRespins(respin.respin, result);\n\t\t\t}\n\t\t\tif (respin.freeSpins && i !== respins.length - 1) {\n\t\t\t\tconsole.warn('freeSpins is expected to be a in the last respin, please investigate!');\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Modifies data numeric values and rounds very long float values\n\t * @param  {Object} data Spin server response data\n\t * @private\n\t */\n\t_handleResponseCorrection(res) {\n\t\tlet total = 0;\n\n\t\t_.each(res.game.win, (val, key) => {\n\t\t\tif (key === 'total') {\n\t\t\t\t// skip\n\t\t\t}else if (key === 'lines') {\n\t\t\t\tlet winLines;\n\t\t\t\tif(res.game.gameData) winLines = res.game.gameData.winLines;\n\t\t\t\telse winLines = res.game.winLines;\n\n\t\t\t\twinLines.forEach((line) => {\n\t\t\t\t\ttotal += line.amount;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// lines_randomTiles_1, lines_randomTiles_2 , lines_randomTiles_3,  lines_randomTiles_4,\n\t\t\t\t// lines_randomTiles_5, lines_swapReels_1, lines_swapReels_2, lines_swapReels_3, lines_swapReels_4,\n\t\t\t\t// lines_swapReels_5, respin, freeSpins, multiplier\n\t\t\t\ttotal += val;\n\t\t\t}\n\t\t});\n\n\t\tif (res.jackpots && res.jackpots.win > 0) {\n\t\t\tres.jackpots.pots.forEach((pot) => {\n\t\t\t\ttotal += pot.win;\n\t\t\t});\n\t\t}\n\n\t\treturn total;\n\t}\n\t// TODO - there should be a rounding correction property for EACH free spin or respin\n\t// _handleRoundingFreeSpins(freeSpins, total) {\n\t//\t var total = 0;\n\t//\t let freeSpinsFlat = [];\n\t//\t this._flattenFreeSpins(freeSpins, freeSpinsFlat);\n\t//\t freeSpinsFlat.forEach((freeSpin) => {\n\t//\t\t if (typeof freeSpin.amount === 'undefined') return console.error('Missing amount value for free spin item.');\n\t//\t\t total += freeSpin.amount;\n\t//\t\t if (freeSpin.respin) {\n\t//\t\t\t freeSpin.respin.forEach(respin => {\n\t//\t\t\t\t total += respin.amount;\n\t//\t\t\t })\n\t//\t\t }\n\t//\t });\n\t//\t return total;\n\t// }\n\n\t_roundingCorrection(data) {\n\t\tlet total = 0;\n\n\t\tdata.responses.forEach((res) => {\n\t\t\ttotal += this._handleResponseCorrection(res);\n\t\t});\n\n\t\tlet diff = Math.round(this.winDetails.totalWin * 100) - Math.round(total * 100);\n\n\t\tif (diff) {\n\t\t\tthis.winDetails.totalWinCorrection = diff / 100;\n\t\t}\n\t}\n\n\t_handleJackpotTiles(jackpotTiles, reels) {\n\t\tif(!jackpotTiles) return;\n\n\t\tjackpotTiles.forEach(jpTile => {\n\t\t\tconst { toTile, tileId, tile, reel, index, screen } = jpTile;\n\n\t\t\tlet id = 100;// default jackpot tile id\n\n\t\t\tif (toTile) id = toTile;\n\t\t\tif (tileId) id = tileId;\n\t\t\tif (tile) id = tile;\n\n\t\t\tif (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = id;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * @description Searches the data for the last screen on which the jackpot symbols are placed.\n\t * @param {Object} winDetails\n\t * @param {Object} initialData\n\t * @returns {Object}\n\t */\n\t_getLastSpinData(winDetails, initialData) {\n\t\t// Check features in this order: 1. respins; 2. freeSpins{ respins }; 3. heldRespins.\n\t\tconst { respins, freeSpins, heldRespins } = winDetails; // arrays\n\n\t\tif (heldRespins && heldRespins.length) {\n\t\t\t// Here we have respins after freeSpins feature for example \"GonzosQuestMegaWays\"\n\t\t\treturn _.last(heldRespins);\n\t\t} else if (freeSpins && freeSpins.length) {\n\t\t\tconst lastFreeSpin = _.last(freeSpins);\n\n\t\t\treturn !lastFreeSpin.respins ? lastFreeSpin : _.last(lastFreeSpin.respins);\n\t\t} else if (respins && respins.length) {\n\t\t\t// The last respin is the last modifier of the scene in this case.\n\t\t\treturn _.last(respins);\n\t\t}\n\n\t\treturn initialData;\n\t}\n\n\t_cloneReels(reels) {\n\t\treturn reels.map(reel => _.clone(reel));\n\t}\n\n\t/**\n\t * Handler for the 'jackpotNudge' feature\n\t * @private\n\t * @param  {Object} lastSpinData\n\t * @param {Array} reels\n\t * @param {Object} data\n\t */\n\t_nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\tconst nudgeData = lastSpinData.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\tconst nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\tconst nudgeDistance = nudge ? (nudge.dir === 1 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\tconst distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t_handleHorizontalReels(data) {\n\t\tconst { bottom, topAndBottom } = Config.horizontalReels;\n\n\t\tif (!bottom.includes(this.gameId) && !topAndBottom.includes(this.gameId)) return;\n\n\t\tconst { reelsBuffer, reels } = data;\n\n\t\tif (!reelsBuffer) return;\n\n\t\tconst tilesCountOnReel = reelsBuffer[0][1].length;\n\t\tconst firstReelIndex = 0;\n\t\tconst lastReelIndex = tilesCountOnReel - 1;\n\t\tconst horizontalReelIndices = topAndBottom.includes(this.gameId) ? [firstReelIndex, lastReelIndex] : [lastReelIndex];\n\n\t\tconst minCountEmptyPos = this._getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices);\n\t\tconst cleanIndexFrom = tilesCountOnReel - (minCountEmptyPos + 1);\n\n\t\treelsBuffer.forEach((reel, reelIndex) => {\n\t\t\tfor (let i = 0; i < minCountEmptyPos; i++) {\n\t\t\t\treels[reelIndex][cleanIndexFrom + i] = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t* @description Calculates the count of the redundant rows before bottom horizontal reel.\n\t* @param {object} reelsBuffer\n\t* @param {number} tilesCountOnReel\n\t* @param {array} horizontalReelIndices\n\t* @returns {number}\n\t*/\n\t_getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices) {\n\t\tlet minEmptyPosOnReel = tilesCountOnReel;\n\n\t\treelsBuffer.forEach(([ , reelMiddle, ]) => {\n\t\t\tconst emptyTilesCount = reelMiddle\n\t\t\t\t.filter((tileId, tileIndex) => !tileId && !horizontalReelIndices.includes(tileIndex))\n\t\t\t\t.length;\n\n\t\t\tif (emptyTilesCount < minEmptyPosOnReel) minEmptyPosOnReel = emptyTilesCount;\n\t\t});\n\n\t\treturn minEmptyPosOnReel;\n\t}\n\n\t_applyScreenMask(data, tileId = 0) {\n\t\tconst { screenMask, reels } = data;\n\n\t\tif (!screenMask) return;\n\n\t\t_.each(screenMask, (reel, reelIndex) => {\n\t\t\t_.each(reel, (tile, tileIndex) => {\n\t\t\t\tif (!tile) reels[reelIndex][tileIndex] = tileId;\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = DopSlotParser;\n","const DopSlotParser = require('./DopSlotParser');\nconst AgeOfAkkadiaSlotParser = require('./games/AgeOfAkkadiaSlotParser');\nconst AgentRoyaleSlotParser = require('./games/AgentRoyaleSlotParser');\nconst AlexanderTheGreatSlotParser = require('./games/AlexanderTheGreatSlotParser');\nconst AncientDiscoSlotParser = require('./games/AncientDiscoSlotParser');\nconst AncientScriptSlotParser = require('./games/AncientScriptSlotParser');\nconst AncientsBlessingSlotParser = require('./games/AncientsBlessingSlotParser');\nconst ArcadeBombSlotParser = require('./games/ArcadeBombSlotParser');\nconst AstronautSlotParser = require('./games/AstronautSlotParser');\nconst AthensMegaWaysSlotParser = require('./games/AthensMegaWaysSlotParser');\nconst AtlantisSlotParser = require('./games/AtlantisSlotParser');\nconst Bets10FarmMegaWaysSlotParser = require('./games/MixAndMatchSlotParser');\nconst BettyBorisAndBooParser = require('./games/BettyBorisAndBooSlotParser');\nconst BlobstersClusterbusterSlotParser = require('./games/BlobstersClusterbusterSlotParser');\nconst BloodSuckersMegaWaysSlotParser = require('./games/BloodSuckersMegaWaysSlotParser');\nconst BombusterSlotParser = require('./games/BombusterSlotParser');\nconst BountyRaidSlotParser = require('./games/BountyRaidSlotParser');\nconst BuffaloManiaMegaWaysSlotParser = require('./games/BuffaloManiaMegaWaysSlotParser');\nconst BullsRunWildSlotParser = require('./games/BullsRunWildSlotParser');\nconst CaiShen168SlotParser = require('./games/CaiShen168SlotParser');\nconst CaptainRizkMegaWaysParser = require('./games/CaptainRizkMegaWaysParser');\nconst CinderellaSlotParser = require('./games/CinderellaSlotParser');\nconst CirqueDeLaFortuneSlotParser = require('./games/CirqueDeLaFortuneSlotParser');\nconst ClashOfTheBeastsSlotParser = require('./games/ClashOfTheBeastsSlotParser');\nconst CrazyGenieSlotParser = require('./games/CrazyGenieSlotParser');\nconst CyberAttackSlotParser = require('./games/CyberAttackSlotParser');\nconst DevilsNumberSlotParser = require('./games/DevilsNumberSlotParser');\nconst DiamondBlitzSlotParser = require('./games/DiamondBlitzSlotParser');\nconst DiamondRoyaleSlotParser = require('./games/DiamondRoyaleSlotParser');\nconst DiceDiceDiceSlotParser = require('./games/DiceDiceDiceSlotParser');\nconst DivineWaysSlotParser = require('./games/DivineWaysSlotParser');\nconst DoggyRichesMegaWaysParser = require('./games/DoggyRichesMegaWaysSlotParser');\nconst DragonKingLegendOfTheSeasSlotParser = require('./games/DragonKingLegendOfTheSeasSlotParser');\nconst DragonsClusterbusterSlotParser = require('./games/DragonsClusterbusterSlotParser');\nconst DragonsFireInfiniReelsSlotParser = require('./games/DragonsFireInfiniReelsSlotParser');\nconst DragonsFireMegaWaysSlotParser = require('./games/DragonsFireMegaWaysSlotParser');\nconst DynamiteRichesMegaWaysParser = require('./games/DynamiteRichesMegaWaysSlotParser');\nconst DynamiteRichesSlotParser = require('./games/DynamiteRichesSlotParser');\nconst EgyptMegaWaysSlotParser = require('./games/EgyptMegaWaysSlotParser');\nconst ElvenMagicSlotParser = require('./games/ElvenMagicSlotParser');\nconst EmeraldDiamondSlotParser = require('./games/EmeraldDiamondSlotParser');\nconst EpicJourneySlotParser = require('./games/EpicJourneySlotParser');\nconst EsqueletoMariachiSlotParser = require('./games/EsqueletoMariachiSlotParser');\nconst FlamingFoxSlotParser = require('./games/FlamingFoxSlotParser');\nconst FlodderSlotParser = require('./games/FlodderSlotParser');\nconst FortuneCatSlotParser = require('./games/FortuneCatSlotParser');\nconst FortuneCharmSlotParser = require('./games/FortuneCharmSlotParser');\nconst FortuneHouseSlotParser = require('./games/FortuneHouseSlotParser');\nconst FourSquadSlotParser = require('./games/FourSquadSlotParser');\nconst FruitShopFrenzySlotParser = require('./games/FruitShopFrenzySlotParser');\nconst GemsGoneWildPowerReelsSlotParser = require('./games/GemsGoneWildPowerReelsSlotParser');\nconst GemsGoneWildSlotParser = require('./games/GemsGoneWildSlotParser');\nconst GemsInfernoMegaWaysSlotParser = require('./games/GemsInfernoMegaWaysSlotParser');\nconst GemtasticSlotParser = require('./games/GemtasticSlotParser');\nconst GenieNightsSlotParser = require('./games/GenieNightsSlotParser');\nconst GetTheGoldInfiniReelsSlotParser = require('./games/GetTheGoldInfiniReelsSlotParser');\nconst GodsOfTroySlotParser = require('./games/GodsOfTroySlotParser');\nconst GoldenLeprechaunMegaWaysSlotParser = require('./games/GoldenLeprechaunMegaWaysSlotParser');\nconst GoldenOfferSlotParser = require('./games/GoldenOfferSlotParser');\nconst GonzosQuestMegaWaysSlotParser = require('./games/GonzosQuestMegaWaysSlotParser');\nconst GoodLuckClusterbusterSlotParser = require('./games/GoodLuckClusterbusterSlotParser');\nconst GrandWheelSlotParser = require('./games/GrandWheelSlotParser');\nconst GreatGoldSlotParser = require('./games/GreatGoldSlotParser');\nconst HammerGodsSlotParser = require('./games/HammerGodsSlotParser');\nconst HappyApplesSlotParser = require('./games/HappyApplesSlotParser');\nconst HarleCoinParser = require('./games/HarleCoinSlotParser');\nconst HereKittyKittySlotParser = require('./games/HereKittyKittySlotParser');\nconst HoardOfPoseidonSlotParser = require('./games/HoardOfPoseidonSlotParser');\nconst HotHotChilliPotSlotParser = require('./games/HotHotChilliPotSlotParser');\nconst HundredKDropSlotParser = require('./games/HundredKDropSlotParser');\nconst ImperialPalaceSlotParser = require('./games/ImperialPalaceSlotParser');\nconst JackInAPotSlotParser = require('./games/JackInAPotSlotParser');\nconst JewelScarabsSlotParser = require('./games/JewelScarabsSlotParser');\nconst JingleBellsPowerReelsSlotParser = require('./games/JingleBellsPowerReelsSlotParser');\nconst JingleWaysMegaWaysSlotParser = require('./games/JingleWaysMegaWaysSlotParser');\nconst JoeExoticSlotParser = require('./games/JoeExoticSlotParser');\nconst KnightsOfAvalonSlotParser = require('./games/KnightsOfAvalonSlotParser');\nconst LaserFruitSlotParser = require('./games/LaserFruitSlotParser');\nconst LastChanceSaloonSlotParser = require('./games/LastChanceSaloonSlotParser');\nconst LegendaryExcaliburSlotParser = require('./games/LegendaryExcaliburSlotParser');\nconst LionDanceSlotParser = require('./games/LionDanceSlotParser');\nconst LionsHoardSlotParser = require('./games/LionsHoardSlotParser');\nconst LondonTubeSlotParser = require('./games/LondonTubeSlotParser');\nconst LuckyDevilSlotParser = require('./games/LuckyDevilSlotParser');\nconst LuckyMrGreenSlotParser = require('./games/LuckyMrGreenSlotParser');\nconst LuckyOktoberfestSlotParser = require('./games/LuckyOktoberfestSlotParser');\nconst LunaFortunaSlotParser = require('./games/LunaFortunaSlotParser');\nconst MagicPowersMegaWaysSlotParser = require('./games/MagicPowersMegaWaysSlotParser');\nconst MajesticMysteriesPowerReelsSlotParser = require('./games/MajesticMysteriesPowerReelsSlotParser');\nconst MasqueradeSlotParser = require('./games/MasqueradeSlotParser');\nconst MayanGodsSlotParser = require('./games/MayanGodsSlotParser');\nconst MayhemSlotParser = require('./games/MayhemSlotParser');\nconst MegaDragonSlotParser = require('./games/MegaDragonSlotParser');\nconst MegaPyramidSlotParser = require('./games/MegaPyramidSlotParser');\nconst MidasGoldSlotParser = require('./games/MidasGoldSlotParser');\nconst MixAndMatchSlotParser = require('./games/MixAndMatchSlotParser');\nconst MonstersUnchainedSlotParser = require('./games/MonstersUnchainedSlotParser');\nconst MultiplierRichesSlotParser = require('./games/MultiplierRichesSlotParser');\nconst MysteryFruitSlotParser = require('./games/MysteryFruitSlotParser');\nconst MysteryReelsDeluxeSlotParser = require('./games/MysteryReelsDeluxeSlotParser');\nconst MysteryReelsMegaWaysSlotParser = require('./games/MysteryReelsMegaWaysSlotParser');\nconst MysticWheelSlotParser = require('./games/MysticWheelSlotParser');\nconst NarcosMexicoSlotParser = require('./games/NarcosMexicoSlotParser');\nconst NeonLinksSlotParser = require('./games/NeonLinksSlotParser');\nconst NightRollerSlotParser = require('./games/NightRollerSlotParser');\nconst NinjaWaysSlotParser = require('./games/NinjaWaysSlotParser');\nconst PaddyPowerGoldMegaWaysSlotParser = require('./games/PaddyPowerGoldMegaWaysSlotParser');\nconst PeggySweetsSlotParser = require('./games/PeggySweetsSlotParser');\nconst PersianFortuneSlotParser = require('./games/PersianFortuneSlotParser');\nconst PiggyPiratesSlotParser = require('./games/PiggyPiratesSlotParser');\nconst PiratesPlentyBattleForGoldSlotParser = require('./games/PiratesPlentyBattleForGoldSlotParser');\nconst PiratesPlentyMegaWaysSlotParser = require('./games/PiratesPlentyMegaWaysSlotParser');\nconst PiratesPlentySlotParser = require('./games/PiratesPlentySlotParser');\nconst PrimateKingSlotParser = require('./games/PrimateKingSlotParser');\nconst PussNBootsSlotParser = require('./games/PussNBootsSlotParser');\nconst RAsLegendSlotParser = require('./games/RAsLegendSlotParser');\nconst RainbowJackpotsPowerLinesSlotParser = require('./games/RainbowJackpotsPowerLinesSlotParser');\nconst RainbowJackpotsSlotParser = require('./games/RainbowJackpotsSlotParser');\nconst ReactorSlotParser = require('./games/ReactorSlotParser');\nconst RedDiamondSlotParser = require('./games/RedDiamondSlotParser');\nconst RedHotBBQSlotParser = require('./games/RedHotBBQSlotParser');\nconst ReelHeistSlotParser = require('./games/ReelHeistSlotParser');\nconst ReelKeeperSlotParser = require('./games/ReelKeeperSlotParser');\nconst ReelKingMegaSlotParser = require('./games/ReelKingMegaSlotParser');\nconst RegalBeastsSlotParser = require('./games/RegalBeastsSlotParser');\nconst ReptizillionsPowerReelsSlotParser = require('./games/ReptizillionsPowerReelsSlotParser');\nconst RiddleOfTheSphinxSlotParser = require('./games/RiddleOfTheSphinxSlotParser');\nconst RisqueMegaWaysSlotParser = require('./games/RisqueMegaWaysSlotParser');\nconst RobinHoodsWildForestSlotParser = require('./games/RobinHoodsWildForestSlotParser');\nconst RocketMenSlotParser = require('./games/RocketMenSlotParser');\nconst SevenSevenSevenStrikeSlotParser = require('./games/SevenSevenSevenStrikeSlotParser');\nconst ShadowSocietySlotParser = require('./games/ShadowSocietySlotParser');\nconst SheepGoneWildSlotParser = require('./games/SheepGoneWildSlotParser');\nconst SnowWildAndThe7FeaturesSlotParser = require('./games/SnowWildAndThe7FeaturesSlotParser');\nconst SpinTownSlotParser = require('./games/SpinTownSlotParser');\nconst StolenTreasuresSlotParser = require('./games/StolenTreasuresSlotParser');\nconst SumoSpinsSlotParser = require('./games/SumoSpinsSlotParser');\nconst SunFortuneSlotParser = require('./games/SunFortuneSlotParser');\nconst TenElementsSlotParser = require('./games/TenElementsSlotParser');\nconst TenThousandAndOneNightsMegaWaysSlotParser = require('./games/TenThousandAndOneNightsMegaWaysSlotParser');\nconst TenThousandAndOneNightsSlopParser = require('./games/TenThousandAndOneNightsSlotParser');\nconst TheEqualizerSlotParser = require('./games/TheEqualizerSlotParser');\nconst TheGreatestTrainRobberySlotParser = require('./games/TheGreatestTrainRobberySlotParser');\nconst TheWildHatterSlotParser = require('./games/TheWildHatterSlotParser');\nconst TheWishMasterMegaWaysSlotParser = require('./games/TheWishMasterMegaWaysSlotParser');\nconst ThorsLightningSlotParser = require('./games/ThorsLightningSlotParser');\nconst ThorsVengeanceSlotParser = require('./games/ThorsVengeanceSlotParser');\nconst ThreeKingdomsSlotParser = require('./games/ThreeKingdomsSlotParser');\nconst ThreeMusketeersSlotParser = require('./games/ThreeMusketeersSlotParser');\nconst TotemLightningPowerReelsSlotParser = require('./games/TotemLightningPowerReelsSlotParser');\nconst TotemLightningSlotParser = require('./games/TotemLightningSlotParser');\nconst TransylvaniaNightOfBloodSlotParser = require('./games/TransylvaniaNightOfBloodSlotParser');\nconst TreasureMinePowerReelsSlotParser = require('./games/TreasureMinePowerReelsSlotParser');\nconst TreasureMineSlotParser = require('./games/TreasureMineSlotParser');\nconst TrillionaireParser = require('./games/TrillionaireSlotParser');\nconst TwentyFourHourGrandPrixSlotParser = require('./games/TwentyFourHourGrandPrixSlotParser');\nconst VaultCrackerSlotParser = require('./games/VaultCrackerSlotParser');\nconst VickyVenturaSlotParser = require('./games/VickyVenturaSlotParser');\nconst ViralSpiralSlotParser = require('./games/ViralSpiralSlotParser');\nconst WarOfGodsSlotParser = require('./games/WarOfGodsSlotParser');\nconst WellOfWishesSlotParser = require('./games/WellOfWishesSlotParser');\nconst WheelOfAmpSlotParser = require('./games/WheelOfAmpSlotParser');\nconst WildCircusSlotParser = require('./games/WildCircusSlotParser');\nconst WildElementsSlotParser = require('./games/WildElementsSlotParser');\nconst WildFightSlotParser = require('./games/WildFightSlotParser');\nconst WildHotChilliReelsSlotParser = require('./games/WildHotChilliReelsSlotParser');\nconst WildNordsSlotParser = require('./games/WildNordsSlotParser');\nconst WildTundraSlotParser = require('./games/WildTundraSlotParser');\nconst WildWildChestSlotParser = require('./games/WildWildChestSlotParser');\nconst WinEscalatorSlotParser = require('./games/WinEscalatorSlotParser');\nconst WingsOfRaSlotParser = require('./games/WingsOfRaSlotParser');\nconst WinterWondersSlotParser = require('./games/WinterWondersSlotParser');\nconst ZaidasFortuneSlotParser = require('./games/ZaidasFortuneSlotParser');\nconst ZeusLightningPowerReelsSlotParser = require('./games/ZeusLightningPowerReelsSlotParser');\nconst ZillardKingSlotParser = require('./games/ZillardKingSlotParser');\n\n/**\n * DopSlotParserFactory.\n *\n * @class\n */\nclass DopSlotParserFactory {\n\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\t'10001Nights': TenThousandAndOneNightsSlopParser,\n\t\t\t'10001NightsLimited': TenThousandAndOneNightsSlopParser,\n\t\t\t'10001NightsMegaWays': TenThousandAndOneNightsMegaWaysSlotParser,\n\t\t\t'24HourGrandPrix': TwentyFourHourGrandPrixSlotParser,\n\t\t\t'4Squad': FourSquadSlotParser,\n\t\t\t'777Strike': SevenSevenSevenStrikeSlotParser,\n\t\t\tAgeOfAkkadia: AgeOfAkkadiaSlotParser,\n\t\t\tAgentRoyale: AgentRoyaleSlotParser,\n\t\t\tAlexanderTheGreat: AlexanderTheGreatSlotParser,\n\t\t\tAncientDisco: AncientDiscoSlotParser,\n\t\t\tAncientScript: AncientScriptSlotParser,\n\t\t\tAncientsBlessing: AncientsBlessingSlotParser,\n\t\t\tArcadeBomb: ArcadeBombSlotParser,\n\t\t\tAstronaut: AstronautSlotParser,\n\t\t\tAthensMegaWays: AthensMegaWaysSlotParser,\n\t\t\tAtlantis: AtlantisSlotParser,\n\t\t\tBets10FarmMegaWays: Bets10FarmMegaWaysSlotParser,\n\t\t\tBettyBorisAndBoo: BettyBorisAndBooParser,\n\t\t\tBlobstersClusterbuster: BlobstersClusterbusterSlotParser,\n\t\t\tBloodSuckersMegaWays: BloodSuckersMegaWaysSlotParser,\n\t\t\tBombuster: BombusterSlotParser,\n\t\t\tBountyRaid: BountyRaidSlotParser,\n\t\t\tBountyRaidLimited: BountyRaidSlotParser,\n\t\t\tBuffaloManiaMegaWays: BuffaloManiaMegaWaysSlotParser,\n\t\t\tBullsRunWild: BullsRunWildSlotParser,\n\t\t\tCaiShen168: CaiShen168SlotParser,\n\t\t\tCaptainRizkMegaWays: CaptainRizkMegaWaysParser,\n\t\t\tCinderella: CinderellaSlotParser,\n\t\t\tCirqueDeLaFortune: CirqueDeLaFortuneSlotParser,\n\t\t\tClashOfTheBeasts: ClashOfTheBeastsSlotParser,\n\t\t\tCrazyGenie: CrazyGenieSlotParser,\n\t\t\tCyberAttack: CyberAttackSlotParser,\n\t\t\tDevilsNumber: DevilsNumberSlotParser,\n\t\t\tDiamondBlitz: DiamondBlitzSlotParser,\n\t\t\tDiamondRoyale: DiamondRoyaleSlotParser,\n\t\t\tDiceDiceDice: DiceDiceDiceSlotParser,\n\t\t\tDivineWays: DivineWaysSlotParser,\n\t\t\tDoggyRichesMegaWays: DoggyRichesMegaWaysParser,\n\t\t\tDragonKingLegendOfTheSeas: DragonKingLegendOfTheSeasSlotParser,\n\t\t\tDragonsClusterbuster: DragonsClusterbusterSlotParser,\n\t\t\tDragonsFireInfiniReels: DragonsFireInfiniReelsSlotParser,\n\t\t\tDragonsFireMegaWays: DragonsFireMegaWaysSlotParser,\n\t\t\tDynamiteRiches: DynamiteRichesSlotParser,\n\t\t\tDynamiteRichesLimited: DynamiteRichesSlotParser,\n\t\t\tDynamiteRichesMegaWays: DynamiteRichesMegaWaysParser,\n\t\t\tDynamiteRichesMegaWaysLimited: DynamiteRichesMegaWaysParser,\n\t\t\tEgyptMegaWays: EgyptMegaWaysSlotParser,\n\t\t\tElvenMagic: ElvenMagicSlotParser,\n\t\t\tEmeraldDiamond: EmeraldDiamondSlotParser,\n\t\t\tEpicJourney: EpicJourneySlotParser,\n\t\t\tEsqueletoMariachi: EsqueletoMariachiSlotParser,\n\t\t\tFlamingFox: FlamingFoxSlotParser,\n\t\t\tFlodder: FlodderSlotParser,\n\t\t\tFortuneCat: FortuneCatSlotParser,\n\t\t\tFortuneCharm: FortuneCharmSlotParser,\n\t\t\tFortuneHouse: FortuneHouseSlotParser,\n\t\t\tFruitShopFrenzy: FruitShopFrenzySlotParser,\n\t\t\tGemsGoneWild: GemsGoneWildSlotParser,\n\t\t\tGemsGoneWildPowerReels: GemsGoneWildPowerReelsSlotParser,\n\t\t\tGemsInfernoMegaWays: GemsInfernoMegaWaysSlotParser,\n\t\t\tGemtastic: GemtasticSlotParser,\n\t\t\tGenieNights: GenieNightsSlotParser,\n\t\t\tGetTheGoldInfiniReels: GetTheGoldInfiniReelsSlotParser,\n\t\t\tGodsOfTroy: GodsOfTroySlotParser,\n\t\t\tGoldenLeprechaunMegaWays: GoldenLeprechaunMegaWaysSlotParser,\n\t\t\tGoldenOffer: GoldenOfferSlotParser,\n\t\t\tGonzosQuestMegaWays: GonzosQuestMegaWaysSlotParser,\n\t\t\tGoodLuckClusterbuster: GoodLuckClusterbusterSlotParser,\n\t\t\tGrandWheel: GrandWheelSlotParser,\n\t\t\tGreatGold: GreatGoldSlotParser,\n\t\t\tHammerGods: HammerGodsSlotParser,\n\t\t\tHappyApples: HappyApplesSlotParser,\n\t\t\tHarleCoin: HarleCoinParser,\n\t\t\tHereKittyKitty: HereKittyKittySlotParser,\n\t\t\tHoardOfPoseidon: HoardOfPoseidonSlotParser,\n\t\t\tHoardOfPoseidonLimited: HoardOfPoseidonSlotParser,\n\t\t\tHotHotChilliPot: HotHotChilliPotSlotParser,\n\t\t\tHundredKDrop: HundredKDropSlotParser,\n\t\t\tImperialPalace: ImperialPalaceSlotParser,\n\t\t\tJackInAPot: JackInAPotSlotParser,\n\t\t\tJewelScarabs: JewelScarabsSlotParser,\n\t\t\tJingleBellsPowerReels: JingleBellsPowerReelsSlotParser,\n\t\t\tJingleWaysMegaWays: JingleWaysMegaWaysSlotParser,\n\t\t\tJoeExotic: JoeExoticSlotParser,\n\t\t\tKnightsOfAvalon: KnightsOfAvalonSlotParser,\n\t\t\tLaserFruit: LaserFruitSlotParser,\n\t\t\tLastChanceSaloon: LastChanceSaloonSlotParser,\n\t\t\tLegendaryExcalibur: LegendaryExcaliburSlotParser,\n\t\t\tLionDance: LionDanceSlotParser,\n\t\t\tLionsHoard: LionsHoardSlotParser,\n\t\t\tLondonTube: LondonTubeSlotParser,\n\t\t\tLuckyDevil: LuckyDevilSlotParser,\n\t\t\tLuckyFortuneCat: FortuneCatSlotParser,\n\t\t\tLuckyMrGreen: LuckyMrGreenSlotParser,\n\t\t\tLuckyOktoberfest: LuckyOktoberfestSlotParser,\n\t\t\tLunaFortuna: LunaFortunaSlotParser,\n\t\t\tMagicPowersMegaWays: MagicPowersMegaWaysSlotParser,\n\t\t\tMajesticMysteriesPowerReels: MajesticMysteriesPowerReelsSlotParser,\n\t\t\tMasquerade: MasqueradeSlotParser,\n\t\t\tMayanGods: MayanGodsSlotParser,\n\t\t\tMayhem: MayhemSlotParser,\n\t\t\tMegaDragon: MegaDragonSlotParser,\n\t\t\tMegaPyramid: MegaPyramidSlotParser,\n\t\t\tMidasGold: MidasGoldSlotParser,\n\t\t\tMixAndMatch: MixAndMatchSlotParser,\n\t\t\tMonstersUnchained: MonstersUnchainedSlotParser,\n\t\t\tMultiplierRiches: MultiplierRichesSlotParser,\n\t\t\tMysteryFruit: MysteryFruitSlotParser,\n\t\t\tMysteryFruitLimited: MysteryFruitSlotParser,\n\t\t\tMysteryReelsDeluxe: MysteryReelsDeluxeSlotParser,\n\t\t\tMysteryReelsMegaWays: MysteryReelsMegaWaysSlotParser,\n\t\t\tMysticWheel: MysticWheelSlotParser,\n\t\t\tNarcosMexico: NarcosMexicoSlotParser,\n\t\t\tNeonLinks: NeonLinksSlotParser,\n\t\t\tNightRoller: NightRollerSlotParser,\n\t\t\tNinjaWays: NinjaWaysSlotParser,\n\t\t\tPaddyPowerGoldMegaWays: PaddyPowerGoldMegaWaysSlotParser,\n\t\t\tPeggySweets: PeggySweetsSlotParser,\n\t\t\tPersianFortune: PersianFortuneSlotParser,\n\t\t\tPiggyPirates: PiggyPiratesSlotParser,\n\t\t\tPiratesPlenty: PiratesPlentySlotParser,\n\t\t\tPiratesPlentyBattleForGold: PiratesPlentyBattleForGoldSlotParser,\n\t\t\tPiratesPlentyMegaWays: PiratesPlentyMegaWaysSlotParser,\n\t\t\tPrimateKing: PrimateKingSlotParser,\n\t\t\tPrimateKingLimited: PrimateKingSlotParser,\n\t\t\tPussNBoots: PussNBootsSlotParser,\n\t\t\tRAsLegend: RAsLegendSlotParser,\n\t\t\tRainbowJackpots: RainbowJackpotsSlotParser,\n\t\t\tRainbowJackpotsPowerLines: RainbowJackpotsPowerLinesSlotParser,\n\t\t\tReactor: ReactorSlotParser,\n\t\t\tRedDiamond: RedDiamondSlotParser,\n\t\t\tRedHotBBQ: RedHotBBQSlotParser,\n\t\t\tReelHeist: ReelHeistSlotParser,\n\t\t\tReelKeeper: ReelKeeperSlotParser,\n\t\t\tReelKeeperLimited: ReelKeeperSlotParser,\n\t\t\tReelKingMega: ReelKingMegaSlotParser,\n\t\t\tRegalBeasts: RegalBeastsSlotParser,\n\t\t\tReptizillionsPowerReels: ReptizillionsPowerReelsSlotParser,\n\t\t\tRiddleOfTheSphinx: RiddleOfTheSphinxSlotParser,\n\t\t\tRisqueMegaWays: RisqueMegaWaysSlotParser,\n\t\t\tRobinHoodsWildForest: RobinHoodsWildForestSlotParser,\n\t\t\tRocketMen: RocketMenSlotParser,\n\t\t\tShadowSociety: ShadowSocietySlotParser,\n\t\t\tSheepGoneWild: SheepGoneWildSlotParser,\n\t\t\tSnowWildAndThe7Features: SnowWildAndThe7FeaturesSlotParser,\n\t\t\tSpinTown: SpinTownSlotParser,\n\t\t\tStolenTreasures: StolenTreasuresSlotParser,\n\t\t\tSumoSpins: SumoSpinsSlotParser,\n\t\t\tSunFortune: SunFortuneSlotParser,\n\t\t\tTenElements: TenElementsSlotParser,\n\t\t\tTheEqualizer: TheEqualizerSlotParser,\n\t\t\tTheGreatestTrainRobbery: TheGreatestTrainRobberySlotParser,\n\t\t\tTheWildHatter: TheWildHatterSlotParser,\n\t\t\tTheWildHatterLimited: TheWildHatterSlotParser,\n\t\t\tTheWishMasterMegaWays: TheWishMasterMegaWaysSlotParser,\n\t\t\tThorsLightning: ThorsLightningSlotParser,\n\t\t\tThorsVengeance: ThorsVengeanceSlotParser,\n\t\t\tThreeKingdoms: ThreeKingdomsSlotParser,\n\t\t\tThreeMusketeers: ThreeMusketeersSlotParser,\n\t\t\tTigerKingJoeExotic: JoeExoticSlotParser,\n\t\t\tTotemLightning: TotemLightningSlotParser,\n\t\t\tTotemLightningPowerReels: TotemLightningPowerReelsSlotParser,\n\t\t\tTransylvaniaNightOfBlood: TransylvaniaNightOfBloodSlotParser,\n\t\t\tTreasureMine: TreasureMineSlotParser,\n\t\t\tTreasureMinePowerReels: TreasureMinePowerReelsSlotParser,\n\t\t\tTrillionaire: TrillionaireParser,\n\t\t\tVaultCracker: VaultCrackerSlotParser,\n\t\t\tVickyVentura: VickyVenturaSlotParser,\n\t\t\tViralSpiral: ViralSpiralSlotParser,\n\t\t\tWarOfGods: WarOfGodsSlotParser,\n\t\t\tWellOfWishes: WellOfWishesSlotParser,\n\t\t\tWheelOfAmp: WheelOfAmpSlotParser,\n\t\t\tWildCircus: WildCircusSlotParser,\n\t\t\tWildElements: WildElementsSlotParser,\n\t\t\tWildFight: WildFightSlotParser,\n\t\t\tWildHotChilliReels: WildHotChilliReelsSlotParser,\n\t\t\tWildNords: WildNordsSlotParser,\n\t\t\tWildTundra: WildTundraSlotParser,\n\t\t\tWildWildChest: WildWildChestSlotParser,\n\t\t\tWinEscalator: WinEscalatorSlotParser,\n\t\t\tWingsOfRa: WingsOfRaSlotParser,\n\t\t\tWinterWonders: WinterWondersSlotParser,\n\t\t\tZaidasFortune: ZaidasFortuneSlotParser,\n\t\t\tZeusLightningPowerReels: ZeusLightningPowerReelsSlotParser,\n\t\t\tZillardKing: ZillardKingSlotParser,\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {DopSlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new DopSlotParser();\n\t}\n}\n\nmodule.exports = DopSlotParserFactory;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AgeOfAkkadiaParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n  }\n\n  _initReels(data) {\n    super._initReels(data);\n\n    const hasBonusTitle = data.scatters && data.scatters.length > 0 && data.scatters[0].reel === 0;\n    let winDetails = this.winDetails;\n    let winLinesData = data.winLines;\n\n    if (winLinesData) {\n      if (winLinesData.length) {\n        winLinesData.forEach(winLine => {\n          if (data.multiplier > 1) {\n            winLine.multiplier =  data.multiplier\n          }\n        });\n\n        winDetails.winLines = winLinesData;\n      }\n    }\n\n    // We have a hidden label for FreeSpins, so we need a sign to show the label.\n    // So we added a bonus reel to show bonus label\n    if (hasBonusTitle) {\n      const bonusReels = [0,0,0,0,0];\n      const bonusGuideId = 11;\n      bonusReels[data.scatters[0].index] = bonusGuideId;\n      data.reels[data.reels.length] = bonusReels;\n\n      if (data.winLines) {\n        data.winLines.forEach(wins => {\n          wins.tiles[wins.tiles.length] = [0,0,0,0,0];\n        });\n      }\n    }\n  }\n\n}\n\nmodule.exports = AgeOfAkkadiaParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst AGENT_TILE_ID = 10;\n\nclass AgentRoyaleSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * @override To handle different property name for tile's id.\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tconst filteredData = data[featureName].filter(tile => tile.tileId !== AGENT_TILE_ID);\n\t\tthis._applyReelsModifier(filteredData, data.reels)\n\t}\n\n\t/**\n\t * @override To handle fat tile bottom half. Another asset id is used for it.\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst { reel, index, tileId } = tile;\n\n\t\t\tif (reels[reel]) {\n\t\t\t\tif (reels[reel][index]) reels[reel][index] = tileId;\n\t\t\t\tif (reels[reel][index+1]) reels[reel][index+1] = parseInt(`1${tileId}`, 10);\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = AgentRoyaleSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst MAX_MULTIPLIER = 5; // the largest multiplier we have an asset for\n\nclass AlexanderTheGreatSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleWilds },\n      { name: 'randomWilds', cb: this._handleWilds }\n    ];\n  }\n\n\n  _handleWilds(data, featureName) {\n    const reels = data.reels;\n\n    for (const { reel, index, tileId, multiplier } of data[featureName]) {\n      if (multiplier > 1 && multiplier <= MAX_MULTIPLIER) {\n        reels[reel][index] = `${tileId}_${multiplier}`;\n      } else {\n        reels[reel][index] = tileId;\n      }\n    }\n\n  }\n}\n\nmodule.exports = AlexanderTheGreatSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* moves fatTiles feature at the last feature place\n* @class\n* @extends {DopSlotParser}\n*/\nclass AncientDiscoSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    const fatTiles = this.featureHandlers.find(feature => feature.name === 'fatTiles');\n    const otherFeatures = this.featureHandlers.filter(feature => feature.name !== 'fatTiles');\n\n    this.featureHandlers = [...otherFeatures, fatTiles];\n  }\n}\n\nmodule.exports = AncientDiscoSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass AncientScriptParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'expandingTiles', cb: this._handleExpandingTiles,\n\t\t});\n\t}\n\n\t/**\n\t* Handler for the 'Expanding Tiles' feature\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.expandingTiles Array of tile modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t*/\n\t_handleExpandingTiles(data) {\n\t\tlet reels = data.reels;\n\t\tlet expandingTilesData = data.expandingTiles;\n\n\t\texpandingTilesData.forEach((expandTile) => {\n\t\t\texpandTile.tiles.forEach((tile) => {\n\t\t\t\treels[tile.reel][tile.index] = tile.toTile;\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = AncientScriptParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass AncientsBlessingSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * @override Handles different property name and filters unlocked tiles.\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tconst filteredLockedTiles = data[featureName].filter(lockedTile => lockedTile.spins);\n\n\t\tif (!filteredLockedTiles.length) return;\n\t\tthis._applyReelsModifier(filteredLockedTiles, data.reels)\n\t}\n}\n\nmodule.exports = AncientsBlessingSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ArcadeBombParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet bomb = data.game.bomb;\n\t\tlet reels = data.game.reels;\n\n\t\tif (bomb && (bomb.explosions.length !== 0)) {\n\t\t\tbomb.explosions.forEach((explosion) => {\n\t\t\t\texplosion.positions.forEach((tile) => {\n\t\t\t\t\treels[tile.reel][tile.index] = bomb.toTile;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = ArcadeBombParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* AstronautSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AstronautSlotParser extends DopSlotParser {\n\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\t//it's not necessary in this game to show instantWin, only as total win, also some wins get displayed twice otherwise\n\t\t\t// otherWins.push({ type: 'instantWin', amount: instantWin });\n\t\t}\n\t}\n\n\t/**\n\t * @overrides - adds spins from autoFinish into response in order to use them as real spins,\n\t *  also because we might have respins in them and there's no logic to handle respins in autofinish\n\t */\n\tparse(gameId, data) {\n\t\tconst autoFinishRes = data.responses.find(res => res.game.autofinish);\n\n\t\tif(!autoFinishRes) return super.parse(gameId, data)\n\n\t\tconst restResponses = data.responses.filter(res => res !== autoFinishRes);\n\t\tconst parsedAutoFinishResponses = autoFinishRes.game.autofinish.map(res => {\n\t\tconst combinedData = Object.assign({}, autoFinishRes, {game: res}); // combining latest user balance with autofinish spin responses\n\t\treturn combinedData;\n\t\t});\n\n\t\tconst responses = [].concat(restResponses, parsedAutoFinishResponses);\n\t\tconst parsedData = Object.assign({}, data, {responses})\n\n\t\treturn super.parse(gameId, parsedData) // passing data with combined responses from autoFinish\n\t}\n\n\t/**\n\t * @overrides - adds spins from choice into respins\n\t */\n\t_beforeParseOperations(response) {\n\t\tconst spinData = response.game;\n\t\tconst isInitialSpin = response.responses;\n\t\tconst shouldAddToRespins = (!spinData.choices || spinData.choices && spinData.choices.selected !== 'collect'); // not necessary to show choice collect as a respin\n\t\t\n\t\tif (!isInitialSpin && shouldAddToRespins) {\n\t\t\tthis._handleExtraSpin(spinData)\n\t\t\tthis.winDetails.respins.push(spinData)\n\t\t}\n\n\t\tif (response.game.gameData && response.game.gameData.respin) {\n\t\t\tconst respins = response.game.gameData.respin\n\t\t\tthis._flattenRespins(respins, this.winDetails.respins);\n\t\t}\n\t}\n\n\t/**\n\t * @overrides - added necessary check if winLines exist\n\t */\n\t_handleResponseCorrection(res) {\n\t\tlet total = 0;\n\n\t\t_.each(res.game.win, (val, key) => {\n\t\t\tif (key === 'total') {\n\t\t\t\t// skip\n\t\t\t}else if (key === 'lines') {\n\t\t\t\tlet winLines;\n\t\t\t\tif(res.game.gameData) winLines = res.game.gameData.winLines;\n\t\t\t\telse winLines = res.game.winLines;\n\n\t\t\t\twinLines && winLines.forEach((line) => {\n\t\t\t\t\ttotal += line.amount;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttotal += val;\n\t\t\t}\n\t\t});\n\n\t\tif (res.jackpots && res.jackpots.win > 0) {\n\t\t\tres.jackpots.pots.forEach((pot) => {\n\t\t\t\ttotal += pot.win;\n\t\t\t});\n\t\t}\n\n\t\treturn total;\n\t}\n\n\t/**\n\t * adds half win with custom name, hides sum passed from prev spin on no win\n\t * @overrides\n\t */\n\t_freeSpinsAfterParseOperations(extraSpin) {\n\t\tif (extraSpin.selected === 'half') {\n\t\t\textraSpin.otherWins.push({\n\t\t\t\ttype: 'halfCollected',\n\t\t\t\tamount: extraSpin.pendingWin.amount\n\t\t\t});\n\t\t}\n\n\t\tconst buffer = extraSpin && (extraSpin.reelsBuffer || extraSpin.gameData.reelsBuffer);\n\t\tconst hasRedDiamond = buffer[0][1][0] === 1;\n\n\t\tif (hasRedDiamond) {  // half win is carried through all spins and it's misleading showing it on red diamond tile(which is no win spin)\n\t\t\textraSpin.amount = 0;\n\t\t}\n\t}\n\n\t/**\n\t * shows instantWin when choice collect with a custom winName\n\t * @overrides\n\t */\n\t\t_addOtherWins(data, type) {\n\t\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\t\tconst hasCollect = data && (data.selected === 'collect' ||  data.gameData && data.gameData.selected === 'collect');\n\t\t\t\t\tconst buffer = data && (data.reelsBuffer || data.gameData.reelsBuffer);\n\t\t\t\t\tconst hasRedDiamond = buffer[0][1][0] === 1; // if we hit red diamond win should not be added as bonus\n\t\t\t\t\t\n\t\t\t\t\tif (data.win[winName] && !hasCollect && !hasRedDiamond) {\n\t\t\t\t\t\tthis.winDetails.otherWins.push({ type: winType, amount: data.win[winName] });\n\t\t\t\t\t} else if (data.win[winName] && hasCollect && !hasRedDiamond) {\n\t\t\t\t\t\tconst collectedAmount = data.gameData.progress.nextWin.takeAll.amount\n\t\t\t\t\t\tthis.winDetails.otherWins.push({ type: 'fullCollected', amount: collectedAmount });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\n}\n\nmodule.exports = AstronautSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* AthensMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass AthensMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = AthensMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass AtlantisSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n    }\n\n    /**\n     * Handler for the 'Fat tiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     * @override different format of response data for fatTiles feature\n     */\n    _handleFatTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            let reelIndex = tile.reel;\n\n            let tileBottom = tile.index + tile.height;\n\n            for (let j = tile.index; j < tileBottom; j++) {\n                if (reels[reelIndex] && reels[reelIndex][j]) {\n                    reels[reelIndex][j] = tile.tileId;\n                }\n            }\n        });\n    }\n}\n\nmodule.exports = AtlantisSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BettyBorisAndBooParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass BettyBorisAndBooParser extends DopSlotParser {\n\t/* \n\t\toverride was necessary because of the custom fat tile expand logic\n\t \tfat tile starts expanding from the coordinates in the .to property in the response\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst startReelRow = tile.to.reel;\n\t\t\tconst startReelCol = tile.to.index;\n\n\t\t\tconst id = tile.tileId;\n\t\t\tconst tileRight = startReelRow + tile.to.width;\n\n\t\t\tfor (let i = startReelRow; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = startReelCol + tile.to.height;\n\n\t\t\t\tfor (let j = startReelCol; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = BettyBorisAndBooParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BlobstersClusterbusterSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BlobstersClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'swapTiles', cb: this._handleFeature },\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'fatTilesExpand', cb: this._handleFatTilesExpand },\n    ];\n  }\n\n  /**\n   * @description To handle FatTiles that expand to a 3x3 square tile size. It follows the same logic as the _handleFatTiles method, but does not require the width and height of the tile in the id.\n   * @param {Object} data The data object that is returned from the server.\n   * @param {String} featureName - The name of the feature\n   */\n  _handleFatTilesExpand(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) reels[reelIndex][tileIndex] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = BlobstersClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BloodSuckersMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BloodSuckersMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'scatters', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = BloodSuckersMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass BombusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    //Changes from SwapTiles feature are represented in respins.\n    this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n  }\n}\n\nmodule.exports = BombusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BountyRaidParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass BountyRaidSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\tthis.featureHandlers.forEach((handler) => {\n\t\t\tif (handler.name === 'randomTiles') handler.cb = this._handleBanditTiles;\n\t\t});\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t}\n\n\t_handleBanditTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet banditTilesData = data[featureName];\n\n\t\tbanditTilesData.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = BountyRaidSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BuffaloManiaMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BuffaloManiaMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = BuffaloManiaMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* BullsRunWildParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass BullsRunWildParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    // Add or overwrite game specific feature handlers to this.featureHandlers\n    // A feature handler object must have 'name' and 'cb' properties\n    // this.featureHandlers = [\n    //   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n    // ]\n    // or\n    // this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature})\n  }\n}\n\nmodule.exports = BullsRunWildParser;","const Config = require('../../../../config/Config');\nconst DopSlotParser = require('../DopSlotParser');\n\n/**\n* CaiShen168SlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CaiShen168SlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t/**\n\t* @override The bottom part of the fat tile in the reelsBuffer is sent with id 0(because it's a ways game).\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tconst tileId = reels[reelIndex][tileIndex];\n\n\t\t\t\t\tif (reels[reelIndex] && (tileId > 0 || tileId === 0)) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = CaiShen168SlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryReelsMegaWaysParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryReelsMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cloningTile',\n\t\t\tcb: this._handleCloningTile\n\t\t});\n\t}\n\n\t_handleCloningTile(data, featureName = 'cloningTile') {\n\t\tconst reels = data.reels;\n\t\tconst featData = [].concat.apply([], data[featureName]); // Used to flatten the data.\n\n\t\tfeatData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.toTile;\n\t\t});\n\t}\n\n}\n\nmodule.exports = MysteryReelsMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * CinderellaParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass CinderellaParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('bonus');\n\n\t\tthis.featureHandlers = this.featureHandlers.concat([\n\t\t\t{name: 'carriageSwap', cb: this._handleFeature},\n\t\t\t{name: 'fairySwap', cb: this._handleFeature},\n\t\t\t{name: 'connectingTiles', cb: this._handleConnectingTiles}\n\t\t]);\n\t}\n\n\t//Taken from LionDanceSlotParser\n\n    /**\n     * Handler for the 'Cloning Tile' feature\n     * @private\n     * @param {Object} data Game data, contains\n     * screen reels and every game feature\n     * @param {Array} data.tiles Array first and last tiles for modification (not used in current parser)\n     * @param {Array} data.path Array of all tiles for modifications (to be swap)\n     * @param {String} featureName the name of the feature in current game\n     */\n\t_handleConnectingTiles(data, featureName) {\n\t\tlet feature = data[featureName].path;\n\n\t\tfeature.forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = CinderellaParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass CirqueDeLaFortuneSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'expandSymbols', cb: this._handleExpandSymbols });\n  }\n\n  _handleExpandSymbols(data, featureName) {\n    let reels = data.reels;\n    let expandSymbolsData = data[featureName];\n\n    expandSymbolsData.forEach(expandData => {\n      expandData.reels.forEach(reelIndex => {\n        reels[reelIndex] = reels[reelIndex]\n          .map(tile => tile = expandData.toTile);\n      });\n    });\n  }\n\n  /**\n* Handler for the 'Fat tiles' feature\n* @private\n* @param  {Object} data Game data, contains\n* @override because targetPos property is renamed to index and\n* fatTile's hight is always equal to visible tiles height\n*/\n  _handleFatTiles(data, featureName) {\n    let reels = data.reels;\n    let fatTilesData = data[featureName];\n\n    fatTilesData.forEach(tile => {\n      let tileBottom = tile.index + tile.height;\n\n      for (let j = tile.index; j < tileBottom; j++) {\n        if (reels[tile.reel] && reels[tile.reel][j]) {\n          reels[tile.reel][j] = tile.tileId;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = CirqueDeLaFortuneSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ClashOfTheBeastsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ClashOfTheBeastsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'nudge', cb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'tigerSwap', cb: this._handleFeature },\n\t\t\t{ name: 'clashSwap', cb: this._handleFeature },\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature }\n\t\t]\n\t}\n\n\t//This method is overriden because there are fake swap tiles and they should not be displayed, which is why we check if isVisible is false.\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse {\n\t\t\t\tif (!tile.isVisible) return;\n\n\t\t\t\treels[tile.reel][tile.index] = typeof tile.toTile !== 'undefined' ? tile.toTile : tile.tileId;\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleMultiDirectionalNudge(data, feauteName = 'nudge') {\n\t\tdata[feauteName].forEach(nudge => {\n\t\t\tif (nudge.type === 'horizontal') this._handleHorizontalNudge(nudge, data);\n\t\t\telse this._handleVerticalNudge(nudge, data);\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst topBuffer = data.reelsBuffer[nudge.index][0];\n\t\tconst buffer = data.reels[nudge.index];\n\t\tconst bottomBuffer = data.reelsBuffer[nudge.index][2];\n\n\t\tconst verticalBuffer = _.flatten([topBuffer, buffer, bottomBuffer]);\n\n\t\tconst startIndex = buffer.length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tconst leftBuffer = nudge.bufferLeft;\n\t\tconst rightBuffer = nudge.bufferRight;\n\t\tlet buffer = [];\n\n\t\tdata.reels.forEach(reel => {\n\t\t\tbuffer.push(reel[nudge.index]);\n\t\t});\n\n\t\tconst horizontalBuffer = _.flatten([leftBuffer, buffer, rightBuffer]);\n\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\n\t\tconst startIndex = buffer.length + distance;\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tconst newBuffer = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.index] = newBuffer[index];\n\t\t});\n\t}\n\n}\n\nmodule.exports = ClashOfTheBeastsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass CrazyGenieSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.otherWins.bonus.push(\n        \t'lampBonus',\n\t\t\t'oasisBonus',\n\t\t\t'handBonus',\n\t\t\t'treasureBonus'\n\t\t);\n\n        this.featureHandlers = this.featureHandlers.concat([\n            {name: 'genieActivator', cb: this._handleGenieActivator},\n        ]);\n    }\n\n    _handleGenieActivator(data) {\n        let reels = data.reels;\n        let reelIndex = data.genieActivator.reel;\n        let tileIndex = data.genieActivator.index;\n\n        reels[reelIndex][tileIndex] = data.genieActivator.toTile;\n    }\n}\n\nmodule.exports = CrazyGenieSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FS_SCREEN_ID = 13;\nconst FEATURES = {\n  WAYS_MULTIPLIER: 'waysMultiplier',\n  FILL_POSITION: 'fillPositions',\n};\n\n/**\n* CyberAttackSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass CyberAttackSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: FEATURES.WAYS_MULTIPLIER, cb: this._handleMultipliers },\n      { name: FEATURES.FILL_POSITION, cb: this._handleMultipliers }\n    ]\n  }\n\n  _handleMultipliers(data, name) {\n    const feature = data[name];\n\n    if (!feature) return;\n\n    const parsedMultipliers = data[name].filter(singleData => singleData.multiplier > 1);\n\n    if (!parsedMultipliers.length) return;\n\n    super._handleMultipliers({\n      [name]: parsedMultipliers,\n      type: data.type\n    }, name)\n  }\n\n    /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    super._afterParseOperations(data);\n\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n    const { WAYS_MULTIPLIER, FILL_POSITION } = FEATURES;\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        waysMultiplier: lastSpinData[WAYS_MULTIPLIER],\n        type: jp.type\n      }, WAYS_MULTIPLIER);\n\n      this._handleMultipliers({\n        fillPositions: lastSpinData[FILL_POSITION],\n        type: jp.type\n      }, FILL_POSITION);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n\n    this._showFsWinScreen(gameData);\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n\n  _showFsWinScreen(data) {\n    if (!data.freeSpins) return;\n\n    data.reels = [ [ FS_SCREEN_ID ] ];\n  }\n}\n\nmodule.exports = CyberAttackSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DevilsNumberSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n        this.featureHandlers.push({ name: 'upgradeTiles', cb: this._handleUpgradeTiles });\n\t\t}\n\n\t\t_handleUpgradeTiles(data) {\n\t\t\tconst upgradeTiles = data.upgradeTiles.filter(tile => tile.instant);\n\t\t\tif (upgradeTiles.length === 0) return; // will only upgrade tiles in normal spins (i.e. that have instant === true)\n\n\t\t\tthis._applyReelsModifier(upgradeTiles, data.reels);\n\t\t}\n}\n\nmodule.exports = DevilsNumberSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DiamondBlitzParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'movingWilds', cb: this._handleMovingWilds });\n\t}\n\n\t_handleMovingWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet movingWilds = data[featureName];\n\n\t\tmovingWilds.forEach((tile) => {\n\t\t\tif (reels[tile.to.reel][tile.to.index]) {\n\t\t\t\treels[tile.to.reel][tile.to.index] = tile.toTile;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = DiamondBlitzParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DiamondRoyaleSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n  }\n\n  _handleRandomWilds(data, featureName) {\n    const reels = data.reels;\n\n    let randomWildsData = data[featureName];\n\n    const skipMulti = data.maxMultiplier === data.multiplier\n      && !randomWildsData.some(tile => tile.finalMultiplier < data.maxMultiplier)\n      && data.stakeMultiplier === undefined;\n\n    randomWildsData.forEach(tile => {\n      if (!skipMulti) {\n        reels[tile.reel][tile.index] = tile.tileId;\n      } else {\n        reels[tile.reel][tile.index] = `${tile.tileId}_NoMultiplier`;\n      }\n    });\n  }\n}\n\nmodule.exports = DiamondRoyaleSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DiceDiceDiceParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t  { name: 'nudge', cb: this._handleNudge }\n\t\t]\n\t}\n\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tconst nudgeData = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\n\t\t\tconst distanceMultiplier = nudge.dir || -1;\n\t\t\tconst startAt = buffer[0].length - distanceMultiplier * nudge.distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n\n\t/**\n\t * override to handle opposite direction logic\n\t * @private\n\t * @param  {Object} lastSpinData\n\t * @param {Array} reels\n\t * @param {Array} nudgeData\n\t */\n\t _nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\tconst nudgeData = data.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\tconst nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\tconst nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 0 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\tconst distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n}\n\nmodule.exports = DiceDiceDiceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass DivineWaysParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'cloningTile', cb: this._handleCloningTile });\n\t}\n\n\t/**\n\t* Handler for the 'Cloning Tile' feature\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.cloningTile Array of tile modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t* @param {Array} data.cloningTile.clones Array of the tiles to be modified\n\t* @param {Number} data.cloningTile.toTile tile id to be used for the feature tiles\n\t*/\n\t_handleCloningTile(data) {\n\t\tlet reels = data.reels;\n\t\tlet cloningTileData = data.cloningTile;\n\t\tlet toTileC = cloningTileData.toTile;\n\n\t\tcloningTileData.clones.forEach((tile) => {\n\t\t\tif (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n\t\t\t\treels[tile.reel][tile.index] = toTileC;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = DivineWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DoggyRichesMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DoggyRichesMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\t// The fat tiles in fatTilesData always have a height of 2, regardless of how many tiles there are in the reel buffer.\n\t\t// If the reel data is for example [4,4,4,5,5,0,0] and we have a fat tile on that reel { tileId: 12, height: 2 },\n\t\t// then super._handleFatTiles would transform the reel data into [\"tile12_0x0\",\"tile12_0x1\",4,5,5,0,0]\n\t\t// In this game this is wrong, since the fat tile actually takes up the entire reel, we don't want the leftover tiles\n\t\t// So we manually set them to 0:\n\t\tfor (const { reel, height } of fatTilesData) {\n\t\t\treels[reel].fill(0, height);\n\t\t}\n\n\t\tsuper._handleFatTiles(data, featureName);\n\t}\n}\n\nmodule.exports = DoggyRichesMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n* DragonKingLegendOfTheSeasParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonKingLegendOfTheSeasParser extends DopSlotParser {\n\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tileData) => {\n\t\t\tconst tile = tileData.to;\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tileData.tileId !== 'undefined' ? tileData.tileId : tileData.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (!Config.assembledFatTiles.includes(this.gameId)) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = DragonKingLegendOfTheSeasParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FS_FAT_TILE_ID = 14;\nconst DEFAULT_FAT_TILE_ID = 11;\n\n/**\n* DragonsClusterbusterParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'fatTiles', cb: this._handleFatTiles},\n      {name: 'randomWilds', cb: this._handleFeature},\n    ];\n  }\n\n  /**\n   * @override The goal is to save an additional 18 pictures for the pieces of the other two FT activators in the game that have the same vision.\n   * That is why only one set with id 11 and another set with id 14 for the FS activator were made.\n   */\n  _handleFatTiles(data, featureName) {\n    const reels = data.reels;\n    const fatTilesData = data[featureName];\n\n    fatTilesData.forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n      const targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n      const dataId = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n      const id = dataId !== FS_FAT_TILE_ID ? DEFAULT_FAT_TILE_ID : FS_FAT_TILE_ID;\n      let gridWidthIndex = 0;\n\n      for (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n        const tileBottom = targetPos + tile.height;\n        let gridHeightIndex = 0;\n\n        for (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n          if (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n            if (!Config.assembledFatTiles.includes(this.gameId)) {\n              reels[reelIndex][tileIndex] = id;\n            } else {\n              reels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n            }\n          }\n\n          gridHeightIndex += 1;\n        }\n\n        gridWidthIndex += 1;\n      }\n    });\n  }\n}\n\nmodule.exports = DragonsClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass DragonsFireInfiniReelsSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n        this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    }\n}\n\nmodule.exports = DragonsFireInfiniReelsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DragonsFireMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DragonsFireMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = DragonsFireMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DynamiteRichesMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DynamiteRichesMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n}\n\nmodule.exports = DynamiteRichesMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* DynamiteRichesParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass DynamiteRichesParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleRandomWilds },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatWilds }\n\t\t];\n\t}\n\n\t_handleRandomWilds(data, featureName = 'randomWilds') {\n\t\tthis._applyReelsModifier(data[featureName], data.reels);\n\t}\n\n\t_handleFatWilds(data, featureName = 'fatTiles') {\n\t\tdata[featureName] = this._alterIndex(data[featureName]);\n\t\tthis._handleFatTiles(data, 'fatTiles');\n\t}\n\n\t_alterIndex(data) {\n\t\treturn data.map((item) => {\n\t\t\treturn Object.assign({}, item, { targetPos: item.index });\n\t\t});\n\t}\n}\n\nmodule.exports = DynamiteRichesParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst FEATURE_NAME = 'fatTiles';\nconst FAT_TILE_ID = 11;\nconst TRANSPARENT_POS_ID = 0;\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n* EgyptMegaWaysSlotParser. Handles parsing game specific features.\n* @class\n* @extends {DopSlotParser}\n*/\nclass EgyptMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [];\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n    const fatTiles = data[FEATURE_NAME];\n\n    return data.reels = reels.map((reel, reelIndex) => {\n      const fatTile = fatTiles && fatTiles.find(ft => ft.reel === reelIndex);\n\n      if (fatTile) {\n        return reel.map((id, index) => {\n          if (!index) return `${FAT_TILE_ID}_${fatTile.multiplier}`;\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { reel, index } = jpTile;\n\n      if (reels[reel] && typeof reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => typeof id === 'string' && id.includes(FAT_TILE_ID))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? JP_TILE : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = JP_TILE;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = EgyptMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ElvenMagicParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'iceTiles', cb: this._handleIceTiles });\n\t}\n\n\n\t/**\n\t * Handler for the 'Ice Tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleIceTiles(data, featureName) {\n\t\tdata[featureName].forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet arrowsOrder = data.game.arrowsOrder;\n\t\tlet reels = data.game.reels;\n\n\t\tif (arrowsOrder) {\n\t\t\t// This is to handle multiple arrows in any possible order\n\t\t\tarrowsOrder.forEach((type) => {\n\t\t\t\tif (data.game[type]) {\n\t\t\t\t\tdata.game[type].forEach((arrow) => {\n\t\t\t\t\t\t// Apply the modifier tile ID to the reel tiles\n\t\t\t\t\t\treels[arrow.reel][arrow.index] = arrow.toTile || arrow.tile;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = ElvenMagicParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass EmeraldDiamondSlotParser extends DopSlotParser {\n    _nudgeJackpotTiles(lastSpinData, reels, data) {\n        const jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n        if (!jackpotNudgeData) return;\n\n        const nudgeData = lastSpinData.nudge || [];\n\n        jackpotNudgeData.forEach(jackpotNudge => {\n            const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n            const nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n            const jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n            const distance = jackpotNudgeDistance - nudgeDistance;\n            const buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n            const flatten = _.flatten(buffer);\n            const startAt = buffer[0].length + distance;\n            const endAt = startAt + buffer[1].length;\n\n            reels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n        });\n\n        this._addJackpotTiles(data.jackpotTiles, reels);\n    }\n\n    _addJackpotTiles(jackpotTiles, reels) {\n        if(!jackpotTiles) return;\n\n        jackpotTiles.forEach(jpTile => {\n            const { reel, index } = jpTile;\n            const id = 100;// default jackpot tile id\n\n            if (reels[reel] && reels[reel][index] !== 'undefined') {\n                reels[reel][index] = id;\n            }\n        });\n    }\n\n    _handleJackpotTiles() {\n        return;\n    }\n}\n\nmodule.exports = EmeraldDiamondSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * EpicJourneyParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass EpicJourneyParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis._goldBonusTileId = 12;\n\t\tthis._journeyBonusTileId = 13;\n\t}\n\n\t_handleNudge(data, featName) {\n\n\t\t// ------ BE fix on FE -> task: EJOUR-996 --------\n\t\tif (this._hasBonusMismatch('goldBonus', data) || this._hasBonusMismatch('journeyBonus', data)) {\n\t\t\tthis._alterTilesOnBonusMismatch(data);\n\t\t}\n\n\t\tsuper._handleNudge(data, featName);\n\t}\n\n\t_alterTilesOnBonusMismatch(data) {\n\t\tconst reelIndex = data.reels.length - 1; // Last reel will always have a bonus symbol if there are 3 of them.\n\t\t\n\t\tlet bonusTileIndex = null;\n\n\t\tif (this._hasBonusMismatch('goldBonus', data)) {\n\t\t\tbonusTileIndex = data.reels[reelIndex].indexOf(this._goldBonusTileId);\n\t\t\tdata.reels[reelIndex][bonusTileIndex] = this._journeyBonusTileId;\n\t\t} else if (this._hasBonusMismatch('journeyBonus', data)) {\n\t\t\tbonusTileIndex = data.reels[reelIndex].indexOf(this._journeyBonusTileId);\n\t\t\tdata.reels[reelIndex][bonusTileIndex] = this._goldBonusTileId;\n\t\t}\n\t}\n\n\t_hasBonusMismatch(bonusType, result) {\n\t\tswitch (bonusType) {\n\t\t\tcase 'goldBonus':\n\t\t\t\treturn this._countTilesWithId(result.reels, this._goldBonusTileId) >= 3 && !result.pickerBonus;\n\t\t\tcase 'journeyBonus':\n\t\t\t\treturn this._countTilesWithId(result.reels, this._journeyBonusTileId) >= 3 && !result.pathBonus;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t_countTilesWithId(reels, id) {\n\t\tlet count = 0;\n\n\t\tfor (let i = 0; i < reels.length; i++) {\n\t\t\tfor (let j = 0; j < reels[i].length; j++) {\n\t\t\t\tif (reels[i][j] === id) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn count;\n\t}\n\n}\n\nmodule.exports = EpicJourneyParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * EsqueletoMariachiSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass EsqueletoMariachiSlotParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'nudge', \t\tcb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'randomWilds', \tcb: this._handleFeature }\n\t\t];\n\t}\n\n// >>> Nudge\n\n\t_handleMultiDirectionalNudge(data) {\n\t\tdata.nudge.forEach((nudge) => {\n\t\t\tif (nudge.type === 'Vertical') {\n\t\t\t\tthis._handleVerticalNudge(nudge, data);\n\t\t\t} else {\n\t\t\t\tthis._handleHorizontalNudge(nudge, data);\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\tconst flatten = _.flatten(buffer);\n\n\t\tconst startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endAt = startAt + buffer[1].length;\n\n\t\tdata.reels[nudge.index] = flatten.slice(startAt, endAt);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tlet horizontalReel = [];\n\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\thorizontalReel.push(data.reels[i][nudge.row]);\n\t\t}\n\n\t\tconst horizontalBuffer = _.flatten([nudge.bufferLeft, horizontalReel, nudge.bufferRight]);\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\t\tconst startIndex = horizontalReel.length + distance;\n\t\tconst slice = horizontalBuffer.slice(startIndex, startIndex + horizontalReel.length);\n\n\t\tfor (let j = 0; j < 5; j++) {\n\t\t\tdata.reels[j][nudge.row] = slice[j];\n\t\t}\n\t}\n}\n\nmodule.exports = EsqueletoMariachiSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass FlamingFoxSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'swapTiles', cb: this._handleSwapReels });\n        this.featureHandlers.push({ name: 'lockedTiles', cb: this._handleSwapReels });\n        this.featureHandlers.push({ name: 'lockedReels', cb: this._handleSwapReels });\n    }\n\n    /**\n     * @description Handler for the 'Swap Reels', 'Swap Tiles', 'Locked Reels', 'Locked Tiles' features\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleSwapReels(data, featureName) {\n        let featureReelsData = data[featureName];\n\n        if (featureReelsData) {\n            this._applyReelsModifier(featureReelsData, data.reels);\n        }\n    }\n}\n\nmodule.exports = FlamingFoxSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass FlodderParser extends DopSlotParser {\n\n  _handleFatTiles(data, featureName) {\n    // the fat wilds should not be displayed in initial spin\n    if (data.freeSpins) return;\n\n    super._handleFatTiles(data, featureName);\n  }\n}\n\nmodule.exports = FlodderParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass FortuneCatParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsMega', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsSuper', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.unshift({ name: 'randomWildsBig', cb: this._handleRandomWilds });\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_handleRandomWilds(data) {\n\t\tlet randomWildsData = data.randomWildsMega\n                          || data.randomWildsSuper\n                          || data.randomWildsBig\n                          || data.randomWilds;\n\t\tlet reels = data.reels;\n\n\t\trandomWildsData.forEach((tile) => {\n\t\t\tif (tile === undefined) return; // TODO\n\n\t\t\treels[tile.reel][tile.index] = tile.toTile;\n\t\t});\n\t}\n}\n\nmodule.exports = FortuneCatParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * HiddenCharmParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass FortuneCharmParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis._wildTileId = 10;\n\n\t\tthis.featureHandlers.unshift({ name: 'fortuneCharms', cb: this._handleFortuneCharms });\n\t}\n\n\t_handleFortuneCharms(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featName];\n\n\t\tfeatureData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t/**\n\t * Called after the parsing operations have taken place. Calls the winLines altering for all necessary data.\n\t * @param response - the server response.\n\t * @override\n\t * @private\n\t */\n\t_afterParseOperations(response) {\n\n\t\tif (this.winDetails.winLines && this.winDetails.winLines.length > 0) {\n\t\t\tthis._alterWinWaysData(this.data.game.reels, this.winDetails.winLines);\n\t\t}\n\n\t\tif (this.winDetails.freeSpins && this.winDetails.freeSpins.length > 0) {\n\t\t\tthis.winDetails.freeSpins.forEach((freeSpin) => {\n\t\t\t\tthis._alterWinWaysData(freeSpin.reels, freeSpin.winLines);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * >>> !!! This is fix for bug in certified math - HC-387\n\t *\n\t * Alters the winLines data tiles matrix so it's properly visualized.\n\t * @param {Array} winWaysData - the win lines data to be altered.\n\t * @param {Array} reels - the reels.\n\t * @private\n\t */\n\t_alterWinWaysData(reels, winWaysData) {\n\n\t\tconst tileIdToRemove = this._wildTileId; // Always the wild with no multiplier.\n\t\tconst winWaysWithHigherMplr = winWaysData.filter((line) => {\n\t\t\treturn line.multiplier > 1;\n\t\t});\n\n\t\twinWaysWithHigherMplr.forEach((winLine) => {\n\t\t\twinLine.tiles = this._reCalcTilesMatrix(winLine, reels, tileIdToRemove);\n\t\t});\n\t}\n\n\t/**\n\t * Iterates through each winWay tiles matrix and if it meets the condition, alters the record - 1 to 0.\n\t * @param winWayData - Win Way data with multiplier higher than 1\n\t * @param reels - the reels of the current screen.\n\t * @param tileId - the tile id to remove the flag for, if condition is met.\n\t * @return {Array}\n\t * @private\n\t */\n\t_reCalcTilesMatrix(winWayData, reels, tileId) {\n\n\t\tlet tileMatrixCopy = [],\n\t\t\tactivePosIndices = [];\n\n\t\twinWayData.tiles.forEach((reelData, reelIndex) => {\n\t\t\ttileMatrixCopy[reelIndex] = [];\n\n\t\t\tactivePosIndices = this._getOnlyActivePosIndices(reelData);\n\n\t\t\treelData.forEach((tileFlag, tileIndex) => {\n\n\t\t\t\tif (this._reelHasMoreWilds(reels[reelIndex], activePosIndices) && (reels[reelIndex][tileIndex] === tileId)) {\n\t\t\t\t\ttileFlag = 0;\n\t\t\t\t}\n\n\t\t\t\ttileMatrixCopy[reelIndex][tileIndex] = tileFlag; // 0 or 1.\n\t\t\t});\n\n\t\t});\n\n\t\treturn tileMatrixCopy;\n\t}\n\n\t/**\n\t * Gets only the positions on which there is a win way symbol.\n\t * @param reelData - the winWay current record from tiles matrix. Ex.: [0, 1, 1]\n\t * @return {Array}\n\t * @private\n\t */\n\t_getOnlyActivePosIndices(reelData) {\n\t\tlet activePosIndices = [];\n\n\t\treelData.forEach((flag, index) => {\n\t\t\tif (flag) {\n\t\t\t\tactivePosIndices.push(index);\n\t\t\t}\n\t\t});\n\n\t\treturn activePosIndices;\n\t}\n\n\t/**\n\t * Checks if the winWay current reel data has more wilds on it and they should be with Ids between 11 & 13 included.\n\t * @param reel - winWay current reel\n\t * @param tileIndices - the active tile indices for this reel.\n\t * @return {boolean}\n\t * @private\n\t */\n\t_reelHasMoreWilds(reel, tileIndices) {\n\t\tlet wildsCount = 0;\n\n\t\ttileIndices.forEach((tileIndex) => {\n\t\t\tif (reel[tileIndex] > 10 && reel[tileIndex] < 14) { // Only wilds with multipliers.\n\t\t\t\twildsCount++;\n\t\t\t}\n\t\t});\n\n\t\treturn wildsCount > 0;\n\t}\n\n}\n\nmodule.exports = FortuneCharmParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass FortuneHouseParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._modifierFeaturesList = ['mysteryTiles', 'fortuneTree'];\n\n\t\tthis.otherWins.instantWin.push('dragonWheel');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tthis._modifierFeaturesList.forEach(feature => {\n\t\t\tif (!response.game[feature]) return;\n\t\t\tresponse.game.respin = this._generateRespinData(response.game, feature);\n\t\t});\n\n\t\tif (!response.game.fortuneRespin) return;\n\n\t\tresponse.game.respin = response.game.fortuneRespin;\n\t}\n\n\t/**\n\t *\n\t * @description Generates data in the form of a respin for the two modifier features,\n\t * so that separate screens can be created for them with all the information about the result.\n\t * @param {Object} data\n\t * @param {String} feature\n\t * @returns\n\t */\n\t_generateRespinData(data, feature) {\n\t\tconst featureTiles = data[feature];\n\n\t\tif (!featureTiles) return;\n\n\t\tconst respins = [];\n\t\tconst respinsCount = featureTiles.length;\n\t\tconst capitalizedFeature = feature[0].toUpperCase() + feature.slice(1);\n\t\tconst reelsBuffer = data.reelsBuffer.map(reel => reel.map(buffer => _.clone(buffer)));\n\n\t\tfor (let index = 0; index < respinsCount; index++) {\n\t\t\tconst winLines = data[`winLines${capitalizedFeature}`][index].map(line => _.clone(line));\n\t\t\tconst winAmount = data.win[`lines${capitalizedFeature}` + index];\n\t\t\tconst featureRespin = {\n\t\t\t\treelsBuffer: this._getModifiedBuffer(featureTiles[index], reelsBuffer),\n\t\t\t\tstake: data.stake,\n\t\t\t\twin: {\n\t\t\t\t\tlines: winAmount,\n\t\t\t\t\ttotal: winAmount\n\t\t\t\t},\n\t\t\t\twinLines,\n\t\t\t};\n\n\t\t\trespins.push(featureRespin);\n\t\t}\n\n\t\treturn respins;\n\t}\n\n\t_getModifiedBuffer(feature, buffer) {\n\t\tfeature.forEach(({ reel, index, toTile }) => buffer[reel][1][index] = toTile);\n\t\treturn buffer.map(reel => reel.map(buffer => _.clone(buffer)));\n\t}\n}\n\nmodule.exports = FortuneHouseParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * FourSquad. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass FourSquadSlotParser extends DopSlotParser {\nconstructor() {\n  super();\n\n  this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n  this.featureHandlers.unshift({ name: 'cloneSymbols', cb: this._handleFeature });\n}\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = FourSquadSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* FruitShopFrenzySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass FruitShopFrenzySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'randomWildsFrenzy', cb: this._handleFeature },\n\t\t];\n  }\n}\n\nmodule.exports = FruitShopFrenzySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* GemsGoneWildPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GemsGoneWildPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter((handler) => {\n\t\t\treturn handler.name !== 'randomTiles'\n\t\t});\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tif(!data.lockedTiles) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn super._handleFatTiles(data, featureName)\n\t}\n}\n\nmodule.exports = GemsGoneWildPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GemsGoneWildParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'randomTiles');\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\n\t\tthis.lockedWildGems = [];\n\t}\n\n\t_beforeParseOperations() { this.lockedWildGems = [] }\n\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tlet reels = data.reels;\n\n\t\tlet otherWins = data.otherWins;\n\t\tlet instantWin = data.win.instantWin || data.win.limitedWin;\n\t\tlet bonusWin = data.win.pickerBonus\n\t\t\t|| data.win.pathBonus\n\t\t\t|| data.win.pathPickerBonus\n\t\t\t|| data.win.multiPickerBonus;\n\n\t\tthis.lockedWildGems.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\n\t\t// apply stake multiplier\n\t\tif (data.win && data.win.multiplier > 0 && data.amount !== 0) {\n\t\t\totherWins.push({\n\t\t\t\tamount: data.win.multiplier,\n\t\t\t\ttype: 'multiplier'\n\t\t\t});\n\t\t}\n\n\t\t// apply bonus wins\n\t\tif (bonusWin) {\n\t\t\totherWins.push({ type: 'bonus', amount: bonusWin });\n\t\t}\n\n\t\tif (instantWin) {\n\t\t\totherWins.push({ type: 'instantWin', amount: instantWin });\n\t\t}\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleLockedTiles(data) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data.lockedTiles;\n\n\t\tthis.lockedWildGems = this.lockedWildGems.concat(lockedTilesData);\n\n\t\tthis.lockedWildGems.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tile;\n\t\t});\n\t}\n}\n\nmodule.exports = GemsGoneWildParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  rainbowGem: 'rainbowGem',\n  diamonds: 'diamonds',\n}\nclass GemsInfernoMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({name: FEATURES.rainbowGem, cb: this._handleFeature});\n    this.featureHandlers.push({name: FEATURES.diamonds, cb: this._handleFeature});\n    this.featureHandlers.push({name: FEATURES.rainbowGem, cb: this._handleMultipliers});\n    this.featureHandlers.push({name: FEATURES.diamonds, cb: this._handleMultipliers});\n  }\n\n   /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n   _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.rainbowGem]: lastSpinData[FEATURES.rainbowGem],\n        type: jp.type\n      }, FEATURES.rainbowGem);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.diamonds]: lastSpinData[FEATURES.diamonds],\n        type: jp.type\n      }, FEATURES.diamonds);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = GemsInfernoMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GemtasticParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GemtasticParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// No feature handlers needed for this parser...\n\t\tthis.featureHandlers = [];\n\t}\n\n}\n\nmodule.exports = GemtasticParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GemtasticParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GenieNightsParser extends DopSlotParser {\n    _initReels(data) {\n        const magicLampId = 26;\n        const hasLampBonus = data.activator && data.activator.features.some(feature => feature.includes('LampBonus'));\n\n        let reelsBuffer = data.reelsBuffer;\n        let reels = [];\n\n        for (let i = 0; i < reelsBuffer.length; i++) {\n            if (hasLampBonus) {\n                reels[i] = reelsBuffer[i][1].fill(magicLampId);\n            } else {\n                reels[i] = reelsBuffer[i][1];\n            }\n        }\n        data.reels = reels;\n    }\n}\n\nmodule.exports = GenieNightsParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require(\"../../../../config/Config\");\n\nconst FEATURES = {\n    SCATTERS: 'scatters',\n};\n\nconst TEXT_SCATTERS_IDS = [10, 11]; // double and triple tile ids\n\n/**\n * GetTheGoldInfiniReelsSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GetTheGoldInfiniReelsSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: FEATURES.SCATTERS, cb: this._handleMultipliers });\n    }\n\n\n    _handleMultipliers(data, name) {\n        if (!Config.hasMultipliers.includes(this.gameId)) return;\n\n        if (!data[name]) return;\n\n        data[name] = data[name].filter(scatter => !TEXT_SCATTERS_IDS.includes(scatter.tileId));\n        data[name].map(scatter => scatter.multiplier = scatter.value);\n\n        return super._handleMultipliers(data, name);\n    }\n\n    _afterParseOperations(data) {\n        const gameData = data.game;\n        const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n        this.winDetails.jackpotWins.forEach(jp => {\n            this._handleMultipliers({ scatters: lastSpinData[FEATURES.SCATTERS], type: jp.type }, FEATURES.SCATTERS);\n            this.winDetails.multipliers = this._removeMultipliers(gameData.jackpotTiles, jp.type);\n        });\n    }\n\n    _removeMultipliers(jpTiles, type) {\n        return this.winDetails.multipliers.filter(mplr => {\n            return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n        });\n    }\n}\n\nmodule.exports = GetTheGoldInfiniReelsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GodsOfTroySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'lockedTiles', cb: this._handleWreaths },\n      { name: 'swapTiles', cb: this._handleFeature },\n    ];\n  }\n\n  _handleWreaths(data, featureName) {\n    const reels = data.reels;\n\n    for (const { reel, index } of data[featureName]) {\n      const tile = data.reelsBuffer[reel][1][index];\n\n      // {tileId}_1 is the version of the image with a locked wreath, use that instead of the regular image\n      reels[reel][index] = `${tile}_1`;\n    }\n  }\n}\n\nmodule.exports = GodsOfTroySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* GoldenLeprechaunMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GoldenLeprechaunMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'luckyLine', cb: this._handleLuckyLine });\n\t\tthis.featureHandlers.unshift({ name: 'wildStacks', cb: this._handleWildStacks });\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t_handleLuckyLine(data, featName = 'luckyLine') {\n\t\tconst reels = data.reels;\n\t\tconst luckyLineData = data[featName];\n\n\t\tluckyLineData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t_handleWildStacks(data, featName = 'wildStacks') {\n\t\tconst reels = data.reels;\n\t\tconst wildStacksData = data[featName];\n\n\t\tlet currentReel = null;\n\t\t\n\t\twildStacksData.forEach((stack) => {\n\t\t\tcurrentReel = reels[stack.reel];\n\t\t\tcurrentReel = currentReel.map((_, index) => {\n\t\t\t\treturn !index ? stack.tileId : 0;\n\t\t\t});\n\n\t\t\treels[stack.reel] = currentReel;\n\t\t\tcurrentReel = null;\n\t\t});\n\t}\n}\n\nmodule.exports = GoldenLeprechaunMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GoldenOfferParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('randomOffer');\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet reels = data.game.reels;\n\n\t\tif(!reels) return;\n\n\t\tif (reels[0]) reels[0][0] = reels[0][4] = 0;\n\t\tif (reels[4]) reels[4][0] = reels[4][4] = 0;\n\t}\n}\n\nmodule.exports = GoldenOfferParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\nconst Format = require('../../../../utils/Format');\n\n/**\n* GonzosQuestMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass GonzosQuestMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t}\n\n\tparse(gameId, data) {\n\n\t\tthis.data = data;\n\t\tthis.gameId = gameId;\n\t\tthis.hide0s = Config.respinWinEndOnly.indexOf(gameId) !== -1;\n\n\t\tif (this.data.game.reelsBuffer) this._initReels(this.data.game);\n\t\tthis.winDetails.freeSpins = []; // TODO rename to freespins after removing DopSlotParser\n\t\tthis.winDetails.respins = []; // ditto\n\n\t\tthis.data.responses.forEach((response) => {\n\n\t\t\tFormat.convertMoneyToNumber(response);\n\n\t\t\tthis._beforeParseOperations(response);\n\n\t\t\tthis._handleFeatures(response.game);\n\n\t\t\t// can have both free spins and respin in one spin (there can be a fs IN a respin and vice versa\n\t\t\tif (response.game.respin) {\n\t\t\t\tthis._flattenRespins(response.game.respin, this.winDetails.respins);\n\t\t\t\tthis._alterRespinsResult();\n\t\t\t}\n\n\t\t\tlet freeSpins = null;\n\n\t\t\tif (this.winDetails.respins.length && _.last(this.winDetails.respins).freeSpins) {\n\t\t\t\tfreeSpins = _.last(this.winDetails.respins).freeSpins;\n\t\t\t} else if (response.game.freeSpins) {\n\t\t\t\tfreeSpins = response.game.freeSpins;\n\t\t\t} else if (response.game.gameData && response.game.gameData.freeSpins) { // new game data format and format for choice responses\n\t\t\t\tfreeSpins = response.game.gameData.freeSpins;\n\t\t\t}\n\n\t\t\tif (freeSpins && freeSpins.length && freeSpins.length > 0) {\n\t\t\t\tthis._flattenFreeSpins(freeSpins, this.winDetails.freeSpins);\n\t\t\t}\n\n\t\t\tthis._handleWins(response);\n\n\t\t\t//We should use the user data of the latest response as it is the most up-to-date\n\t\t\tif(response.user && response.user.balance) {\n\t\t\t\tthis.data.user.balance.cash.atEnd = response.user.balance.cash.atEnd;\n\t\t\t\tthis.data.user.balance.freeBets.atEnd = response.user.balance.freeBets.atEnd;\n\t\t\t\tthis.data.user.balance.sessionCash.atEnd = response.user.balance.sessionCash.atEnd;\n\t\t\t\tthis.data.user.balance.sessionFreeBets.atEnd = response.user.balance.sessionFreeBets.atEnd;\n\t\t\t}\n\n\t\t\tthis._afterParseOperations(response);\n\t\t});\n\n\t\tthis._roundingCorrection(data);\n\n\t\treturn this._generateOutput();\n\t}\n\n\t_alterRespinsResult() {\n\t\tconst indexOfEntryWithFs = this.winDetails.respins.findIndex((respin) => {\n\t\t\treturn respin.freeSpins || (respin.activator && respin.activator.features && respin.activator.features.includes('Choices'))\n\t\t});\n\n\t\tif (indexOfEntryWithFs >= 0) {\n\t\t\tconst respins = this.winDetails.respins;\n\n\t\t\tif (indexOfEntryWithFs === 0) {\n\t\t\t\tthis.winDetails.respins = [respins[0]];\n\t\t\t\tthis.winDetails.heldRespins = respins.slice(1);\n\t\t\t} else if (indexOfEntryWithFs > 0) {\n\t\t\t\tthis.winDetails.respins = respins.slice(0, indexOfEntryWithFs + 1);\n\t\t\t\tthis.winDetails.heldRespins = respins.slice(indexOfEntryWithFs + 1);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.winDetails.heldRespins = this.winDetails.respins;\n\t\t\tthis.winDetails.respins = [];\n\t\t}\n\t}\n\n\t/**\n\t * Flattens the respins\n\t * Overridden to remove unnecessary warning and logic.\n\t * This game has FS that are not in the last respin, which would lead to warning in console.\n\t * @override\n\t * @param { Array } respins\n\t * @param { Object } result\n\t */\n\t_flattenRespins(respins, result) {\n\t\trespins.forEach((respin) => {\n\t\t\tthis._handleExtraSpin(respin);\n\t\t\tresult.push(respin);\n\t\t});\n\t}\n}\n\nmodule.exports = GonzosQuestMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GoodLuckClusterbusterSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'movingTiles', cb: this._handleFeature }\n    ];\n  }\n}\n\nmodule.exports = GoodLuckClusterbusterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * GrandWheelSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass GrandWheelSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'instantWin',\n\t\t\tcb: this._handleInstantWinJackpot\n\t\t});\n\t}\n\n\t_handleInstantWinJackpot(data, featureName) {\n\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featureName];\n\t\tconst bonusWheelSymbolsCount = this._getBonusSymbolsCount(reels, featureData.tileId);\n\t\tconst hasMismatchBetweenIwAndBuffers = (bonusWheelSymbolsCount - featureData.count) > 0;\n\n\t\tif (hasMismatchBetweenIwAndBuffers) {\n\t\t\tconst diff = bonusWheelSymbolsCount - featureData.count;\n\n\t\t\tfor (let i = 0; i < diff; i++) {\n\t\t\t\tif (reels[i][1] === featureData.tileId) {\n\t\t\t\t\treels[i][1] = 2; // Always tileId 2, to correspond with changes in game.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_getBonusSymbolsCount(reels, tileId) {\n\t\tlet bonusSymbolsCount = 0;\n\n\t\treels.forEach((reel) => {\n\t\t\tif (reel[1] === tileId) {\n\t\t\t\tbonusSymbolsCount++;\n\t\t\t}\n\t\t});\n\n\t\treturn bonusSymbolsCount;\n\t}\n}\n\nmodule.exports = GrandWheelSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass GreatGoldSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'lockedWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = GreatGoldSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass HammerGodsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({name: 'swapData', cb: this._handleSwapData});\n\t\tthis.featureHandlers.push({name: 'fatTilesSwap', cb: this._handleFatTiles});\n\t}\n\n\t_handleSwapData(response, featureName) {\n\t\tfor (const { data } of response[featureName]) {\n\n\t\t\tthis._applyReelsModifier(data, response.reels);\n\t\t}\n\t}\n}\n\nmodule.exports = HammerGodsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst DIAMOND_APPLE_ID = 10;\n\nclass HappyApplesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'diamondApple', cb: this._handleDiamondApples });\n  }\n\n  _handleDiamondApples(data, featureName) {\n    data[featureName].forEach(({ reel, index }) => data.reels[reel][index] = DIAMOND_APPLE_ID);\n  }\n}\n\nmodule.exports = HappyApplesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/* @class\n* @extends {DopSlotParser}\n*/\nclass HarleCoinParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'swapTiles');\n\t}\n}\n\nmodule.exports = HarleCoinParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* HereKittyKittySlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass HereKittyKittySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'randomWilds', cb: this._handleFeature},\n      {name: 'swapTiles', cb: this._handleFeature},\n      {name: 'fatTiles', cb: this._handleFatTiles},\n    ];\n  }\n}\n\nmodule.exports = HereKittyKittySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass HoardOfPoseidonParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'expandTiles', cb: this._handleExpandTiles });\n\t\tthis.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles });\n\t}\n\n\t_handleExpandTiles(data) {\n\t\tdata.expandTiles[0].forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t});\n\t\tthis._applyReelsModifier(data.expandTiles, data.reels);\n\t}\n\n\t_handleCloningTiles(data) {\n\t\tdata.cloningTiles[0].forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t\ttile.index = tile.to.index;\n\t\t\ttile.reel = tile.to.reel;\n\t\t});\n\t\tdata.cloningTiles.forEach(tiles => this._applyReelsModifier(tiles, data.reels));\n\t}\n}\n\nmodule.exports = HoardOfPoseidonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass HotHotChilliPotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'armageddon', cb: this._handleFatTiles })\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature })\n\t\tthis.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'lockedTiles')\n\t}\n\n\t/**\n\t * @override Fat tiles with specific width are assembled\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst tileRight = tile.reel + tile.width;\n\t\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\t\t\tlet gridWidthIndex = 0;\n\n\t\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\t\tlet gridHeightIndex = 0;\n\n\t\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\t\tif (tile.width > 1) {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = id;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tgridHeightIndex += 1;\n\t\t\t\t}\n\n\t\t\t\tgridWidthIndex += 1;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = HotHotChilliPotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * HundredKDropParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass HundredKDropSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.otherWins.bonus.push('hundredKDrop');\n    }\n\n}\n\nmodule.exports = HundredKDropSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ImperialPalaceParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t\tthis.featureHandlers.unshift({ name: 'randomReels2x', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'randomReels3x', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'randomReels5x', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = ImperialPalaceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass JackInAPotSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({name: 'randomTilesBeer', cb: this._handleRandomTilesBeer});\n        this.featureHandlers.unshift({name: 'randomTilesRainbow', cb: this._handleFeature});\n        this.featureHandlers = this.featureHandlers.filter(feature => feature.name !== 'fatTiles');\n        this.featureHandlers.unshift({name: 'fatTiles', cb: this._handlePipeTiles});\n\n    }\n\n    /**\n     * Handler for the 'Random Tiles Beer' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleRandomTilesBeer(data) {\n\n        data.randomTilesBeer.forEach((tiles) => {\n\n            tiles.forEach((tile) => {\n                if(tile.toTile !== 0) { // Handle beer tiles and popup/fat tiles overlapping.\n                    data.reels[tile.reel][tile.index] = tile.toTile;\n                }\n            \n            });\n\n        });\n    }\n\n    /**\n    * Handler for the 'Fat tiles' feature\n    * @private\n    * @param  {Object} data Game data, contains\n    * screen reels and every game feature\n    */\n    _handlePipeTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName]; // fatTiles are nested so iteration through them is necessary\n\n        fatTilesData.forEach(fatTiles => {\n            fatTiles.forEach(tile => {\n                let tileLeft = _.min([tile.reel, tile.to.reel]);\n                let tileRight = tileLeft + tile.width;\n\n                for (let i = tileLeft; i < tileRight; i++) {\n                    let minBottomTile = _.min([tile.targetPos, tile.to.targetPos]);\n                    let tileBottom = minBottomTile + tile.height;\n\n                    for (let j = minBottomTile; j < tileBottom; j++) {\n                        if (reels[i] && reels[i][j]) {\n                            reels[i][j] = tile.tileId;\n                        }\n                    }\n                }\n            });\n        });\n    }\n\n    _freeSpinsAfterParseOperations(extraSpin) {\n        if (extraSpin.respin) {\n            extraSpin.respin.forEach((spin) => {\n                this._initReels(spin);\n                this._handleFeatures(spin);\n            });\n        }\n    }\n\n}\n\nmodule.exports = JackInAPotSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass JewelScarabsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t_handleLockedTiles(data) {\n\t\tvar reelsData = data.lockedTiles.map(tile => {\n\t\t\ttile.reel = tile.to.reel,\n\t\t\ttile.index = tile.to.index,\n\t\t\ttile.toTile = tile.tileId;\n\t\t\treturn tile;\n\t\t});\n\n\t\tthis._applyReelsModifier(reelsData, data.reels);\n\t}\n}\n\nmodule.exports = JewelScarabsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleBellsPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass JingleBellsPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t}\n\n  /**\n   * Handler for the Double 'Random wilds' feature\n   *\n   * @param {Object} data\n   * @param {String} featureName\n   * @private\n   */\n  _handleRandomWilds(data, featureName) {\n    const reels = data.reels;\n\n    data[featureName].forEach((tile) => {\n      const tileRight = tile.reel + tile.width;\n\n      for (let i = tile.reel; i < tileRight; i++) {\n        const tileBottom = tile.index + tile.height;\n\n        for (let j = tile.index; j < tileBottom; j++) {\n          if (reels[i] && reels[i][j]) reels[i][j] = tile.tileId;\n        }\n      }\n    });\n  }\n\n}\n\nmodule.exports = JingleBellsPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass JingleWaysMegaWaysParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = JingleWaysMegaWaysParser;","const DopSlotParser = require('../DopSlotParser');\n/**\n* JoeExoticParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass JoeExoticParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.otherWins.instantWin.push('randomOffer');\n\t}\n}\n\nmodule.exports = JoeExoticParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n* KnightsOfAvalonSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass KnightsOfAvalonSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'seniorDrop', cb: this._handleMultipliers });\n    this.featureHandlers.push({ name: 'seniorDrop', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'swapTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = KnightsOfAvalonSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n * LaserFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LaserFruitSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t// { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n    }\n\n    /**\n     * Overwrites initReels so as to allow reel resizing and applies the screenMask to the spin data\n     * @private\n     * @param  {Object} data Game data, contains screen reels and game features\n     */\n    _initReels(data){\n        super._initReels(data);\n\n        if (data.screenExpand) data.reels = data.screenExpand;\n\n        this._trimEmpty(data);\n    }\n\n    _applyScreenMask(data) {\n        if (data.screenExpand) return;\n\n        super._applyScreenMask(data);\n    }\n\n    /**\n     * Trimming data to the visible removing empty reels and rows\n     * @private\n     * @param {Array.<Array.<0|1>>} data.screenMask\n     * @param {Array.<Array>} data.reels\n     * @param {Array.<Array>} data.winLines\n     */\n    _trimEmpty(data) {\n\n        this._trimEmptyColumns(data);\n\n        this._trimEmptyRows(data);\n    }\n\n    _trimEmptyColumns(data) {\n        // trim empty columns on left and right\n        let firstColumn = -1, lastColumn = -1;\n        _.each(data.screenMask, (reel, reelIndex) => {\n            let reelEmpty = this._isEmpty(reel);\n            if (!reelEmpty) {\n                if (firstColumn === -1) firstColumn = reelIndex;\n                lastColumn = reelIndex;\n            }\n        });\n\n        // remove right columns\n        _.times(data.screenMask.length - (lastColumn + 1), () => {\n            data.screenMask.pop();\n            data.reels.pop();\n            _.each(data.winLines, (winLine) => {\n                winLine.tiles.pop();\n            });\n        });\n        //remove left columns\n        _.times(firstColumn, () => {\n            data.screenMask.shift();\n            data.reels.shift();\n            _.each(data.winLines, (winLine) => {\n                winLine.tiles.shift();\n            });\n        });\n    }\n\n    _trimEmptyRows(data) {\n        let tilesPerReel = data.screenMask[0].length;\n        let firstRow = -1, lastRow = -1;\n\n        _.times(tilesPerReel, (tileIndex) => {\n            let columnEmpty = true;\n            _.times(data.screenMask.length, (reelIndex) => {\n                if (data.screenMask[reelIndex][tileIndex]) columnEmpty = false;\n            });\n            if (!columnEmpty) {\n                if (firstRow === -1) firstRow = tileIndex;\n                lastRow = tileIndex;\n            }\n        });\n\n        _.each(data.screenMask, (reel, reelIndex) => {\n            // remove bottom tiles\n            _.times(reel.length - (lastRow + 1), () => {\n                data.screenMask[reelIndex].pop();\n                data.reels[reelIndex].pop();\n                _.each(data.winLines, (winLine) => {\n                    winLine.tiles[reelIndex].pop();\n                });\n            });\n            // remove top tiles\n            _.times(firstRow, () => {\n                data.screenMask[reelIndex].shift();\n                data.reels[reelIndex].shift();\n                _.each(data.winLines, (winLine) => {\n                    winLine.tiles[reelIndex].shift();\n                });\n            });\n        });\n    }\n\n    _isEmpty(reel) {\n        return this._getFirstTile(reel) === undefined;\n    }\n\n    /**\n     *\n     * @param reel\n     * @returns {undefined|Number}\n     * @private\n     */\n    _getFirstTile(reel) {\n        return _.find(reel, (tile) => tile !== 0);\n    }\n}\n\nmodule.exports = LaserFruitSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NeonLinksParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass LastChanceSaloonParser extends DopSlotParser {\n\n\t_roundingCorrection(data) {\n\t\tsuper._roundingCorrection(data);\n\n\t\tif (!data.game.choices) return;\n\n\t\tconst selectedChoice = this._getSelectedChoice(data);\n\t\tif (selectedChoice === 'collect') return;\n\n\t\tconst hasJackpotWins = data.jackpots && data.jackpots.win > 0;\n\t\tconst totalWin = hasJackpotWins ? this.winDetails.totalWin - data.jackpots.win : this.winDetails.totalWin;\n\t\tconst modifier =  totalWin === 0 ? -1 : 1;\n\t\tconst bonusAmount = data.game.pendingWin.amount * modifier;\n\t\tconst bonus = this.winDetails.totalWin === bonusAmount ? 0 : bonusAmount;\n\n\t\tthis.winDetails.otherWins.push({\n\t\t\ttype: 'gamble',\n\t\t\tamount: bonus,\n\t\t});\n\t}\n\n\t_getSelectedChoice(data) {\n\t\treturn data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n\t}\n}\n\nmodule.exports = LastChanceSaloonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* LegendaryExcaliburParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LegendaryExcaliburParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\t\tthis.featureHandlers.unshift({name: 'randomWilds', cb: this._handleRandomWilds});\n\t}\n\n\t/**\n\t * Handler for the 'Nudge' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Array} data.reelsBuffer reels buffer array\n\t * @param {Array} data.nudge Nudge modification object\n\t * @param {Array} data.nudgeBonus Nudge modification object\n\t */\n\t_handleNudge(data, featureName = 'nudge') {\n\t\tlet nudgeData = data[featureName];\n\t\tlet reels = data.reels;\n\n\t\tnudgeData.forEach((nudge) => {\n\t\t\tlet buffer = data.reelsBuffer[nudge.index];\n\t\t\tlet flatten = _.flatten(buffer);\n\n\t\t\tlet startAt = buffer[0].length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\t\tlet endAt = startAt + buffer[1].length;\n\n\t\t\treels[nudge.index] = flatten.slice(startAt, endAt);\n\n\t\t\tvar fatTilesOnReel = _.where(data.fatTiles || [], { reel: nudge.index });\n\n\t\t\t//Nudge the fat tile as well\n\t\t\tif (fatTilesOnReel.length) {\n\t\t\t\tfatTilesOnReel.forEach(function (tile) {\n\t\t\t\t\ttile.targetPos += nudge.dir === 1 ? nudge.distance : -nudge.distance;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Random Wilds' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleRandomWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.flat().forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = LegendaryExcaliburParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LionDanceParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LionDanceParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'connectingTiles', cb: this._handleConnectingTiles });\n\t}\n\n\t_handleConnectingTiles(data, featureName) {\n\t\tlet feature = data[featureName].path;\n\n\t\tfeature.forEach((tile) => {\n\t\t\tdata.reels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = LionDanceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst MYSTERY_TILE = 10;\n\n/**\n* LionsHoardParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LionsHoardParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\tthis.featureHandlers.unshift({ name: 'lockedPositions', cb: this._handleMysterySymbols });\n\t\tthis.featureHandlers.push({name: 'mystery', cb: this._handleMysterySwap }) // needs to be after locked tiles handler\n\t\tthis.featureHandlers.push({name: 'fatTiles', cb: this._handleFatTiles}) // needs to be after locked tiles handler\n\t}\n\n\t/**\n\t * @description - Mystery symbols handler because in the response they are 'lockedPositions'\n\t */\n\t_handleMysterySymbols(data, featureName) {\n\t\tconst feature = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tfeature.forEach(({ reel, index }) => {\n\t\t\tif (reels[reel] && reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = MYSTERY_TILE;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @description - Handle mystery swapped tiles\n\t */\n\t_handleMysterySwap(data, featureName) {\n\t\tconst { tiles: swappedPositions, toTile } = data[featureName];\n\t\tconst reels = data.reels;\n\n\t\tswappedPositions.forEach(({ reel, index }) => {\n\t\t\tif (reels[reel] && reels[reel][index] !== 'undefined') {\n\t\t\t\treels[reel][index] = toTile;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = LionsHoardParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\nconst FEATURES = {\n  LOCKED_TILES: 'lockedTiles',\n};\n\nclass LondonTubeSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.winDetails.lockedTiles = [];\n    this.featureHandlers.push({name: FEATURES.LOCKED_TILES, cb: this._handleMultipliers});\n  }\n\n  \t/**\n\t * @description showing multiplier on specific features activator\n\t * @param {object} data - The data that is returned from the server.\n\t * @param {string} [name] - The name of the array in the response.\n\t */\n\t_handleMultipliers(data, name) {\n\t\tif (!Config.hasMultipliers.includes(this.gameId)) return;\n\n    const {activator} = data;\n\t\tconst multipliers = data[name];\n    const hasInstantWin = activator && activator.features && activator.features.includes('InstantWin');\n    const hasWaysMultiplier = activator && activator.features && activator.features.includes('WaysMultiplier');\n    const hasWilds = activator && activator.features && activator.features.includes('Wilds');\n\n    if(hasWilds) {\n      return;\n    }\n\n    const hasBonus = hasInstantWin || hasWaysMultiplier;\n\n\t\tmultipliers.forEach(multiply => {\n\t\t\tconst { reel, index, multiplier, instantWin } = multiply;\n\t\t\tconst type = data.type || 0;\n\t\t\tconst previousMultiplier = this.winDetails.multipliers\n\t\t\t\t.find(m => m.reel === reel && m.index === index && m.type === type);\n      const prioritizedValue = hasInstantWin ? instantWin : multiplier;\n      const multi = hasBonus ? prioritizedValue : 0 ; // this is workaround for using lockedTiles asset overlapping with tiles\n      const model = hasInstantWin ? 'InstantWin' : '';\n\n\t\t\tif (previousMultiplier) {\n        previousMultiplier.multiplier = multi;\n      } else {\n        const multiPrefix = hasInstantWin ? `${multi}InstantWin` : multi;\n        this.winDetails.multipliers.push({ type, reel, index, multiplier: multiPrefix, model });\n      }\n\t\t});\n\t}\n\n  /**\n\t * ignores initial tile which triggers locked tiles and removes instant win tiles leaving only the cash prize and the lockedTile frame\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param  {String} featureName\n\t */\n\t_handleFeature(data, featureName) {\n    const {activator} = data;\n    const hasInstantWin = activator && activator.features && activator.features.includes('InstantWin');\n    let featureData = data[featureName];\n\n    if(featureName === FEATURES.LOCKED_TILES && !hasInstantWin) return;\n\n    if(hasInstantWin) {\n      featureData = featureData.map(f => Object.assign({}, f, {tileId: 0})) // making them instant win tiles empty\n    }\n\n\t\tthis._applyReelsModifier(featureData, data.reels);\n\t}\n\n   /**\n   * @description Takes care of which multipliers and lockedTiles in the JP screen are displayed and which are not.\n   * @override\n   */\n   _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        [FEATURES.LOCKED_TILES]: lastSpinData[FEATURES.LOCKED_TILES],\n        type: jp.type\n      }, FEATURES.LOCKED_TILES);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = LondonTubeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LuckyDevilParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LuckyDevilParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'fatMysterySwap', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'rainingMystery', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = LuckyDevilParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * LuckyMrGreenParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass LuckyMrGreenParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'actOfGenerosity',\n\t\t\tcb: this._handleactOfGenerosity\n\t\t});\n\t}\n\n\t_handleactOfGenerosity(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet raogData = data[featureName][0];\n\n\t\treels[raogData.reel][raogData.index] = raogData.toTile;\n\t}\n\n}\n\nmodule.exports = LuckyMrGreenParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass LuckyOktoberfestSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'swapTiles', cb: this._handleSwapTiles },\n\t\t\t{ name: 'lockedTiles', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_handleSwapTiles(data) {\n\t\tvar reelsData = data.swapTiles.map(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t\treturn tile;\n\t\t});\n\n\t\tthis._applyReelsModifier(reelsData, data.reels);\n\t}\n}\n\nmodule.exports = LuckyOktoberfestSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* LunaFortunaParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass LunaFortunaParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\t// this.featureHandlers.unshift({ name: 'customFeatureKey', cb: this._handleCustomFeature });\n\n\t\t/**\n\t\t * NOTE: This game can have vertical winLines and uses cluster config for their reveal. \n\t\t */\n\t\tthis.featureHandlers.push({ name: 'loveSwap', cb: this._handleFeature });\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'swapTiles');\n\t}\n\n\t_handleRandomWilds(data, featureName) {\n\t\tthis._moveTile(data[featureName], data.reels);\n\t}\n\n\t_moveTile(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tconst movedTile = tile.to;\n\t\t\treels[tile.reel][tile.index] = 0;\n\t\t\treels[movedTile.reel][movedTile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = LunaFortunaParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst FAT_TILES_IDS = [15, 16, 17, 18, 19];\nconst TRANSPARENT_POS_ID = 0;\nconst EMPTY_POS_ID = 20;\nconst JP_TILE = 100;\n\n/**\n* MagicPowersMegaWaysSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MagicPowersMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      {name: 'randomWilds', cb: this._handleFeature},\n      {name: 'fatTiles', cb: this._handleMultipliers},\n      {name: 'swapFatTiles', cb: this._handleFeature},\n      {name: 'swapFatTiles', cb: this._handleMultipliers},\n    ];\n  }\n\n  _freeSpinsBeforeParseOperations(data) {\n    super._freeSpinsBeforeParseOperations(data);\n    this._replaceAreaUnderFT(data);\n  }\n\n  _beforeParseOperations(data) {\n    this._replaceAreaUnderFT(data.game);\n  }\n\n  /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({ fatTiles: lastSpinData.fatTiles, type: jp.type }, 'fatTiles');\n      this._handleMultipliers({ swapFatTiles: lastSpinData.swapFatTiles, type: jp.type }, 'swapFatTiles');\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type)\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel) && type === mplr.type)\n    });\n  }\n\n  _replaceAreaUnderFT(data) {\n    if (!data.reels) return;\n\n    const reels = data.reels;\n\n    return data.reels = reels.map(reel => {\n      if (reel.some(id => FAT_TILES_IDS.includes(id))) {\n        return reel.map(id => {\n          if (id !== TRANSPARENT_POS_ID) return id;\n          return EMPTY_POS_ID;\n        });\n      }\n\n      return reel;\n    });\n  }\n\n  /**\n   * @description FTs are not assembled from several pieces of tiles, but are one whole asset.\n   * Therefore, if a JP symbol is dropped, we must replace the FT with the id of the JP tile.\n   * @override\n   */\n  _handleJackpotTiles(jackpotTiles, reels) {\n    if(!jackpotTiles) return;\n\n    jackpotTiles.forEach(jpTile => {\n      const { toTile, tileId, tile, reel, index } = jpTile;\n\n      let id = JP_TILE;\n\n      if (toTile) id = toTile;\n      if (tileId) id = tileId;\n      if (tile) id = tile;\n\n      if (reels[reel] && reels[reel][index] !== 'undefined') {\n        if (reels[reel].some(id => FAT_TILES_IDS.includes(id))) {\n          for (let i = 0; i < reels[reel].length; i++) {\n            reels[reel][i] = i === 0 ? id : TRANSPARENT_POS_ID;\n          }\n        } else {\n          reels[reel][index] = id;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = MagicPowersMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MajesticMysteriesPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MajesticMysteriesPowerReelsParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'swapTiles', cb: this._handleFeature }\n    ];\n\n  }\n}\n\nmodule.exports = MajesticMysteriesPowerReelsParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MasqueradeParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MasqueradeParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'swapMasks',\n\t\t\tcb: this._handleFeature\n\t\t});\n\t}\n\n\t_initReels (data) {\n\t\tsuper._initReels(data);\n\n\t\tlet reels = data.reels;\n\t\tlet length = reels.length;\n\t\tlet tilesCount = 0;\n\n\t\tconsole.log(data.reels);\n\n\t\tfor (let i = 0; i < length; i++) {\n\n\t\t\tif (i === 0 || i === 4) {\n\t\t\t\ttilesCount = 2;\n\t\t\t} else if (i === 1 || i === 3) {\n\t\t\t\ttilesCount = 1;\n\t\t\t} else {\n\t\t\t\ttilesCount = 0;\n\t\t\t}\n\n\t\t\tif (!tilesCount) continue;\n\n\t\t\tfor (let j = 0; j < tilesCount; j++) {\n\t\t\t\treels[i][reels[i].length - j - 1] = 0;\n\t\t\t}\n\t\t}\n\n\t\tdata.reels = reels;\n\t}\n}\n\nmodule.exports = MasqueradeParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayanGodsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MayanGodsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'mayanKingTiles', cb: this._handleFeatureTiles },\n\t\t\t{ name: 'eclipseTiles', cb: this._handleFeatureTiles }\n\t\t];\n\t}\n\n\t_handleFeatureTiles (data, featureName) {\n\t\tdata[featureName].forEach((featData) => this._applyReelsModifier(featData, data.reels));\n\t}\n\n}\n\nmodule.exports = MayanGodsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayhemParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\n\nclass MayhemSlotParser extends DopSlotParser {\n\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'fatTiles', cb: this._handleFatTiles }\n    ];\n  }\n}\n\nmodule.exports = MayhemSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MegaDragonParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MegaDragonParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach((handler) => {\n\t\t\tif (handler.name === 'swapTiles') handler.cb = this._handleSwapTiles;\n\t\t});\n\t\tthis.featureHandlers.unshift({ name: 'swapWilds', cb: this._handleSwapTiles });\n\t}\n\n\t_handleSwapTiles(data, featName) {\n\t\tconst flatData = [].concat.apply([], data[featName]); // Flatten Data\n\t\tconst featData = flatData.filter((item) => {\n\t\t\treturn item.toTile !== null;\n\t\t});\n\n\t\tthis._applyReelsModifier(featData, data.reels);\n\t}\n\n\t_handleFatTiles(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featName];\n\n\t\tfatTilesData.forEach((item) => this._alterReelsTiles(item, reels));\n\t}\n\n\t_alterReelsTiles(item, reels) {\n\t\tconst { reel, index } = this._getStartReelIndex(item);\n\n\t\tfor (let i = 0; i < item.width; i++) {\n\t\t\tfor (let j = 0; j < item.height; j++) {\n\t\t\t\treels[reel + i][index + j] = item.tileId;\n\t\t\t}\n\t\t}\n\t}\n\n\t_getStartReelIndex(data) {\n\t\treturn {\n\t\t\treel: Math.min(data.reel, data.to.reel),\n\t\t\tindex: Math.min(data.targetPos, data.to.targetPos),\n\t\t};\n\t}\n}\n\nmodule.exports = MegaDragonParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass MegaPyramidSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles });\n\t\tthis.featureHandlers.push({ name: 'lockedTiles', cb: this._handleFeature });\n\t}\n\n\t_handleCloningTiles(data) {\n\t\tdata.cloningTiles.forEach(tiles => {\n\t\t\ttiles.forEach(cloningData => {\n\t\t\t\tthis._applyReelsModifier(cloningData, data.reels);\n\t\t\t});\n\t\t});\n\t}\n}\n\nmodule.exports = MegaPyramidSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst Config = require('../../../../config/Config');\n\n/**\n * MidasGoldSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MidasGoldSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t// { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\n        // this.featureHandlers = this.featureHandlers.concat([\n        //     {name: 'respin', cb: this._handleRespins}\n        // ]);\n    }\n\n    /**\n     * convert to ways\n     * @param gameId\n     * @param data\n     * @returns {{game: Object}}\n     */\n    parse(gameId, data) {\n\n\t    if (data.game.winLines.length) data.game.winLines = this._toWays(gameId, data.game);\n        if (data.game.respin && data.game.respin.length) {\n            let lastRespin = data.game.respin.length - 1;\n            data.game.respin[lastRespin].winLines = this._toWays(gameId, data.game.respin[lastRespin]);\n        }\n\n        return super.parse(gameId, data);\n    }\n\n    _toWays(gameId, spinData) {\n        // Midas can have win lines from only one symbol per spin\n        var newWinLines = [\n            {\n                amount: spinData.win.lines,\n                index: 0,\n                length: spinData.winLines[0].length,\n                ways: spinData.winLines.length,\n                multiplier: 1, // just for consistency\n                start: 0,\n                tile: spinData.winLines[0].tile,\n                tiles: [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]\n            }\n        ];\n\n        _.each(spinData.winLines, (winLine) => {\n            _.times(winLine.length, (reelIndex) => {\n                _.each(spinData.reelsBuffer[reelIndex][1], (tile, i) => {\n                    if (tile === winLine.tile) newWinLines[0].tiles[reelIndex][i] = 1;\n                }, this);\n            });\n        });\n\n        return newWinLines;\n    }\n\n    // _handleRespins(data) {\n\t //    let hide0s = Config.respinWinEndOnly.indexOf(this.gameId) !== -1;\n    //     data.respin.forEach((spin) => {\n    //         spin.amount = spin.win.total;\n    //         spin.type = this.freeSpinsCount++;\n    //         spin.hide0s = hide0s;\n    //     });\n    //     this.winDetails.respin = this.winDetails.respins = data.respin;\n    // }\n\n}\n\nmodule.exports = MidasGoldSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MixAndMatchSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MixAndMatchSlotParser extends DopSlotParser {\n  _handleWins(data) {\n    super._handleWins(data);\n\n    if (data.game.choices && data.game.winLines) {\n      this.winDetails.initialLinesWin = data.game.pendingWin.total;\n      this.winDetails.winLines = data.game.winLines;\n    }\n\n    // After accepting the exchange bonus, the last screen of the free spins is in a different response, than the one in which the jackpot was won.\n    // Here we collect information from both responses to properly visualize the screen on which we win the jackpot.\n    const mainData = this.data.responses[0];\n\n    if (data.game.gameData && mainData.jackpots && mainData.jackpots.win > 0) {\n      _.each(mainData.jackpots.pots, pot => {\n        const jackpot = this.winDetails.jackpotWins.find(jackpot => pot.id === jackpot.type);\n\n        if (jackpot) {\n          const lastSpinData = this._getLastSpinData(this.winDetails, data.game.gameData);\n\n          jackpot.reels = this._cloneReels(lastSpinData.reels);\n          this._handleJackpotTiles(mainData.game.jackpotTiles, jackpot.reels);\n        }\n      });\n    }\n  }\n\n  _addOtherWins(data, type) {\n    if (data.choices) this.otherWins.instantWin = [];\n    super._addOtherWins(data, type);\n  }\n\n  _roundingCorrection(data) {\n    if (!data.game.choices) return super._roundingCorrection(data);\n\n    const hasWheel = this._hasFeature(data.game, \"WheelBonus\");\n    const selectedChoice = this._getSelectedChoice(data);\n\n    if (!selectedChoice || selectedChoice === 'collect') return;\n\n    this.winDetails.otherWins.push({\n      type: hasWheel ? 'gamble' : 'winExchange',\n      amount: - data.game[ hasWheel ? 'wheelBonus' : 'winExchangeBonus' ].bonus.price.amount\n    });\n  }\n\n  _getSelectedChoice(data) {\n    return data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n  }\n\n  _hasFeature(data, feature) {\n    return data &&\n      data.activator &&\n      data.activator.features.length > 1 &&\n      data.activator.features.some(f => f === feature);\n  }\n}\n\nmodule.exports = MixAndMatchSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass MonstersUnchainedSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = MonstersUnchainedSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass MultiplierRichesSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.forEach(handler => {\n      if (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n    });\n  }\n\n  /**\n  * Handler for the 'Nudge' feature\n  * @private\n  * @param  {Object} data Game data, contains\n  * screen reels and every game feature\n  * @param {Array} data.reelsBuffer reels buffer array\n  * @param {Array} data.nudge Nudge modification object\n  * @param {Array} data.nudgeBonus Nudge modification object\n  * @override is needed because of stateful multipliers\n  */\n  _handleNudge(data, featureName = 'nudge') {\n    let nudgeData = data[featureName];\n    let reels = data.reels;\n\n    nudgeData.forEach((nudge) => {\n      const buffer = nudge.buffer[1];\n      const direction = nudge.dir === 1 ? 1 : -1;\n      const distance = nudge.distance;\n      const multiplierId = distance - (distance * direction);\n\n      buffer[multiplierId] = 0;\n\n      reels[nudge.index] = nudge.buffer[1];\n    });\n  }\n\n  /**\n   * Handler for the 'Locked Tiles' feature\n   * @private\n   * @param  {Object} data Game data, contains\n   * screen reels and every game feature\n   * @override is needed because in next spin, after nudge with locked tile in previous spin,\n   * there are consecutive 1 indexes in buffer as result of multiplier collect.\n   * Tile assets with id 1 are flat and this affect lines placement,\n   * so tile with same index as collected multiplier must be replaced with id 0 to fix line's position.\n   */\n  _handleLockedTiles(data, featureName) {\n    let reels = data.reels;\n    let lockedTilesData = data[featureName];\n\n    lockedTilesData.forEach((tile) => {\n      reels[tile.reel][tile.index] = tile.tile;\n      this._clearConsecutiveIndexes(reels[tile.reel]);\n    });\n  }\n\n  _clearConsecutiveIndexes(reel) {\n    const lastIndex = reel.length - 1;\n\n    if (reel[0] === 1 && reel[0] === reel[1]) reel[0] = 0;\n    if (reel[lastIndex] === 1 && reel[lastIndex - 1] === reel[lastIndex]) reel[lastIndex] = 0;\n  }\n}\n\nmodule.exports = MultiplierRichesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryFruitSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryFruitSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('wheelBonus');\n\n        this.featureHandlers.unshift({ name: 'cloningTile', cb: this._handleCloningTile });\n    }\n\n    /**\n     * Handler for the 'Cloning Tile/Mystery Fruit' feature\n     * @private\n     * @param {Object} data Game data, contains\n     * screen reels and every game feature\n     * @param {Array} data.mysterySwap Array of tile modifications\n     * @param {Array} data.reels Screen reels state\n     */\n\n    _handleCloningTile(data) {\n        let reels = data.reels;\n        let tileSwaps = data.mysterySwap;\n\n       tileSwaps.forEach((tile) => {\n            if (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n                reels[tile.reel][tile.index] = tile.toTile;\n            }\n        });\n    }\n\n}\n\nmodule.exports = MysteryFruitSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* MysteryReelsDeluxeSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass MysteryReelsDeluxeSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.otherWins.bonus.push('wheelBonus');\n\n    this.featureHandlers.unshift({ name: 'mystery', cb: this._handleMysteryTiles });\n  }\n\n  _handleMysteryTiles(data) {\n    let reels = data.reels;\n    let tileSwaps = data.mystery;\n\n    tileSwaps.forEach((tile) => {\n      if (reels[tile.reel] && reels[tile.reel][tile.index]) {\n        reels[tile.reel][tile.index] = tile.to.tileId;\n      }\n    });\n  }\n}\n\nmodule.exports = MysteryReelsDeluxeSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MysteryReelsMegaWaysParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass MysteryReelsMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cloningTile',\n\t\t\tcb: this._handleCloningTile\n\t\t});\n\t}\n\n\t_handleCloningTile(data, featureName = 'cloningTile') {\n\t\tconst reels = data.reels;\n\t\tconst featData = [].concat.apply([], data[featureName]); // Used to flatten the data.\n\n\t\tconsole.log('Flatten >>> ', featData);\n\n\t\tfeatData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.toTile;\n\t\t});\n\t}\n\n}\n\nmodule.exports = MysteryReelsMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass MysticWheelSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n\t\t\t\tthis.otherWins.bonus.push('wheelBonus');\n\t\t}\n}\n\nmodule.exports = MysticWheelSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NarcosMexicoParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass NarcosMexicoParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'randomWilds', cb: this._handleFeature },\n      { name: 'fatTiles', cb: this._handleFatTiles },\n      { name: 'lockedTiles', cb: this._handleFeature },\n    ];\n  }\n\n  _handleWins(data) {\n    super._handleWins(data);\n\n    if (data.game.choices && data.game.winLines) {\n      this.winDetails.initialLinesWin = data.game.pendingWin.total;\n\n      data.game.winLines.forEach((line) => {\n        line.type = line.index + 1;\n      });\n\n      this.winDetails.winLines = data.game.winLines;\n    }\n\n  }\n\n  _addOtherWins(data, type) {\n    if (data.choices) {\n      this.otherWins.instantWin = [];\n\n      const hasWheel = this._hasFeature(data, \"DoubleCash\");\n      if (hasWheel && data.pendingWin) data.win = data.pendingWin;\n    }\n\n    super._addOtherWins(data, type);\n  }\n\n  _handleFatTiles(data, featureName) {\n    data[featureName] = this._alterIndex(data[featureName]);\n\n    super._handleFatTiles(data, featureName);\n  }\n\n  _alterIndex(data) {\n    const zonesToTiles = { '6': 12, '7': 13, '8': 14, '9': 15 };\n\n    return data.map((item) => {\n      return Object.assign({}, item, {\n        targetPos: item.index,\n        tileId: zonesToTiles[item.tileId]\n      });\n    });\n  }\n\n  _roundingCorrection(data) {\n    if (!data.game.choices) {\n      super._roundingCorrection(data);\n      return;\n    }\n\n    const selectedChoice = this._getSelectedChoice(data);\n    if (selectedChoice === 'collect') return;\n\n    const hasWheel = this._hasFeature(data.game, \"WheelBonus\");\n    const hasWinExchange = this._hasFeature(data.game, \"WinExchangeBonus\");\n\n    if (hasWheel) {\n      const modifier = selectedChoice === 'gamble' ? -1 : 1;\n      const bonusAmount = data.game.pendingWin.total * modifier;\n      const bonus = this.winDetails.totalWin === bonusAmount ? 0 : bonusAmount;\n\n      this.winDetails.otherWins.push({ type: 'gamble', amount: bonus });\n    }\n\n    if (hasWinExchange) {\n      const { freeSpinsPrice } = data.game.winExchangeBonus;\n\n      this.winDetails.otherWins.push({ type: 'winExchange', amount: -freeSpinsPrice.amount });\n    }\n  }\n\n  _getSelectedChoice(data) {\n    return data.responses.length > 1 && data.responses[1].game && data.responses[1].game.choices && data.responses[1].game.choices.selected;\n  }\n\n  _hasFeature(data, feature) {\n    return data &&\n      data.activator &&\n      data.activator.features.length > 1 &&\n      data.activator.features.some(f => f === feature);\n  }\n}\n\nmodule.exports = NarcosMexicoParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* NeonLinksParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass NeonLinksParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'swapFatTiles', cb: this._handleFatTiles });\n\t}\n}\n\nmodule.exports = NeonLinksParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* OwnTheZoneParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass NightRollerSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = NightRollerSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass NinjaWaysSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'randomScatters', cb: this._handleFeature });\n        this.featureHandlers.push({ name: 'randomRows', cb: this._handleRandomRandomRows });\n    }\n\n    _handleRandomRandomRows(data){\n        let reels = data.reels;\n\n        data.randomRows.forEach((sequenceArray) => {\n            sequenceArray.forEach((tileArray) => {\n                tileArray.forEach((tile) => {\n                    if (tile === undefined) return;\n\n                    reels[tile.reel][tile.index] = tile.toTile;\n                });    \n            });\n        });\n    }\n\n}\n\nmodule.exports = NinjaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PaddyPowerGoldMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass PaddyPowerGoldMegaWaysParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'luckyLine', cb: this._handleLuckyLine });\n\t\tthis.featureHandlers.unshift({ name: 'wildStacks', cb: this._handleWildStacks });\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t_handleLuckyLine(data, featName = 'luckyLine') {\n\t\tconst reels = data.reels;\n\t\tconst luckyLineData = data[featName];\n\n\t\tluckyLineData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tileId;\n\t\t});\n\t}\n\n\t_handleWildStacks(data, featName = 'wildStacks') {\n\t\tconst reels = data.reels;\n\t\tconst wildStacksData = data[featName];\n\n\t\tlet currentReel = null;\n\t\t\n\t\twildStacksData.forEach((stack) => {\n\t\t\tcurrentReel = reels[stack.reel];\n\t\t\tcurrentReel = currentReel.map((_, index) => {\n\t\t\t\treturn !index ? stack.tileId : 0;\n\t\t\t});\n\n\t\t\treels[stack.reel] = currentReel;\n\t\t\tcurrentReel = null;\n\t\t});\n\t}\n}\n\nmodule.exports = PaddyPowerGoldMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PeggySweetsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass PeggySweetsParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.push({ name: 'doubleTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = PeggySweetsParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass PersianFortuneParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'lockedTiles');\n\t}\n}\n\nmodule.exports = PersianFortuneParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass PiggyPiratesSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'movingTiles', cb: this._handleMovingTiles });\n    }\n\n    /**\n     * @description Handler for the 'movingTiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * TODO may be moved to base if used by another game\n     */\n    _handleMovingTiles (data, featureName) {\n        const reels = data.reels;\n        const tiles = data[featureName];\n        tiles.forEach((tile) => {\n            if (tile.to.reel < 0 || tile.to.reel > 5) return; // pig fell off screen\n            reels[tile.to.reel][tile.to.index] = tile.tileId;\n        });\n    }\n}\n\nmodule.exports = PiggyPiratesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * @class\n * @extends {DopSlotParser}\n */\nclass PiratesPlentyBattleForGoldSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'progress', cb: this._handleFirstRow });\n    }\n\n    /**\n     * First row is locked until enough progress is collected. Whether first row is unlocked can be determined based on game.progress.unlocked.\n     * We don't pop the first row buffer and replace with 0 instead, because otherwise win lines will be misplaced.\n     * @param {Object} data\n     * @param {String} featureName\n     * @private\n     */\n    _handleFirstRow(data, featureName) {\n        let reels = data.reels,\n            progress = data[featureName];\n\n        if(!progress.unlocked) {\n            reels = reels.map(reel => reel[0] = 0);\n        }\n    }\n}\n\nmodule.exports = PiratesPlentyBattleForGoldSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* PiratesPlentyMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass PiratesPlentyMegaWaysParser extends DopSlotParser {\n\n  constructor(){\n    super();\n\n    this.featureHandlers.unshift({ name: 'progress', cb: this._handleFirstRow });\n  }\n\n  _initReels(data) {\n    super._initReels(data);\n\n    const horizontalReels = data.horizontalReels[0][1];\n    data.reels.forEach((reel, i) => reel[0] = horizontalReels[i]);\n  }\n\n  _handleFirstRow(data, featureName) {\n    let reels = data.reels;\n    let progress = data[featureName];\n\n    if(!progress.unlocked) reels.forEach(reel => reel[0] = 0);\n  }\n\n}\n\nmodule.exports = PiratesPlentyMegaWaysParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * @class\n * @extends {DopSlotParser}\n */\nclass PiratesPlentySlotParser extends DopSlotParser {\n\n    _afterParseOperations(data) {\n        super._afterParseOperations(data);\n        this._handleSixthReel(data.game);\n    }\n\n    _freeSpinsBeforeParseOperations(gameData) {\n        super._freeSpinsBeforeParseOperations(gameData);\n        this._handleSixthReel(gameData);\n    }\n\n\t/**\n\t * Sixth reel is locked until enough progress is collected. Whether sixth reel is unlocked can be determined\n     * based on game.progress.reels .\n     * We don't pop the last reel buffer and replace with with 0 instead, because otherwise win lines will be misplaced.\n     * @param gameData\n     * @private\n     */\n    _handleSixthReel(gameData) {\n        if (!gameData.reels || !gameData.progress) return; //eg. gamble\n\n        if(gameData.reels.length > gameData.progress.reels) {\n            gameData.reels[gameData.reels.length-1] = [0,0,0];\n        }\n    }\n}\n\nmodule.exports = PiratesPlentySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass PrimateKingSlotParser extends DopSlotParser {\n    _applyScreenMask(data) {\n        if (!data) return;\n\n        const { progress, respin } = data;\n        const hasRespinProgress = respin && respin.length > 0;\n        const lastProgress = hasRespinProgress ? respin[respin.length-1].progress : progress;\n\n        if (lastProgress && lastProgress.unlocked) return;\n\n        super._applyScreenMask(data)\n    }\n}\n\nmodule.exports = PrimateKingSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass PussNBootsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\n\t\tthis.featureHandlers.unshift({ name: 'randomRows', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = PussNBootsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RAsLegendParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass RAsLegendParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push(\n\t\t\t'wheelBonus',\n\t\t\t'pyramidBonus'\n\t\t);\n\t}\n\n}\n\nmodule.exports = RAsLegendParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass RainbowJackpotsPowerLinesSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinMega');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tlet freeSpinsMega = response.game.freeSpinsMega;\n\n\t\tif (!response.game.freeSpinsMega) return;\n\n\t\tresponse.game.freeSpins = freeSpinsMega;\n\t\tresponse.game.win.freeSpins = response.game.win.freeSpinsMega;\n\n\t\tfreeSpinsMega.forEach(freeSpinMega => {\n\t\t\tthis._beforeParseOperations({ game: freeSpinMega });\n\t\t});\n\n\t\tdelete response.game.freeSpinsMega;\n\t\tdelete response.game.win.freeSpinsMega;\n\t}\n\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.index + tile.height;\n\n\t\t\t\tfor (let j = tile.index; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = RainbowJackpotsPowerLinesSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RAsLegendParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass RainbowJackpotsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinMega');\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tlet freeSpinsMega = response.game.freeSpinsMega;\n\n\t\tif (!response.game.freeSpinsMega) return;\n\n\t\tresponse.game.freeSpins = freeSpinsMega;\n\t\tresponse.game.win.freeSpins = response.game.win.freeSpinsMega;\n\n\t\tfreeSpinsMega.forEach(freeSpinMega => {\n\t\t\tthis._beforeParseOperations({ game: freeSpinMega });\n\t\t});\n\n\t\tdelete response.game.freeSpinsMega;\n\t\tdelete response.game.win.freeSpinsMega;\n\t}\n}\n\nmodule.exports = RainbowJackpotsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * MayanGodsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ReactorSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomTiles', cb: this._handleFeature },\n\t\t\t{ name: 'swapTiles', cb: this._handleFeature },\n\t\t\t{ name: 'randomWilds', cb: this._handleFeature },\n\t\t\t{ name: 'fatTiles', cb: this._handleFatTiles }\n\t\t];\n\t}\n\n}\n\nmodule.exports = ReactorSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass RedDiamondSlotParser extends DopSlotParser {\n    _nudgeJackpotTiles(lastSpinData, reels, data) {\n        const jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n        if (!jackpotNudgeData) return;\n\n        const nudgeData = lastSpinData.nudge || [];\n\n        jackpotNudgeData.forEach(jackpotNudge => {\n            const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n            const nudgeDistance = nudge ? (nudge.dir === 0 ? nudge.distance : -nudge.distance) : 0;\n            const jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n            const distance = jackpotNudgeDistance - nudgeDistance;\n            const buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n            const flatten = _.flatten(buffer);\n            const startAt = buffer[0].length + distance;\n            const endAt = startAt + buffer[1].length;\n\n            reels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n        });\n\n        this._addJackpotTiles(data.jackpotTiles, reels);\n    }\n\n    _addJackpotTiles(jackpotTiles, reels) {\n        if(!jackpotTiles) return;\n\n        jackpotTiles.forEach(jpTile => {\n            const { reel, index } = jpTile;\n            const id = 100;// default jackpot tile id\n\n            if (reels[reel] && reels[reel][index] !== 'undefined') {\n                reels[reel][index] = id;\n            }\n        });\n    }\n\n    _handleJackpotTiles() {\n        return;\n    }\n}\n\nmodule.exports = RedDiamondSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RedHotBBQSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass RedHotBBQSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'mysteryTiles', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = RedHotBBQSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * ReelHeistParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ReelHeistParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.instantWin.push('instantWinCatch');\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'cop',\n\t\t\tcb: this._handleCop\n\t\t});\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'thieves',\n\t\t\tcb: this._handleThieves\n\t\t});\n\t}\n\n\t_handleCop (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst copData = data[featureName];\n\n\t\tcopData.forEach((tile) => {\n\t\t\tif (!tile.saveCop) return;\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n\t_handleThieves (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst length = reels.length;\n\t\tconst thievesData = data[featureName];\n\n\t\tthievesData.forEach((tile) => {\n\n\t\t\tconst copCheck = data.cop && data.cop.findIndex(function (cop) {\n\t\t\t\treturn cop.to.reel === tile.to.reel && cop.to.index === tile.to.index;\n\t\t\t}) > -1;\n\n\t\t\tif ((tile.to.reel < 0) || (tile.to.reel > length - 1) || copCheck) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = ReelHeistParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ReelKeeperSlotParser extends DopSlotParser {\n    constructor() {\n        super();\n\n\t\tthis.featureHandlers.unshift({ name: 'movingTiles', cb: this._handleMovingWilds });\n    }\n\n    /**\n     * Handler for the 'Fat tiles' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     * @override different format of response data for fatTiles feature\n     */\n    _handleFatTiles(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            let reelIndex = tile.reel;\n\n            let tileBottom = tile.index + tile.height;\n\n            for (let j = tile.index; j < tileBottom; j++) {\n                if (reels[reelIndex] && reels[reelIndex][j]) {\n                    reels[reelIndex][j] = tile.tileId;\n                }\n            }\n        });\n    }\n\n    _handleMovingWilds(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet movingWilds = data[featureName];\n\n\t\tmovingWilds.forEach((tile) => {\n            const reelTo = reels[tile.to.reel];\n            if (!reelTo) return;\n\n            for (let i = 0; i < tile.height; i++) {\n                if (reelTo[i]) {\n                    reelTo[i] = tile.tileId;\n                }\n            }\n\t\t\t\n\t\t});\n\t}\n}\n\nmodule.exports = ReelKeeperSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ReelKingSlotParser extends DopSlotParser {\n    constructor() {\n\t\t\t\tsuper();\n\n\t\t\t\tthis.otherWins.bonus.push('bonus');\n\t\t}\n}\n\nmodule.exports = ReelKingSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RegalBeastsSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass RegalBeastsSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n\n\t//we change the line length to reflect the winning tiles in the winning line. there is a difference between the two since there are double and triple symbols.\n\t//if we don't do that an error is shown in DopSlotPanel._highlightLineAndTiles that reel = screen.children[i] is undefined \n\n\t_afterParseOperations(data) {\n\t\tif (!data.game.win.lines) return;\n\n\t\tthis._handleLinesLength(data.game.winLines);\n\t}\n\n\t_freeSpinsAfterParseOperations(extraSpin) {\n\t\tif (!extraSpin.win.lines) return;\n\n\t\tthis._handleLinesLength(extraSpin.winLines);\n\t}\n\n\t_handleLinesLength(winLines) {\n\t\twinLines.forEach(line => {\n\t\t\tlet tilesCount = 0;\n\n\t\t\tline.tiles.forEach(tile => tile > 0 && tilesCount++);\n\t\t\tline.length = tilesCount;\n\t\t});\n\t}\n\n\t//This method is overriden because there are fake swap tiles and they should not be displayed, which is why we check if isVisible is false.\n\n\t_applyReelsModifier(feature, reels) {\n\t\tfeature.forEach((tile) => {\n\t\t\tlet isNested = tile instanceof Array;\n\n\t\t\tif (isNested) this._applyReelsModifier(tile, reels);\n\t\t\telse {\n\t\t\t\tif (!tile.visible) return;\n\n\t\t\t\treels[tile.reel][tile.index] = typeof tile.toTile !== 'undefined' ? tile.toTile : tile.tileId;\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = RegalBeastsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ReptizillionsPowerReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ReptizillionsPowerReelsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'scatters', cb: this._handleFsScatters },\n\t\t\t{ name: 'movingTiles', cb: this._handleMovingTiles }\n\t\t];\n\t}\n\n\t_handleMovingTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst movingTiles = data[featureName];\n\n\t\tmovingTiles.forEach(({ tileId, to: { reel, index } }) => {\n\t\t\tif (reels[reel] && reels[reel][index]) {\n\t\t\t\treels[reel][index] = tileId;\n\t\t\t}\n\t\t});\n\t}\n\n\t_handleFsScatters(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst scattersData = data[featureName];\n\n\t\tscattersData.forEach((tile) => {\n\t\t\tconst { tileRight, targetPos, id } = this._getScatterData(tile);\n\n\t\t\tthis._setTileIds(tile, tileRight, targetPos, reels, id);\n\t\t});\n\t}\n\n\t_getScatterData(tile) {\n\t\tconst tileRight = tile.reel + tile.width;\n\t\tconst targetPos = typeof tile.targetPos !== 'undefined' ? tile.targetPos : tile.index;\n\t\tconst id = typeof tile.tileId !== 'undefined' ? tile.tileId : tile.toTile;\n\n\t\treturn { tileRight, targetPos, id };\n\t}\n\n\t_setTileIds(tile, tileRight, targetPos, reels, id) {\n\t\tlet gridWidthIndex = 0;\n\n\t\tfor (let reelIndex = tile.reel; reelIndex < tileRight; reelIndex++) {\n\t\t\tconst tileBottom = targetPos + tile.height;\n\t\t\tlet gridHeightIndex = 0;\n\n\t\t\tfor (let tileIndex = targetPos; tileIndex < tileBottom; tileIndex++) {\n\t\t\t\tif (reels[reelIndex] && reels[reelIndex][tileIndex]) {\n\t\t\t\t\treels[reelIndex][tileIndex] = `${id}_${tile.width}x${tile.height}_${gridWidthIndex}x${gridHeightIndex}`;\n\t\t\t\t}\n\n\t\t\t\tgridHeightIndex += 1;\n\t\t\t}\n\n\t\t\tgridWidthIndex += 1;\n\t\t}\n\t}\n}\n\nmodule.exports = ReptizillionsPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RiddleOfTheSphinxParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass RiddleOfTheSphinxSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst featureName = 'swapTiles';\n\n\t\tthis.featureHandlers = this.featureHandlers.filter((handler) => handler.name !== featureName);\n\t\tthis.featureHandlers.push({ name: featureName, cb: this._handleSwapTiles });\n\t}\n\n\t// don't swap tiles which are outside of the screen reels\n\t_handleSwapTiles(data, featureName) {\n\t\tconst visibleTiles = data[featureName].filter((tile) => tile.visible);\n\n\t\tthis._applyReelsModifier(visibleTiles, data.reels);\n\t}\n}\n\nmodule.exports = RiddleOfTheSphinxSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst EMPTY_TILES_ID = 0;\nconst REDUNDANT_TILES_ID = '';\nconst TOP_HORIZONTAL_REEL_INDEX = 0;\nconst BOTTOM_HORIZONTAL_REEL_INDEX = 8;\n\n/**\n * RisqueMegaWaysSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass RisqueMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [{ name: 'fatTiles', cb: this._handleFatTiles }];\n  }\n\n  /**\n   * @description Additional logic is needed to reflect the changes from the fat tiles data to the bottom horizontal reel.\n   */\n  _handleFatTiles(data, featureName) {\n    const reelsBuffer = data.reelsBuffer;\n    const tilesCountOnReel = reelsBuffer[0][1].length;\n    const fatTilesData = data[featureName];\n    const horizontalReelIndices = [BOTTOM_HORIZONTAL_REEL_INDEX, TOP_HORIZONTAL_REEL_INDEX];\n    const minCountEmptyPos = this._getRedundantRowsCount(reelsBuffer, tilesCountOnReel, horizontalReelIndices);// must be before super call\n    const maxReelHeight = tilesCountOnReel - minCountEmptyPos;\n\n    super._handleFatTiles(data, featureName);\n\n    reelsBuffer.forEach(([, reelMiddle, ], index) => {\n      const fatTile = fatTilesData.find(ft => ft.reel === index);\n\n      if (!fatTile) return;\n\n      // the last tile index behind FT must be on bottom horizontal reel\n      data.reels[index][fatTile.height-1] = maxReelHeight > fatTile.height ? EMPTY_TILES_ID : REDUNDANT_TILES_ID;\n      data.reels[index][reelMiddle.length-1] = fatTile.tileId;\n    });\n\n  }\n}\n\nmodule.exports = RisqueMegaWaysSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* RobinHoodsWildForestParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass RobinHoodsWildForestParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleRandomWilds });\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t_handleRandomWilds(data, featName = 'randomWilds') {\n\t\tthis._applyTiles(data[featName], data.reels);\n\t}\n\n\t_handleLockedTiles(data, featName = 'lockedTiles') {\n\t\tconst locksData = Object.assign({}, data, {\n\t\t\tlockedTiles: this._parseData(data, featName)\n\t\t});\n\n\t\tthis._handleFeature(locksData, featName);\n\t}\n\n\t_parseData(data, featName) {\n\t\tif (!data.targetTiles) return data[featName];\n\n\t\tlet parsed = [];\n\n\t\tif (data.targetTiles) {\n\t\t\tlet extraPositions = data.targetTiles.filter((item) => {\n\t\t\t\treturn data[featName].findIndex((pos) => {\n\t\t\t\t\treturn pos.reel === item.reel && pos.index === item.index;\n\t\t\t\t}) < 0;\n\t\t\t});\n\n\t\t\textraPositions = extraPositions.map((pos) => {\n\t\t\t\treturn { reel: pos.reel, index: pos.index, tile: pos.tileId }\n\t\t\t});\n\n\t\t\tparsed = [].concat(data[featName], extraPositions);\n\t\t}\n\n\t\treturn parsed;\n\t}\n\n\t_applyTiles(data, reels) {\n\t\tdata.forEach((tile) => {\n\t\t\tif (tile instanceof Array) {\n\t\t\t\treturn this._applyTiles(tile, reels);\n\t\t\t}\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = RobinHoodsWildForestParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * RocketMenParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass RocketMenParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push(\n\t\t\t'donParty',\n\t\t\t'targetPractice'\n\t\t);\n\n        this.featureHandlers.unshift({ name: 'donGolfClub',  cb: this._donGolfClub }); // respin in respin\n        this.featureHandlers.unshift({ name: 'kimHobby',  cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'nuclearSpins',  cb: this._handleNuclearSpins }); // modifiers - apply nuke tiles\n\n        this.respinArray = [];\n    }\n\n\t_handleNuclearSpins (data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst nukeSpinsData = data[featureName];\n\t\tconst kimsNukes = nukeSpinsData.missiles.Kim;\n\t\tconst donsNukes = nukeSpinsData.missiles.Don;\n\t\tconst allNukes = kimsNukes.concat(donsNukes);\n\n\t\tallNukes.forEach((tile) => {\n\t\t\tif (tile.explode) return;\n\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n    // /**\n    //  * @inheritDoc\n    //  */\n    // _beforeParseOperations(data) {\n    //     data = data.game;\n    //     this._flattenNestedRespins(data);\n    //     console.warn(\"ALL RESPINS\",  this.respinArray);\n    // }\n\t//\n    // /**\n    //  *\n    //  * @param data\n    //  * @private\n    //  */\n    // _flattenNestedRespins (data) {\n    //     if(data.respin) {\n    //         let nextRespin = data.respin[0];\n    //         this.respinArray.push(nextRespin);\n    //         this._flattenNestedRespins(nextRespin);\n    //     }\n    // }\n\n    // /**\n    //  * @inheritDoc\n    //  */\n    // _handleFreeSpins(data, featureName = 'freeSpins') {\n    //     super._handleFreeSpins(data, featureName);\n\t//\n    //     // move free spins to respin, so the respins template is used\n    //     let winDetailsFS = this.winDetails.respins;\n    //     let freeSpins = this.winDetails.freeSpins;\n\t//\n    //     this.winDetails.respins = winDetailsFS ? winDetailsFS.concat(freeSpins) : freeSpins;\n    //     delete this.winDetails.freeSpins;\n    // }\n\n    _donGolfClub (data, featureName) {\n\t\tthis.winDetails.totalWin = 0;\n\t\tthis.winDetails.respin = this.winDetails.respins = this.respinArray;\n\n\t\t_.each(this.respinArray, function(respin, i){\n\t\t    respin.amount = respin.win.lines || 0;\n\t\t    respin.type = i + 1;\n\t\t    respin.reels = [];\n\n\t\t    this.winDetails.totalWin += respin.win.total;\n\n            _.each(respin.reelsBuffer, function(reelData){\n                respin.reels.push(reelData[1]);\n            }, this);\n        }, this);\n    }\n\n}\n\nmodule.exports = RocketMenParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass SevenSevenSevenStrikeSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [{ name: 'lockedTiles', cb: this._handleFeature }];\n\t}\n}\n\nmodule.exports = SevenSevenSevenStrikeSlotParser;","const bonusTypes = {\n  senior: 'Senior',\n  reel: 'Reel',\n  row: 'Row',\n  progress: 'Progress'\n};\n\nconst DopSlotParser = require('../DopSlotParser');\n\n/**\n* ShadowSocietySlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ShadowSocietySlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift(\n      { name: 'progressSymbols', cb: this._handleFatTiles },\n      { name: 'scatters', cb: this._handleFatTiles }\n    );\n  }\n\n  _applyScreenMask(data) {\n    const { reel: reelType, row: rowType } = bonusTypes;\n    const {\n      progress: { activeReels: currentReels, activeRows: currentRows } = {},\n      progressBonus: { type: progressType, value: progressValue } = {},\n      reels = []\n    } = data;\n\n    const activeReels = progressType === reelType ? progressValue : currentReels;\n    const activeRows = progressType === rowType ? progressValue : currentRows;\n\n    reels.forEach((reel, reelIndex) => {\n      reel.forEach((tile, tileIndex) => {\n        if (reelIndex >= activeReels || tileIndex >= activeRows) reels[reelIndex][tileIndex] = 0;\n      });\n    });\n  }\n}\n\nmodule.exports = ShadowSocietySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SheepGoneWildSlotParser. Handles parsing game specific features.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SheepGoneWildSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: 'swapTiles', cb: this._handleSwapTiles },\n    ];\n  }\n\n  _handleSwapTiles(data) {\n    const featuresData = data.swapTiles.map(tile => {\n      tile.tileId = tile.to.tileId;\n\n      return tile;\n    });\n\n    this._applyReelsModifier(featuresData, data.reels);\n  }\n}\n\nmodule.exports = SheepGoneWildSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SnowWhiteRocksSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SnowWildAndThe7FeaturesSlotParser extends DopSlotParser {\n\n    constructor(){\n        super();\n        // the changes from lockedTiles data in Dwarf6 feature are not needed\n        this.featureHandlers = this.featureHandlers.filter(handler => handler.name !== 'lockedTiles');\n    }\n\n    /**\n     * Handler for the game-specific win types\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n\n    _handleWins(data) {\n        if(data.game.freeSpins){\n            data.game.freeSpins.forEach((freeSpin) => {\n\n                if(freeSpin.dwarf === \"Dwarf1\" || freeSpin.dwarf === \"Dwarf4\" || freeSpin.dwarf === \"Dwarf7\"){\n                    this._handleDwarf(freeSpin, freeSpin.dwarf.toLocaleLowerCase());\n                }\n                else if(freeSpin.dwarf === \"Dwarf3\"){\n                    this._handleDwarf3(freeSpin);\n                }\n            });\n        }\n\n        super._handleWins(data);\n    }\n\n    _handleDwarf(data, dwarf) {\n        let wildSwaps = data[dwarf];\n\n        wildSwaps.forEach((wild) => {\n            data.reelsBuffer[wild.reel][1][wild.index] = wild.toTile;\n        });\n\n        this._initReels(data);\n    }\n\n    _handleDwarf3(data) {\n        for (let i = 0; i < 3; i++) {\n            let horizontalReel = [];\n\n            for (let j = 0; j < 5; j++) {\n                horizontalReel.push(data.reels[j][i]);\n            }\n\n            let horizontalBuffer = _.flatten([data.dwarf3[i].bufferLeft, horizontalReel, data.dwarf3[i].bufferRight]);\n            let distance = data.dwarf3[i].dir === 0 ? data.dwarf3[i].distance : -data.dwarf3[i].distance;\n            let startIndex = horizontalReel.length + distance;\n            let slice = horizontalBuffer.slice(startIndex, startIndex + horizontalReel.length);\n\n            for (let l = 0; l < 5; l++) {\n                data.reels[l][i] = slice[l];\n            }\n        }\n    }\n}\n\nmodule.exports = SnowWildAndThe7FeaturesSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SpinTownParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n *\n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n *\n * After-parse logic can be added in the method _afterParseOperations(data).\n *\n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n *\n * @class\n * @extends {DopSlotParser}\n */\nclass SpinTownParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'movingTiles', cb: this._handleMovingTiles },\n\t\t\t{ name: 'wildMultiplier', cb: this._handleWildMultiplier }\n\t\t];\n\t}\n\n\t_handleMovingTiles(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst movingTilesInsideReels = data[featName].filter((filterItem) => {\n\t\t\treturn (filterItem.to.reel >= 0) && (filterItem.to.reel < reels.length);\n\t\t});\n\n\t\tmovingTilesInsideReels.forEach((tile) => {\n\t\t\treels[tile.to.reel][tile.to.index] = tile.tileId;\n\t\t});\n\t}\n\n\t_handleWildMultiplier(data, featName) {\n\t\tconst reels = data.reels;\n\t\tconst wildMultiplierData = data[featName];\n\n\t\twildMultiplierData.forEach((tile) => {\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n}\n\nmodule.exports = SpinTownParser;\n","const DopSlotParser = require('../DopSlotParser');\nconst SCATTER_TILE = 11;\nconst EMPTY_FS_TILE = 12;\nconst ACTIVATED_SCATTER_TILE = 111;\n\n/**\n* StolenTreasuresSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass StolenTreasuresSlotParser extends DopSlotParser {\n  _initReels(data){\n    super._initReels(data);\n\n    if (data.spinMode !== 'FreeSpins') return;\n\n    this._replaceTiles(data, EMPTY_FS_TILE, 0);\n  }\n\n  _afterParseOperations(data) {\n    this._handleScatters(data.game || data);\n  }\n\n  _freeSpinsAfterParseOperations(data) {\n    this._handleScatters(data.game || data);\n  }\n\n  _handleScatters(data) {\n    if (!data.instantWin && data.spinMode !== 'FreeSpins') return;\n\n    this._replaceTiles(data, SCATTER_TILE, ACTIVATED_SCATTER_TILE);\n  }\n\n  _replaceTiles(data, fromId, toId) {\n    const reels = data.reels;\n\n    reels.forEach((reel, reelIndex) => reel.forEach((tileId, tileIndex) => {\n      if (tileId === fromId) data.reels[reelIndex][tileIndex] = toId;\n    }));\n  }\n}\n\nmodule.exports = StolenTreasuresSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SumoSpinsSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass SumoSpinsSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n    }\n\n    _handleFatTiles(data) {\n        // base DopSlotPanel uses data from fat tiles to update reels,\n        // in this game the reels buffer contains the correct tile information already\n        // so nothing to do\n    }\n}\n\nmodule.exports = SumoSpinsSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * SunFortuneParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass SunFortuneParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'fatMysterySwap',\n\t\t\tcb: this._handleFeature\n\t\t});\n\n\t\tthis.featureHandlers.unshift({\n\t\t\tname: 'rainingMystery',\n\t\t\tcb: this._handleFeature\n\t\t});\n\n\t}\n\n}\n\nmodule.exports = SunFortuneParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass TenElementsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * Handler for the 'Fat tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\t\tlet fatTileReplaceId = 11;\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = fatTileReplaceId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = TenElementsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* 10001NightsMegaWaysSlotParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\n  class TenThousandAndOneNightsMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = TenThousandAndOneNightsMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* 10001NightsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass TenThousandAndOneNightsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n\t}\n}\n\nmodule.exports = TenThousandAndOneNightsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass TheEqualizerSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.push({ name: 'movingWilds', cb: this._handleMovingWilds });\n    }\n\n    _handleMovingWilds(data, featureName) {\n        let reels = data.reels;\n        let fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n\n            for (let j = 0; j < tile.to.height; j++) {\n                reels[tile.to.reel][tile.to.index + j] = tile.tileId;\n            }\n\n        });\n    }\n\n}\n\nmodule.exports = TheEqualizerSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheGreatestTrainRobberySlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'cloningTiles', cb: this._handleCloningTiles });\n        this.featureHandlers.unshift({ name: 'mysteryTiles', cb: this._handleMysteryTiles });\n    }\n\n    _handleMysteryTiles(data) {\n        data.mysteryTiles.forEach((tiles) => {\n            this._applyReelsModifier(tiles, data.reels);\n        });\n    }\n\n    _handleCloningTiles(data) {\n        data.cloningTiles.forEach((tiles) => {\n            this._applyReelsModifier(tiles, data.reels);\n        });\n    }\n\n}\n\nmodule.exports = TheGreatestTrainRobberySlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheWildHatterSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'hatterLocks', cb: this._handleFeature },\n\t\t\t{ name: 'hatterSpins', cb: this._handleFeature },\n\t\t\t{ name: 'raogLocks', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tvar gameData = response.game;\n\n\t\tif (!gameData.hatterSwaps || !gameData.hatterSwaps.length) return;\n\n\t\tvar lastSwapId = gameData.hatterSwaps.pop();\n\n\t\t['hatterLocks', 'hatterSpins', 'raogLocks'].forEach(feature => {\n\t\t\tlet featureData = gameData[feature];\n\n\t\t\tif (!featureData) return;\n\n\t\t\tfeatureData.forEach((tiles, batchIndex) => {\n\t\t\t\ttiles.forEach((tile, tileIndex) => {\n\t\t\t\t\tif (tile.toTile === 11) return;\n\n\t\t\t\t\tfeatureData[batchIndex][tileIndex].toTile = lastSwapId;\n\t\t\t\t});\n\t\t\t});\n\t\t})\n\t}\n}\n\nmodule.exports = TheWildHatterSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TheWishMasterMegaWaysSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.unshift({ name: 'extraWilds', cb: this._handleFeature });\n    this.featureHandlers.unshift({ name: 'randomWilds', cb: this._handleFeature });\n    this.featureHandlers.unshift({ name: 'lockedReels', cb: this._handleFeature });\n  }\n}\n\nmodule.exports = TheWishMasterMegaWaysSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ThorsLightningSlotParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [\n\t\t\t{ name: 'randomTilesLava', cb: this._handleFeature },\n\t\t\t{ name: 'nudge', cb: this._handleMultiDirectionalNudge },\n\t\t\t{ name: 'lockedShields', cb: this._handleLockedShields },\n\t\t\t{ name: 'randomTiles', cb: this._handleFeature },\n\t\t];\n\t}\n\n\t_handleMultiDirectionalNudge(data) {\n\t\tdata.nudge.forEach(nudgeData => {\n\t\t\tnudgeData.forEach(nudge => {\n\t\t\t\tif (nudge.type === 'vertical') {\n\t\t\t\t\tthis._handleVerticalNudge(nudge, data);\n\t\t\t\t} else {\n\t\t\t\t\tthis._handleHorizontalNudge(nudge, data);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst buffer = data.reelsBuffer[nudge.index][1];\n\t\tconst verticalBuffer = nudge.bufferLeft.concat(buffer, nudge.bufferRight);\n\t\tconst startIndex = buffer.length + (nudge.dir === 0 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tlet horizontalReel = [];\n\n\t\tdata.reels.forEach(reel => {\n\t\t\thorizontalReel.push(reel[nudge.row]);\n\t\t});\n\n\t\tconst horizontalBuffer = nudge.bufferLeft.concat(horizontalReel, nudge.bufferRight);\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\t\tconst startIndex = horizontalReel.length + distance;\n\t\tconst endIndex = startIndex + horizontalReel.length;\n\t\tconst slice = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.row] = slice[index];\n\t\t});\n\t}\n\n\t_handleLockedShields(data) {\n\t\tdata.lockedShields.forEach(shield => {\n\t\t\tdata.reels[shield.reel][shield.index] = shield.tile;\n\t\t});\n\t}\n}\n\nmodule.exports = ThorsLightningSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ThorsVengeanceParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass ThorsVengeanceParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers = [\n\t\t\t{name: 'nudge', cb: this._handleMultiDirectionalNudge},\n\t\t\t{name: 'fatTiles', cb: this._handleFatTiles},\n\t\t\t{name: 'swapTiles', cb: this._handleFeature},\n\t\t\t{name: 'scattersRAOG', cb: this._handleFeature}\n\t\t]\n\t}\n\n\t_handleMultiDirectionalNudge(data, feauteName = 'nudge') {\n\t\tdata[feauteName].forEach(nudge => {\n\t\t\tif (nudge.type === 'horizontal') this._handleHorizontalNudge(nudge, data);\n\t\t\telse this._handleVerticalNudge(nudge, data);\n\t\t});\n\t}\n\n\t_handleVerticalNudge(nudge, data) {\n\t\tconst topBuffer = data.reelsBuffer[nudge.index][0];\n\t\tconst buffer = data.reels[nudge.index];\n\t\tconst bottomBuffer = data.reelsBuffer[nudge.index][2];\n\n\t\tconst verticalBuffer = _.flatten([topBuffer, buffer, bottomBuffer]);\n\n\t\tconst startIndex = buffer.length + (nudge.dir === 1 ? nudge.distance : -nudge.distance);\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tdata.reels[nudge.index] = verticalBuffer.slice(startIndex, endIndex);\n\t}\n\n\t_handleHorizontalNudge(nudge, data) {\n\t\tconst leftBuffer = nudge.bufferLeft;\n\t\tlet buffer = [];\n\t\tconst rightBuffer = nudge.bufferRight;\n\n\t\tdata.reels.forEach(reel => {\n\t\t\tbuffer.push(reel[nudge.index]);\n\t\t});\n\n\t\tconst horizontalBuffer = _.flatten([leftBuffer, buffer, rightBuffer]);\n\n\t\tconst distance = nudge.dir === 0 ? nudge.distance : -nudge.distance;\n\n\t\tconst startIndex = buffer.length + distance;\n\t\tconst endIndex = startIndex + buffer.length;\n\n\t\tconst newBuffer = horizontalBuffer.slice(startIndex, endIndex);\n\n\t\tdata.reels.forEach((reel, index) => {\n\t\t\treel[nudge.index] = newBuffer[index];\n\t\t});\n\t}\n}\n\nmodule.exports = ThorsVengeanceParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass ThreeKingdomsParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t_afterParseOperations(data) {\n\t\tlet reels = data.game.reels;\n\n        if(!reels) return;\n\n\t\tdata.game.reels = reels.map((reel) => reel.map((tile) => {\n\t\t\tif (tile === 7 || tile === 8 || tile === 9) { tile = 200; }\n\n\t\t\treturn tile;\n\t\t}));\n\t}\n}\n\nmodule.exports = ThreeKingdomsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass ThreeMusketeersSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n        this.linesWin = 0;\n\n        this.otherWins.bonus.push(\n            'wheelBonus',\n            'barBonus'\n        );\n\n        this.otherWins.instantWin.push('randomOffer');\n\n        this.featureHandlers.unshift({ name: 'porthosWilds', cb: this._handleRandomWilds });\n        this.featureHandlers.unshift({ name: 'aramisWilds', cb: this._handleRandomWilds });\n        this.featureHandlers.unshift({ name: 'athosWilds', cb: this._handleRandomWilds });\n    }\n\n    /**\n     * Handler for the game-specific 'Random Wilds' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * screen reels and every game feature\n     */\n    _handleRandomWilds(data){\n        let randomWildsData = [];\n\t    let porthosWilds = data.porthosWilds;\n\t    let aramisWilds = data.aramisWilds;\n\t    let athosWilds = data.athosWilds;\n\n\t    if(porthosWilds) randomWildsData = randomWildsData.concat(porthosWilds);\n        if(aramisWilds) randomWildsData = randomWildsData.concat(aramisWilds);\n        if(athosWilds) randomWildsData = randomWildsData.concat(athosWilds);\n\n        let reels = data.reels;\n\n        randomWildsData.forEach((tileArray) => {\n            tileArray.forEach((tile) => {\n                if (tile === undefined) return;\n                reels[tile.reel][tile.index] = tile.toTile;\n            });\n\n        });\n    }\n}\n\nmodule.exports = ThreeMusketeersSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TotemLightningPowerReelsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'chainLightning', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = TotemLightningPowerReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TotemicLightningParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TotemLightningParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\t\tthis.featureHandlers.unshift({ name: 'chainLightning', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = TotemLightningParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst FEATURES = {\n  FAT_TILES: 'fatTiles',\n  RANDOM_WILDS: 'randomWilds',\n  RANDOM_WAYS: 'randomWays',\n};\n\n/**\n* @classdesc TransylvaniaNightOfBloodSlotParser. Handles parsing game specific features.\n* @extends DopSlotParser\n* @class\n*/\nclass TransylvaniaNightOfBloodSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = [\n      { name: FEATURES.FAT_TILES, cb: this._handleFatTiles },\n      { name: FEATURES.RANDOM_WILDS, cb: this._handleFeature },\n      { name: FEATURES.RANDOM_WAYS, cb: this._handleMultipliers },\n    ];\n  }\n\n  /**\n   * @description Takes care of which multipliers in the JP screen are displayed and which are not.\n   * @override\n   */\n  _afterParseOperations(data) {\n    const gameData = data.game;\n    const jpTiles = gameData.jackpotTiles;\n    const lastSpinData = this._getLastSpinData(this.winDetails, gameData);\n\n    this.winDetails.jackpotWins.forEach(jp => {\n      this._handleMultipliers({\n        randomWays: lastSpinData[FEATURES.RANDOM_WAYS],\n        type: jp.type\n      }, FEATURES.RANDOM_WAYS);\n\n      this.winDetails.multipliers = this._removeMultipliers(jpTiles, jp.type);\n    });\n  }\n\n  _removeMultipliers(jpTiles, type) {\n    return this.winDetails.multipliers.filter(mplr => {\n      return !(jpTiles.some(jpTile => jpTile.reel === mplr.reel && jpTile.index === mplr.index) && type === mplr.type);\n    });\n  }\n}\n\nmodule.exports = TransylvaniaNightOfBloodSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass TreasureMinePowerReelsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'randomWilds', cb: this._handleFeature});\n    this.featureHandlers.push({ name: 'cloningTiles', cb: this._handleCloningTiles});\n  }\n\n  _handleCloningTiles(data, featureName) {\n    const feature = data[featureName];\n    const reels = data.reels;\n\n    feature.forEach(data => {\n      const { tileId, positions } = data;\n\n      if (!positions.length) return;\n\n      positions.forEach(pos => {\n        const { reel, index } = pos;\n\n        if (reels[reel] && reels[reel][index] !== 'undefined') {\n          reels[reel][index] = tileId;\n        }\n      });\n\n    });\n  }\n}\n\nmodule.exports = TreasureMinePowerReelsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * TreasureMineSlotParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass TreasureMineSlotParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.otherWins.bonus.push('caveBonus');\n\n        this.featureHandlers = this.featureHandlers.concat([\n            { name: 'cloningTile', cb: this._handleCloningTile},\n            { name: 'fatWild', cb: this._handleFatWild},\n        ]);\n    }\n\n    _handleCloningTile(data) {\n        let reels = data.reels;\n        let cloningTileData = data.cloningTile;\n        let toTileC = cloningTileData.toTile;\n\n        cloningTileData.clones.forEach((tile) => {\n            if (reels[tile.reel] && reels[tile.reel][tile.index]) { // it could be outside the reels\n                reels[tile.reel][tile.index] = toTileC;\n            }\n        });\n    }\n\n    _handleFatWild(data) {\n        let reels = data.reels;\n        let fatWild = data.fatWild[0];\n        let toTile = fatWild.tileId;\n\n        let currReel = fatWild.reel;\n        let currIndex = fatWild.targetPos;\n\n        let width = fatWild.width;\n        let height = fatWild.height;\n\n        _.times(width, function(i){\n            let reel = currReel + i;\n\n            _.times(height, function(j){\n                let index = currIndex + j;\n                reels[reel][index] = toTile;\n            },this);\n        },this);\n    }\n}\n\nmodule.exports = TreasureMineSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* TrillionaireParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass TrillionaireParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// this.featureHandlers = [\n\t\t//   { name: 'customFeatureKey', cb: this._handleCustomFeature }\n\t\t// ]\n\t\t// or\n\n\t\tthis.featureHandlers.push({ name: 'fatWilds', cb: this._handleFatTiles });\n\t}\n}\n\nmodule.exports = TrillionaireParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass TwentyFourHourGrandPrixSlotParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers = [{ name: 'fatTiles', cb: this._handleFatTiles }];\n\t}\n\n\t/**\n\t * Handler for the 'Fat tiles' feature\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @override 'targetPos' property is renamed as 'index' in game data\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.index + tile.height;\n\n\t\t\t\tfor (let j = tile.index; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = TwentyFourHourGrandPrixSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst PREFIX_ID = 100;\nconst FAT_TILE_ID = 14;\n\n/**\n* VaultCrackerParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass VaultCrackerParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @override\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.forEach((tile) => {\n\t\t\tif (tile.tileId === FAT_TILE_ID) return; // the fat tile is also a locked tile, and the fat tiles handler is more appropriate here.\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n\n\n\t/**\n\t * @override To handle fat tile bottom half. Another asset id is used for it.\n\t */\n\t_handleFatTiles(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst fatTilesData = data[featureName];\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tconst { reel, index, tileId } = tile;\n\t\t\tconst tileBottom = index + 1;\n\n\t\t\tif (reels[reel]) {\n\t\t\t\tif (reels[reel][index]) reels[reel][index] = tileId;\n\t\t\t\tif (reels[reel][tileBottom]) reels[reel][tileBottom] = PREFIX_ID + tileId;\n\t\t\t}\n\t\t});\n\t}\n\n}\n\nmodule.exports = VaultCrackerParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst TILE_ID = 13;\n\nclass VickyVenturaSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n    }\n\n    _applyScreenMask(data) {\n        super._applyScreenMask(data, TILE_ID);\n    }\n}\n\nmodule.exports = VickyVenturaSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ViralSpiralSlotParser extends DopSlotParser {\n\t/**\n\t * fixed an issue with tiles nudge when two kind of nudges are present (jackpotNudge and nudge)\n\t  @overrides\n\t */\n\t_nudgeJackpotTiles(lastSpinData, reels, data) {\n\t\tconst jackpotNudgeData = data.jackpotNudge || lastSpinData.jackpotNudge;\n\n\t\tif (!jackpotNudgeData) return;\n\n\t\t// const nudgeData = lastSpinData.nudge || [];\n\n\t\tjackpotNudgeData.forEach(jackpotNudge => {\n\t\t\t// it's unnecessary to combine the nudge distance with jackpotDistance, because the _handleNudge method handles that beforehand\n\t\t\t// const nudge = nudgeData.find(nudge => nudge.index === jackpotNudge.index);\n\t\t\t// const nudgeDistance = nudge ? (nudge.dir === 1 ? nudge.distance : -nudge.distance) : 0;\n\t\t\tconst jackpotNudgeDistance = jackpotNudge.dir === 1 ? jackpotNudge.distance : -jackpotNudge.distance;\n\t\t\t// const distance = jackpotNudgeDistance + nudgeDistance;\n\t\t\tconst distance = jackpotNudgeDistance;\n\t\t\tconst buffer = lastSpinData.reelsBuffer[jackpotNudge.index];\n\t\t\tconst flatten = _.flatten(buffer);\n\t\t\tconst startAt = buffer[0].length + distance;\n\t\t\tconst endAt = startAt + buffer[1].length;\n\n\t\t\treels[jackpotNudge.index] = flatten.slice(startAt, endAt);\n\t\t});\n\t}\n}\n\nmodule.exports = ViralSpiralSlotParser;","const DopSlotParser = require('../DopSlotParser');\nconst PREFIX_ID = 100;\n\nclass WarOfGodsSlotParser extends DopSlotParser {\n    /**\n     * @override To handle fat tile bottom half. Another asset id is used for it.\n     */\n    _handleFatTiles(data, featureName) {\n        const reels = data.reels;\n        const fatTilesData = data[featureName];\n\n        fatTilesData.forEach((tile) => {\n            const { reel, index, tileId } = tile;\n\n            if (reels[reel]) {\n                if (reels[reel][index]) reels[reel][index] = tileId;\n                if (reels[reel][index+1]) reels[reel][index+1] = PREFIX_ID + tileId;\n            }\n        });\n    }\n\n}\n\nmodule.exports = WarOfGodsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass WellOfWishesParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.featureHandlers.push({ name: 'swapTiles', cb: this._handleSwapTiles });\n\t}\n\n\t_handleSwapTiles(data) {\n\t\tdata.swapTiles.forEach(tile => {\n\t\t\ttile.toTile = tile.tileId;\n\t\t});\n\t\tthis._applyReelsModifier(data.swapTiles, data.reels);\n\t}\n}\n\nmodule.exports = WellOfWishesParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nconst EXPAND_TYPES = {\n  REEL: 'Reel',\n  ROW: 'Row',\n};\n\n/**\n* @class\n* @extends {DopSlotParser}\n*/\nclass WheelOfAmpParser extends DopSlotParser {\n    _applyScreenMask({ screenMask, wheelBonus, progress: { activeReels, activeRows }, reels }) {\n        const expandType = wheelBonus && wheelBonus.spins[0].type || { };\n        const visibleReelsCount = expandType === EXPAND_TYPES.REEL\n          ? activeReels + 1 // add + 1 to the activeReels so we can display the additional reel after expand\n          : activeReels;\n        const visibleRowsCount = expandType === EXPAND_TYPES.ROW\n          ? activeRows + 1 // add + 1 to the activeRows so we can display the additional row after expand\n          : activeRows;\n\n        _.each(screenMask, (reel, reelIndex) => {\n            _.each(reel, (tile, tileIndex) => {\n                const isVisible = reelIndex < visibleReelsCount && tileIndex < visibleRowsCount;\n\n                if (!isVisible) reels[reelIndex][tileIndex] = 0;\n            });\n        });\n    }\n}\n\nmodule.exports = WheelOfAmpParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildCircusParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({name: 'jester', cb: this._handleJesters});\n\t}\n\n\t/**\n\t * Handle Jester Wilds\n\t * @param {Object} data\n\t * @param {String} featureName\n\t * @private\n\t */\n\t_handleJesters(data, featureName) {\n\t\tconst reels = data.reels;\n\t\tconst featureData = data[featureName];\n\n\t\tfeatureData.forEach((item) => {\n\t\t\treels[item.reel][item.index] = item.tile;\n\t\t});\n\t}\n\n\t/**\n\t * Adds Other wins.\n\t * @param {Object} data\n\t * @param {String} type\n\t * @override\n\t * @private\n\t */\n\t_addOtherWins(data, type) {\n\n\t\tconst hasTrippleBonus = data.activator\n\t\t\t&& data.activator.features.indexOf('FlameBreathing') >= 0\n\t\t\t&& data.activator.features.indexOf('BearBalance') >= 0\n\t\t\t&& data.activator.features.indexOf('StrongMan') >= 0;\n\n\t\tif (hasTrippleBonus) {\n\n\t\t\tconst flameBreatherData = data.pickerBonus.find((item) => {\n\t\t\t\treturn item.name === 'FlameBreathing';\n\t\t\t});\n\t\t\tconst bearBalanceData = data.pickerBonus.find((item) => {\n\t\t\t\treturn item.name === 'BearBalance';\n\t\t\t});\n\n\t\t\tthis.winDetails.otherWins.push({type: 'bonus', amount: flameBreatherData.amount});\n\t\t\tthis.winDetails.otherWins.push({type: 'bonus', amount: bearBalanceData.amount});\n\t\t} else {\n\t\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\t\tthis.winDetails.otherWins.push({type: winType, amount: data.win[winName]});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Called before FS parsing.\n\t * @param {Object} data\n\t * @override\n\t * @private\n\t */\n\t_freeSpinsBeforeParseOperations(data) {\n\t\tObject.keys(this.otherWins).forEach((winType) => {\n\t\t\tthis.otherWins[winType].forEach((winName) => {\n\t\t\t\tif (data.win[winName]) {\n\t\t\t\t\tdata.otherWins.push({type: winType, amount: data.win[winName]});\n\t\t\t\t}\n\t\t\t});\n\t\t}, this);\n\t}\n\n\n}\n\nmodule.exports = WildCircusParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildElementsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.push({name: 'elementFatTiles', cb: this._handleFatTiles});\n\t\tthis.featureHandlers.push({name: 'swapFatTiles', cb: this._handleSwapFatTiles});\n\t}\n\n\t_handleSwapFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tvar featureData = data[featureName][0];\n\n\t\tfeatureData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = tile.tileId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = WildElementsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WildFightSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.cachedLockedTiles = [];\n  }\n\n  /**\n * Hook that is called before a free spin features are parsed\n * @override to cache lockedTiles data for the last free spin, because in response data is missing\n * @private\n * @param  {Object} data Spin data, contains\n * screen reels and every game feature for the spin\n */\n  _freeSpinsBeforeParseOperations(data) {\n    if (data.lockedTiles) this.cachedLockedTiles = [...this.cachedLockedTiles, ...this._cacheLockedTiles(data.lockedTiles)];\n    if (this.cachedLockedTiles.length) data.lockedTiles = this.cachedLockedTiles;\n\n    super._freeSpinsBeforeParseOperations(data);\n  }\n\n  _cacheLockedTiles(lockedTiles) {\n    return lockedTiles.filter(tile => !this.cachedLockedTiles.find(cachedTile => cachedTile.reel === tile.reel && cachedTile.index === tile.index));\n  }\n}\n\nmodule.exports = WildFightSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nconst FAT_TILE_ID = 8;\n/**\n* WildHotChilliReelsParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n* \n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n* \n* After-parse logic can be added in the method _afterParseOperations(data).\n* \n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n* \n* @class\n* @extends {DopSlotParser}\n*/\nclass WildHotChilliReelsParser extends DopSlotParser {\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.featureHandlers.forEach(handler => {\n\t\t\tif (handler.name === 'lockedTiles') handler.cb = this._handleLockedTiles;\n\t\t});\n\t}\n\n\t/**\n\t * Handler for the 'Locked Tiles' feature\n\t * @override\n\t */\n\t_handleLockedTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet lockedTilesData = data[featureName];\n\n\t\tlockedTilesData.forEach((tile) => {\n\t\t\tif (tile.tileId === FAT_TILE_ID) return; // the fat tile is also a locked tile, and the fat tiles handler is more appropriate here.\n\t\t\treels[tile.reel][tile.index] = tile.tileId;\n\t\t});\n\t}\n}\n\nmodule.exports = WildHotChilliReelsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n * WildNordsParser. Handles parsing game specific features.\n *\n * Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n * array. A feature handler object must have 'name' and 'cb' properties.\n * \n * Pre-parse logic can be added in the method _beforeParseOperations(data).\n * \n * After-parse logic can be added in the method _afterParseOperations(data).\n * \n * These methods are empty by default.\n *\n * Pre-parse logic in the free spins handler can be added in the method\n * _freeSpinsBeforeParseOperations(spinData).\n *\n * After-parse logic in the free spins handler can be added in the method\n * _freeSpinsAfterParseOperations(spinData).\n *\n * These methods are also empty by default.\n * \n * @class\n * @extends {DopSlotParser}\n */\nclass WildNordsParser extends DopSlotParser {\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.featureHandlers.unshift({ name: 'wolfBeast', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'eagleBeast', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'bearBeast', cb: this._handleFeature });\n\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesWolf', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesEagle', cb: this._handleFeature });\n\t\tthis.featureHandlers.unshift({ name: 'swapTilesBear', cb: this._handleFeature });\n\t}\n\n}\n\nmodule.exports = WildNordsParser;\n","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* JingleWaysMegaWaysParser. Handles parsing game specific features.\n*\n* Append/prepend or overwrite game specific feature handlers with the 'featureHandlers'\n* array. A feature handler object must have 'name' and 'cb' properties.\n*\n* Pre-parse logic can be added in the method _beforeParseOperations(data).\n*\n* After-parse logic can be added in the method _afterParseOperations(data).\n*\n* These methods are empty by default.\n*\n* Pre-parse logic in the free spins handler can be added in the method\n* _freeSpinsBeforeParseOperations(spinData).\n*\n* After-parse logic in the free spins handler can be added in the method\n* _freeSpinsAfterParseOperations(spinData).\n*\n* These methods are also empty by default.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass WildTundraSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers = this.featureHandlers.filter(({ name }) => name !== 'fatTiles');\n    this.featureHandlers.push({name: 'fatTilesSwap', cb: this._handleFeature});\n  }\n}\n\nmodule.exports = WildTundraSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass WildWildChestParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t/** @type {Number} Max amount of chests */\n\t\tthis.maxChests = 5;\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t\tthis.featureHandlers.push({ name: 'nudgeFatTiles', cb: this._handleNudgeFatTiles });\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tthis.featureHandlers.push({ name: `lockedTiles_${i}`, cb: this._handleFeature });\n\t\t}\n\n\t}\n\n\t_beforeParseOperations(response) {\n\t\tvar respins = [];\n\t\tvar gameData = response.game;\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tvar respinId = `respin_${i}`;\n\t\t\tvar lockedTilesId = `lockedTiles_${i}`;\n\n\t\t\tif (!gameData[respinId]) continue;\n\n\t\t\tif (gameData[lockedTilesId]) {\n\t\t\t\tgameData[respinId][0][lockedTilesId] = gameData[lockedTilesId];\n\t\t\t}\n\n\t\t\trespins.push(...gameData[respinId]);\n\t\t}\n\n\t\tgameData.respin = respins.length ? respins : [];\n\t}\n\n\t/**\n\t* Handler for the 'Nudge Fat Tiles' feature\n\t* @description \"In this game only fat tiles are nudged in FS, bringing the whole tile to fit the reel\"\n\t* @private\n\t* @param {Object} data Game data, contains\n\t* screen reels and every game feature\n\t* @param {Array} data.nudgeFatTiles Array of nudge modifications\n\t* @param {Array} data.reelsBuffer reels buffer array\n\t* @param {Array} data.reels Screen reels state\n\t* @param {Number} data.nudgeFatTiles.distance Nudge distance in tiles\n\t*/\n\t_handleNudgeFatTiles(data) {\n\t\tconst nudgeFatTilesData = data.nudgeFatTiles;\n\t\tconst fatTilesData = data.fatTiles;\n\t\tconst reels = data.reels;\n\n\t\tnudgeFatTilesData.forEach((nudge) => {\n\t\t\tconst buffer = data.reelsBuffer[nudge.index];\n\t\t\tconst distance = nudge.dir === 1 ? - nudge.distance : nudge.distance;\n\t\t\tconst fatTile = fatTilesData.find((fatTile) => {\n\t\t\t\treturn fatTile.targetPos + distance === 0;\n\t\t\t});\n\n\t\t\tif (!fatTile) return;\n\n\t\t\treels[nudge.index] = _.times(buffer[1].length, () => {return fatTile.tileId;});\n\t\t});\n\t}\n\n\t/**\n\t * win details logic\n\t * @private\n\t * @param  {Object} data Game data, contains\n\t * screen reels and every game feature\n\t * @param {Object} data.win Spin result winnings info\n\t * @param {Array} data.winLines Spin result win lines\n\t * @param {Object} data.winLines.pickerBonus Picker bonus win info\n\t * @param {Object} data.winLines.pathBonus Path bonus win info\n\t * @param {Object} data.winLines.pathPickerBonus Path picker bonus win info\n\t * @param {Object} data.winLines.multiPickerBonus Multi picker bonus win info\n\t */\n\t_handleWins(data) {\n\t\tsuper._handleWins(data);\n\t\tconst winDetails = this.winDetails;\n\n\t\tfor (let i = 1; i <= this.maxChests; i++) {\n\t\t\tif (data.game.win[`lines_swapReels_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'modifierWin', amount: data.game.win[`lines_swapReels_${i}`] });\n\t\t\t}\n\n\t\t\tif (data.game.win[`lines_randomTiles_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'modifierWin', amount: data.game.win[`lines_randomTiles_${i}`] });\n\t\t\t}\n\n\t\t\tif(data.game.win[`instantWin_${i}`]) {\n\t\t\t\twinDetails.otherWins.push({ type: 'instantWin', amount: data.game.win[`instantWin_${i}`] });\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = WildWildChestParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WinEscalatorParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers.unshift({ name: 'movingTiles', cb: this._handleMovingTiles });\n    }\n\n    _handleMovingTiles(data, featureName) {\n        let reels = data.reels;\n        let movingTiles = data[featureName];\n\n        movingTiles.forEach((tile) => {\n            if (reels[tile.to.reel][tile.to.index]) {\n                reels[tile.to.reel][tile.to.index] = tile.toTile;\n            }\n        });\n    }\n}\n\nmodule.exports = WinEscalatorParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WingsOfRaSlotParser extends DopSlotParser {\n\n    constructor() {\n        super();\n\n        this.featureHandlers = [\n            { name: 'mysterySymbols', cb: this._handleMysterySymbols },\n        ];\n    }\n\n    /**\n     * Handler for the 'Mystery Symbols' feature\n     * @private\n     * @param  {Object} data Game data, contains\n     * @override because response data is nested\n     * screen reels and every game feature\n     */\n    _handleMysterySymbols(data) {\n        let reels = data.reels;\n        let mysterySymbolsData = data.mysterySymbols;\n        let toTile = mysterySymbolsData.toTile;\n\n        mysterySymbolsData.tiles.forEach(batchOfTiles => {\n            batchOfTiles.forEach(tile => reels[tile.reel][tile.index] = toTile);\n        });\n    }\n}\n\nmodule.exports = WingsOfRaSlotParser;\n","const DopSlotParser = require('../DopSlotParser');\n\nclass WinterWondersParser extends DopSlotParser {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// Add or overwrite game specific feature handlers to this.featureHandlers\n\t\t// A feature handler object must have 'name' and 'cb' properties\n\t\t// {name: 'swapReels', cb: this._handleSwapReels}\n\t}\n\n\t/**\n\t* Handler for the 'Fat tiles' feature\n\t* @private\n\t* @param  {Object} data Game data, contains\n\t* screen reels and every game feature\n\t*/\n\t_handleFatTiles(data, featureName) {\n\t\tlet reels = data.reels;\n\t\tlet fatTilesData = data[featureName];\n\t\tlet fatTileReplaceId = 8;\n\n\t\tfatTilesData.forEach((tile) => {\n\t\t\tlet tileRight = tile.reel + tile.width;\n\n\t\t\tfor (let i = tile.reel; i < tileRight; i++) {\n\t\t\t\tlet tileBottom = tile.targetPos + tile.height;\n\n\t\t\t\tfor (let j = tile.targetPos; j < tileBottom; j++) {\n\t\t\t\t\tif (reels[i] && reels[i][j]) {\n\t\t\t\t\t\treels[i][j] = fatTileReplaceId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = WinterWondersParser;\n","const DopSlotParser = require(\"../DopSlotParser\");\n\nclass ZaidasFortuneSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature});\n  }\n}\n\nmodule.exports = ZaidasFortuneSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\nclass ZeusLightningPowerReelsSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n\n    this.featureHandlers.push({ name: 'expandReels', cb: this._expandReels });\n  }\n  _expandReels(data) {\n    const { reels } = data;\n    const { toTile, reels: expandedReels } = data.expandReels;\n    const tilesCount = reels[0].length;\n\n    expandedReels.forEach(reel => {\n      for (let index = 0; index < tilesCount; index++) {\n        if(reels[reel][index] !== 10) {\n          reels[reel][index] = toTile;\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = ZeusLightningPowerReelsSlotParser;","const DopSlotParser = require('../DopSlotParser');\n\n/**\n* ZillardKingSlotParser. Handles parsing game specific features.\n*\n* @class\n* @extends {DopSlotParser}\n*/\nclass ZillardKingSlotParser extends DopSlotParser {\n  constructor() {\n    super();\n    this.featureHandlers.push({name: 'randomWilds', cb: this._handleFeature});\n  }\n\n  _applyScreenMask(data) {\n    if (!data) return;\n\n    const { progress } = data;\n\n    if (progress.unlocked) return;\n\n    super._applyScreenMask(data)\n  }\n}\n\nmodule.exports = ZillardKingSlotParser;","const DefaultParser = require('../../DefaultParser');\nconst gameLines = require('../../../config/NSGLines');\nconst Language = require('../../../utils/Language');\n\n/**\n *\tNSGParser. Handles parsing spin result data\n *\n * @class\n */\nclass NSGParser  extends DefaultParser{\n    constructor(){\n        super();\n        this.gameLines = gameLines;\n        this.lang = Language._instance._code;\n        this.freespin_id = 0;\n    }\n\n    setGameConfig(Config){\n        this._gameConfig = Config;\n        return this;\n    }\n\n    getGameConfig(){\n        return this._gameConfig;\n    }\n    \n    _Manager(){\n        let _response;\n        let _config = this.getGameConfig();\n        if(typeof _config.Reels.Manager == 'function'){\n            return _config.Reels.Manager(_config);\n        }\n        return {\n            getTile:function(x,y,fs=false){\n                let ret = false;\n                let json = this.getResponse();\n                \n                if (json.reels) {\n                    if(typeof _config.Reels.ways == 'undefined' || (fs && _config.Reels.reelTypeFS == 'collector')){\n                        if(_config.Reels.reelType == 'collector' || _config.Reels.reelType == 'multi' || (fs && _config.Reels.reelTypeFS == 'collector')){\n                            if(_config.Reels.flip){\n                                let sc = (json.reels[x].length / (_config.Reels.screens || 3));\n                                ret = json.reels[x][json.reels[x].length - 1 - y + sc];\n                            }else{\n                                ret = json.reels[x][y];\n                            }\n                        }else{\n                            ret = json.reels[y].toString()[x];\n                        }\n                    }else{\n                        if(_config.Reels.Y2X){\n                            ret = json.reels[y][x];\n                        }else{\n                            ret = json.reels[x][y];\n                        }\n                    }\n                }\n                \n                return ret;\n            },\n            \n            setResponse:function(json){\n              _response = json;\n              return this;\n            },\n            \n            setGameData:function(data){\n              $.extend((_response.result.game.nsp || _response.result.game.mwg || {}),data);\n            },\n            \n            getResponse:function(raw){\n              try{\n                return (raw?_response:_response.result.game.nsp || _response.result.game.mwg) || {};\n              }catch(e){\n                return {};\n              }\n            },\n            \n            getLines:function(){\n                try{\n                    let response = this.getResponse();\n                    let ways = (response.lines || response.multiWays);\n                    if(!ways && response.win && response.win.ways){\n                        ways = response.win.ways;\n                    }\n                    return ways;\n                }catch(e){\n                    return [];\n                }\n            }\n        }\n    }\n    \n    _getWinLines(stake, reelsManager, multiplier=1){\n        let ret = [];\n        let lines = reelsManager.getLines();\n        let isLinesGame = !!this._gameConfig.Reels.lineIds;\n        for(let key in lines){\n            let line = lines[key];\n            let highlighTiles = [];\n            let cells = line.cells;\n            let winningMul = line.hasOwnProperty('multiplier') ? 1 : multiplier;\n            let amount = (line.winning?line.winning * winningMul:false) || this._calcLine((line.winSingleMul || line.winMul) * multiplier,stake);\n\n            if(isLinesGame){\n                if(line.lineCells){\n                    for(let i=0;i<line.cells.length;i++){\n                        highlighTiles.push(line.lineCells.indexOf(i) > -1?1:0);\n                    }\n                }else{\n                    for(let i=0;i<line.cells.length;i++){\n                        line.winStart = line.winStart || 0;\n                        highlighTiles.push((i>= line.winStart && i<=line.winStart*1+line.winCount*1)?1:0);\n                    }\n                }\n\n                if(typeof cells == 'object'){\n                    if(typeof cells[0] == 'object'){\n                        cells = line.line.join('');\n                    }else{\n                        cells = cells.join('');\n                    }\n                }\n                \n                ret.push({\n                    index: this._gameConfig.Reels.lineIds[cells] - 1,\n                    type: (this._gameConfig.Reels.lineIds[cells]||cells),\n                    tiles: highlighTiles.join(','),\n                    symbols: (Array.isArray(line.hit) ? line.hit : line.hit.split('')).join(','),\n                    start: line.winStart,\n                    length: line.winCount,\n                    amount: amount\n                });\n            }else{\n                let injectReelPosition = this.getGameConfig().Reels.injectReelPosition || null;\n                let injectReel = this.getGameConfig().Reels.injectReel || [];\n                let historyReelTiles = [];\n                let reels = reelsManager.getResponse().reels;\n                if(injectReelPosition == 'top'){\n                    for(let x in cells){\n                        historyReelTiles[x] = [];\n                        let sy = reels[x].length / 3;\n                        for(let y in cells[x]){\n                            if(y<0){\n                                y=0;\n                            }else{\n                                if(injectReel.indexOf(Number(x)) > -1){\n                                    y = sy-y+1;\n                                }else{\n                                    y = sy-y;\n                                }\n                            }\n                            historyReelTiles[x].push(y);\n                        }\n                    }\n                }else{\n                    for(let x in cells){\n                        let sy = reels[x].length / (this._gameConfig.Reels.Y2X ? 1 : (this._gameConfig.Reels.screens || 3));\n                        historyReelTiles[x] = [];\n                        for(let y in cells[x]){\n                            if(this._gameConfig.Reels.screens  == 2){\n                                historyReelTiles[x].push(y-sy);\n                                continue;\n                            }\n                            historyReelTiles[x].push(sy-y);\n                        }\n                    }\n                }\n                \n                highlighTiles = JSON.stringify(historyReelTiles);\n                ret.push({\n                    index: key,\n                    type: key,\n                    ways: line.ways,\n                    tiles: highlighTiles,\n                    length: cells.length,\n                    amount: amount\n                });\n            }\n\n            \n        }\n\n        ret.sort(function(a,b){\n            if(a.type==b.type){\n                return 0;\n            }\n            return a.type < b.type?-1:1;\n        });\n        \n        return ret;\n    }\n    \n    _calcLine(mul,stake){\n        return stake*(mul/Object.keys(this._gameConfig.Reels.lineIds).length);\n    }\n\n    _convertCollectorToReels(collectorReels){\n        let reels = [];\n        for(let i=0;i<this._gameConfig.Reels.cols;i++){\n            reels.push([]);\n            for(let j=0;j<this._gameConfig.Reels.rows;j++){\n                reels[i].push('');\n            }\n        }\n        for(let reel_id in collectorReels){\n            let tiles = collectorReels[reel_id];\n            let x = reel_id % this._gameConfig.Reels.cols;\n            let y = Math.floor(reel_id / this._gameConfig.Reels.rows);\n            reels[x][y] = String(tiles[1]);\n        }\n        return reels;\n    }\n    \n    _getReels(manager, gameType = 'main'){\n        let reels = [];\n        let json = {};\n        let ReelsManager = (manager || this.ReelsManager);\n        let isCollector = this._gameConfig.Reels.reelType == 'collector';\n        if(gameType == 'FS'){\n            isCollector = isCollector || this._gameConfig.Reels.reelTypeFS == 'collector'\n        }\n        try{\n            json = ReelsManager.getResponse();\n        }catch(e){\n            return [];\n        }\n\n        if(isCollector){\n            json.reels = this._convertCollectorToReels(json.reels);\n            ReelsManager.setGameData({reels: json.reels});\n        }\n\n        if(!json.hasOwnProperty('reels')) return [];\n        \n        let reel = [];\n        \n        for(let i=0;i<this._gameConfig.Reels.cols;i++){\n            reel = [];\n            let rows = 0;\n            if(this._gameConfig.Reels.ways || this._gameConfig.Reels.reelType == 'multi'){\n                if(this._gameConfig.Reels.Y2X){\n                    rows = json.reels[i].length;\n                }else{\n                    rows = json.reels[i].length / (this._gameConfig.Reels.screens || 3);\n                }\n            }else{\n                if(this._gameConfig.Reels.Y2X){\n                    rows = json.reels[i].length;\n                }else{\n                    rows = json.reels.length / 3;\n                }\n            }\n\n            if(isCollector){\n                rows = json.reels[i].length;\n            }\n            if(this._gameConfig.Reels.injectReelPosition == 'top'){\n                if(json.injectReel && json.injectReel.hasOwnProperty(i)){\n                    reel.push(json.injectReel[i][0]);\n                }\n            }\n            for(let j=0;j<rows;j++){\n                let x = i;\n                let y, c1, c2;\n                \n                if(isCollector){\n                    y = j;\n                    c1 = y;\n                    c2 = x;\n                }else\n                if(this._gameConfig.Reels.reelType == 'multi'){\n                    y = (rows - j + rows - 1);\n                    c1 = x;\n                    c2 = y;\n                }else\n                if(typeof this._gameConfig.Reels.ways == 'undefined'){\n                    y = Math.abs(this._gameConfig.Reels.SCREEN_INDEX - j);\n                    c1 = y;\n                    c2 = x;\n                }else{\n                    y = (rows - j + rows - 1);\n                    c1 = y;\n                    c2 = x;\n                }\n\n                let overlayTile = '';\n                let tile = '';\n                \n                try{\n                    let t = json.randomWildOverlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n                \n                try{\n                    let t = json.mysteryOverlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.randomSymbolsOverlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.lockedSymbolsOverlay[c1][c2]\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.overlay[c1][c2];\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                try{\n                    let t = json.longTilesOverlay[c1][c2] != ' ' ? json.longTilesOverlay[c1][c2]/*+'3'*/ : overlayTile;\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n                \n                try{\n                    let t = json.fatTileOverlay[c1][c2] != ' ' ? json.fatTileOverlay[c1][c2]/*+'3x3'*/ : overlayTile;\n                    if(!t || typeof t == undefined) throw 0;\n                    overlayTile = t;\n                }catch(e){}\n\n                if(!overlayTile.match(/[a-z0-9]+/i) && json.flipCoin && json.flipCoin.symbol){\n                    overlayTile = ReelsManager.getTile(x,y);\n                    if(overlayTile == json.flipCoin.symbol){\n                        overlayTile = json.flipCoin.flipSymbol\n                    }\n                }\n\n                try{\n                    let c = json.reelsCashBefore[x].length;\n                    overlayTile = json.reelsCashBefore[x][(y-c)];\n                    if(overlayTile){\n                        overlayTile = 'W';\n                    }\n                }catch(e){}\n                \n                if (overlayTile && overlayTile.match(/[a-z0-9]+/i)) {\n                    tile = overlayTile;\n                }else{\n                    tile = ReelsManager.getTile(x,y,gameType == 'FS');\n                }\n\n                if(gameType != 'main' && this._gameConfig.Reels.remapBonusSymbols){\n                    tile = this._gameConfig.Reels.remapBonusSymbols[tile] || tile;\n                }\n\n                if(this._gameConfig.Reels.tileParse){\n                    tile = this._gameConfig.Reels.tileParse(tile);\n                }\n\n                reel.push(tile);\n            }\n            if(this._gameConfig.Reels.injectReelPosition == 'bottom'){\n                if(json.injectReel && json.injectReel.hasOwnProperty(i)){\n                    reel.push(json.injectReel[i][0]);\n                }\n            }\n            reels.push(reel);\n        }\n        \n        return reels;\n    }\n    \n    _getMultiplierBonus(scope){\n        let win = 0;\n        let json = scope || this.ReelsManager.getResponse();\n        \n        if(json.multiplier && json.multiplier.totalWinning){\n            win = json.multiplier.totalWinning;\n        }else if(json.instantWin && json.instantWin.total){\n            win = json.instantWin.total;\n        }\n        \n        return win*1;\n    }\n    \n    _getFreeSpins(spins){\n        let ret = [];\n\n        if (spins) {\n            let index = 0;\n            let spinsLen = spins.length;\n            for(let key in spins){\n                let fs = spins[key];\n                let winning = Number(fs.winning || 0);\n                if(fs.hasOwnProperty('win') && fs.win.winning){\n                    winning = fs.win.winning;\n                }\n                let spin = {winDetails:{}};\n                let ReelsManager = this._Manager();\n                if(this.isMWG){\n                    ReelsManager.setResponse({ success: 0, result: {game:{mwg:{}}} });\n                }else{\n                    ReelsManager.setResponse({ success: 0, result: {game:{nsp:{}}} });\n                }\n                ReelsManager.setGameData(fs);\n                \n                spin.type = ++index;\n                \n                let otherWins = this._getOtherWins(fs, key < (spinsLen-1));\n\n                let multiplier = Number.isInteger(fs.multiplier) ? fs.multiplier:1;\n                spin.winLines = this._getWinLines(this.stake, ReelsManager, multiplier);\n                spin.amount = winning*1 + otherWins.win*1;\n                spin.reels = this._getReels(ReelsManager, 'FS');\n                spin.respins = this._getFreeSpins((fs.reactions || []));\n                spin.otherWins = otherWins.types;\n                spin.type = ++this.freespin_id;\n\n                ret.push(spin);\n            }\n        }\n        \n        return ret;\n    }\n    \n    _getOtherWins(game, accumulate = false){\n        let ret = [];\n        let win = 0;\n        let bonusType = ['ElephantTreasure','ChineseWilds'].indexOf(this.gameId) > -1 ? 'instantWin' : 'multiplier';\n        let g = game.nsp || game.mwg || game || {};\n        let multiplierBonusWin = this._getMultiplierBonus(g);\n        \n        if(multiplierBonusWin){\n            win += multiplierBonusWin*1;\n            ret.push({type: bonusType,amount:multiplierBonusWin});\n        }\n\n        if(game.win && game.win.limitedWin){\n            win += game.win.limitedWin*1;\n            ret.push({type:'limitedWin',amount:game.win.limitedWin});\n        }\n\n        let expand = g.expandTileOverlayWin;\n        if(expand && +expand.winning > 0){\n            win += expand.winning*1;\n            ret.push({type:'modifierWin',amount:expand.winning});\n        }else if(g.expand && g.expand.length){\n            g.expand.forEach(expand=>{\n                win += expand.win.winning*1;\n                ret.push({type:'modifierWin',amount:expand.win.winning});\n            });\n        }\n\n        if(g.hasOwnProperty('tilesMod') && !accumulate){\n            g.tilesMod.forEach(c =>{\n                if(c.action!='ways' && c.value*1 > 0){\n                    win += c.value*this.stake;\n                    ret.push({type:'modifierWin',amount:(c.value*this.stake)});\n                }\n            });\n        }\n\n        if(g.cashCollector){\n            g.cashCollector.forEach(c =>{\n                win += c.win.winning*1;\n                ret.push({type:'modifierWin',amount:c.win.winning});\n            });\n        }\n        \n        return {types: ret, win: win};\n    }\n    \n    _getJackpotsWin(jackpots){\n        var ret = [];\n        if(jackpots && jackpots.pots){\n            jackpots.pots.forEach(function(pot){\n                if (pot.win > 0) {\n                    ret.push({ type: pot.id, amount: pot.win });\n                }\n            });\n        }\n\n        return ret;\n    }\n\n\tparse(gameId, serverData) {\n\t\tif (!this._gameConfig) {\n\t\t\tconsole.warn(`No game installed: ${gameId}`);\n\t\t\treturn;\n        }\n        this.gameId = gameId;\n        let res = {};\n\t\tlet transactions;\n        if(serverData.responses){\n            res = serverData.responses[0];\n            transactions = serverData.transactions;\n        }else\n        if(serverData.result.history.responses){\n            res = serverData.result.history.responses[0];\n\t\t    transactions = serverData.result.history.transactions;\n        }else{\n            res = serverData.result.history;\n            transactions = serverData.result.history.transactions;\n        }\n\n\t\tlet json = { success: 0, result: res };\n\t\tlet game = json.result.game;\n        let user = json.result.user;\n        let gameResult = json.result.game.nsp || json.result.game.mwg;\n        \n        this.stake = game.win.stake || game.stake;\n        this.isMWG = !!json.result.game.mwg;\n\t\tthis.ReelsManager = this._Manager();\n\t\tthis.ReelsManager.setResponse(json);\n\t\tthis.ReelsManager.setGameData(gameResult);\n\n        let jackpots = this.ReelsManager.getResponse(true).result.jackpots;\n\t\tlet totalWin = Number(game.win.total)+Number((jackpots||{win:0}).win);\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\ttotalBet: Number(this.stake),\n\t\t\t\ttotalWin,\n                featureBuyCost: gameResult.featureBuy ? gameResult.featureBuy.price*this.stake : undefined,\n\t\t\t\tfeatureBuyName: gameResult.featureBuy ? gameResult.featureBuy.name : undefined,\n\t\t\t\tbalance: {\n                    cash: user.balance.cash,\n                    freeBets: user.balance.freeBets\n                }\n\t\t\t},\n\t\t\treels: this._getReels(),\n\t\t};\n\n        let multiplier = Number.isInteger(this.ReelsManager.getResponse().multiplier) ? this.ReelsManager.getResponse().multiplier:1;\n        let winLines = this._getWinLines(this.stake, this.ReelsManager, multiplier);\n        let totalWinLines = 0;\n        let win_correction = Math.round(game.win.total * 100 + (jackpots?jackpots.win*100:0)) - Math.round(totalWin * 100);\n        let response = this.ReelsManager.getResponse();\n        let collector = {spins:[]};\n\n        if(this._gameConfig.Reels.reelType == 'collector' || this._gameConfig.Reels.reelTypeFS == 'collector'){\n            if(response.collector && response.collector.spins){\n                response.collector.spins.forEach(spin => {\n                    for(let i=0, l=this._gameConfig.Reels.rows*this._gameConfig.Reels.cols;i<l;i++){\n                        if( ! spin.reels[i]){\n                            spin.reels[i] = response.collector.screen[i];\n                        }\n                    }\n                });\n                collector = response.collector;\n            }\n        }\n        \n\t\t$.extend(history, { winDetails: {\n            winLines: winLines,\n            initialLinesWin: totalWinLines,\n\t\t\tfreeSpins: this._getFreeSpins((response.freeSpins || response.respins || collector || {spins:[]}).spins),\n            respins: this._getFreeSpins((response.reactions || [])),\n\t\t\totherWins: this._getOtherWins(json.result.game).types,\n\t\t\tjackpotWins: this._getJackpotsWin(jackpots),\n\t\t\ttotalWinCorrection: win_correction ? win_correction/100: null,\n\t\t\ttotalWin: parseFloat(totalWin).toFixed(2),\n\t\t},\n\t\t});\n\n\t\treturn history;\n\t}\n}\n\nmodule.exports = NSGParser;","const NSGSlotParser = require('./NSGSlotParser');\nconst LeprechaunsMagicSlotParser = require('./games/LeprechaunsMagicSlotParser');\nconst GoldenLampsSlotParser = require('./games/GoldenLampsSlotParser');\nconst GoldenToadSlotParser = require('./games/GoldenToadSlotParser');\nconst NeptunesRichesSlotParser = require('./games/NeptunesRichesSlotParser');\nconst ChineseWildsSlotParser = require('./games/ChineseWildsSlotParser');\nconst ElephantTreasureSlotParser = require('./games/ElephantTreasureSlotParser');\nconst RedHotSlotSlotParser = require('./games/RedHotSlotSlotParser');\nconst MacauRacingSlotParser = require('./games/MacauRacingSlotParser');\nconst LuckyCarnivalSlotParser = require('./games/LuckyCarnivalSlotParser');\nconst AsianFortuneSlotParser = require('./games/AsianFortuneSlotParser');\nconst DragonPearlSlotParser = require('./games/DragonPearlSlotParser');\nconst AliBabasLuckSlotParser = require('./games/AliBabasLuckSlotParser');\nconst CasinoSpinSlotParser = require('./games/CasinoSpinSlotParser');\nconst LeprechaunsMagicMegawaysSlotParser = require('./games/LeprechaunsMagicMegawaysSlotParser');\nconst AliBabasLuckMegawaysSlotParser = require('./games/AliBabasLuckMegawaysSlotParser');\nconst AliBabasLuckPowerReelsSlotParser = require('./games/AliBabasLuckPowerReelsSlotParser');\nconst LeprechaunsMagicPowerReelsSlotParser = require('./games/LeprechaunsMagicPowerReelsSlotParser');\nconst CobraQueenSlotParser = require('./games/CobraQueenSlotParser');\nconst DreamDestinySlotParser = require('./games/DreamDestinySlotParser');\nconst AmazonIslandMegaWaysSlotParser = require('./games/AmazonIslandMegaWaysSlotParser');\nconst EpicTreasureSlotParser = require('./games/EpicTreasureSlotParser');\nconst EightysSpinsSlotParser = require('./games/EightysSpinsSlotParser');\nconst WantedWildzSlotParser = require('./games/WantedWildzSlotParser');\nconst CottonGangAffairSlotParser = require('./games/CottonGangAffairSlotParser');\nconst DesertLegendsSpinsSlotParser = require('./games/DesertLegendsSpinsSlotParser');\nconst JellyMULTIHOPSSlotParser = require('./games/JellyMULTIHOPSSlotParser');\nconst BigBassAdventureSlotParser = require('./games/BigBassAdventureSlotParser');\n\n/**\n * NSGSlotParserFactory.\n *\n * @class\n */\nclass NSGSlotParserFactory {\n\tconstructor() {\n\t\t/** @type {Object} Game specific parsers */\n\t\tthis.parsers = {\n\t\t\tLeprechaunsMagic: LeprechaunsMagicSlotParser,\n\t\t\tGoldenLamps: GoldenLampsSlotParser,\n            GoldenToad: GoldenToadSlotParser,\n            NeptunesRiches: NeptunesRichesSlotParser,\n            ChineseWilds: ChineseWildsSlotParser,\n            ElephantTreasure: ElephantTreasureSlotParser,\n            RedHotSlot: RedHotSlotSlotParser,\n            MacauRacing: MacauRacingSlotParser,\n\t\t\tLuckyCarnival: LuckyCarnivalSlotParser,\n\t\t\tAsianFortune: AsianFortuneSlotParser,\n\t\t\tDragonPearl: DragonPearlSlotParser,\n\t\t\tAliBabasLuck: AliBabasLuckSlotParser,\n\t\t\tCasinoSpin: CasinoSpinSlotParser,\n\t\t\tLeprechaunsMagicMegaways: LeprechaunsMagicMegawaysSlotParser,\n\t\t\tLeprechaunsMagicPowerReels: LeprechaunsMagicPowerReelsSlotParser,\n\t\t\tAliBabasLuckMegaways: AliBabasLuckMegawaysSlotParser,\n\t\t\tAliBabasLuckPowerReels: AliBabasLuckPowerReelsSlotParser,\n\t\t\tCobraQueen: CobraQueenSlotParser,\n\t\t\tDreamDestiny: DreamDestinySlotParser,\n\t\t\tAmazonIslandMegaWays: AmazonIslandMegaWaysSlotParser,\n\t\t\tEpicTreasure: EpicTreasureSlotParser,\n\t\t\t'80sSpins': EightysSpinsSlotParser,\n\t\t\tWantedWildz: WantedWildzSlotParser,\n\t\t\tCottonGangAffair: CottonGangAffairSlotParser,\n\t\t\tDesertLegendsSpins: DesertLegendsSpinsSlotParser,\n\t\t\tJellyMULTIHOPS: JellyMULTIHOPSSlotParser,\n\t\t\tBigBassAdventure: BigBassAdventureSlotParser\n\t\t};\n\t}\n\n\t/**\n\t * Creates an appropriate parser instance for the specified game id\n\t * Game specific parsers are preferred, default parser is used if one is not found\n\t * @param  {String} gameId The game id\n\t * @return {NSGSlotParser} The slot parser instance\n\t */\n\tcreateParser(gameId) {\n\t\tif (gameId in this.parsers) {\n\t\t\treturn new this.parsers[gameId]();\n\t\t}\n\n\t\treturn new NSGSlotParser();\n\t}\n}\n\nmodule.exports = NSGSlotParserFactory;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckMegawaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 5\n                },\n                cols: 6,\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckMegawaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckPowerReelsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 6,\n                cols: 8,\n                SCREEN_INDEX:11,\n                translateTile:['S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.AliBabasLuckPowerReels,\n                linesMap: {\n                    '66666666': [6,6,6,6,6,6,6,6],\n                    '77777777': [7,7,7,7,7,7,7,7],\n                    '88888888': [8,8,8,8,8,8,8,8],\n                    '99999999': [9,9,9,9,9,9,9,9],\n                    '1010101010101010': [10,10,10,10,10,10,10,10],\n                    '1111111111111111': [11,11,11,11,11,11,11,11],\n                    '67676767': [6,7,6,7,6,7,6,7],\n                    '78787878': [7,8,7,8,7,8,7,8],\n                    '89898989': [8,9,8,9,8,9,8,9],\n                    '910910910910': [9,10,9,10,9,10,9,10],\n                    '1011101110111011': [10,11,10,11,10,11,10,11],\n                    '76767676': [7,6,7,6,7,6,7,6],\n                    '87878787': [8,7,8,7,8,7,8,7],\n                    '98989898': [9,8,9,8,9,8,9,8],\n                    '109109109109': [10,9,10,9,10,9,10,9],\n                    '1110111011101110': [11,10,11,10,11,10,11,10],\n                    '67891011109': [6,7,8,9,10,11,10,9],\n                    '78910111098': [7,8,9,10,11,10,9,8],\n                    '89101110987': [8,9,10,11,10,9,8,7],\n                    '91011109876': [9,10,11,10,9,8,7,6],\n                    '10111098767': [10,11,10,9,8,7,6,7],\n                    '1110987678': [11,10,9,8,7,6,7,8],\n                    '109876789': [10,9,8,7,6,7,8,9],\n                    '987678910': [9,8,7,6,7,8,9,10],\n                    '8767891011': [8,7,6,7,8,9,10,11],\n                    '76789101110': [7,6,7,8,9,10,11,10],\n                    '6667891011': [6,6,6,7,8,9,10,11],\n                    '7777891010': [7,7,7,7,8,9,10,10],\n                    '101010109877': [10,10,10,10,9,8,7,7],\n                    '111111109876': [11,11,11,10,9,8,7,6],\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckPowerReelsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AliBabasLuckSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.AliBabasLuck,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = AliBabasLuckSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AmazonIslandMegaWaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 7\n                },\n                cols: 6,\n                translateTile:[],\n                injectReel: [1,2,3,4,5],\n                injectReelPosition: 'top'\n            }\n        });\n\t}\n}\n\nmodule.exports = AmazonIslandMegaWaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass AsianFortuneSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.AsianFortune,\n                    SCREEN_INDEX:5,\n                    translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = AsianFortuneSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass BigBassAdventureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                lineIds:this.gameLines.BigBassAdventure,\n                reelType: 'collector'\n            }\n        });\n\t}\n}\n\nmodule.exports = BigBassAdventureSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass CasinoSpinSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.CasinoSpin,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = CasinoSpinSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ChineseWildsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:4,\n                cols:5,\n                lineIds:this.gameLines.ChineseWilds,\n                SCREEN_INDEX:7,\n                translateTile:['S','W','O']\n            }\n        });\n\t}\n}\n\nmodule.exports = ChineseWildsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\r\n\r\nclass CobraQueenSlotParser extends NSGSlotParser {\r\n\tconstructor() {\r\n        super();\r\n        \r\n        this.setGameConfig({\r\n            Reels:{\r\n                rows:3,\r\n                cols:5,\r\n                lineIds:this.gameLines.CobraQueen,\r\n                SCREEN_INDEX:5,\r\n                translateTile:['S']\r\n            }\r\n        });\r\n\t}\r\n}\r\n\r\nmodule.exports = CobraQueenSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GottonGangAffairSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                ways: true,\n                SCREEN_INDEX:5,\n                translateTile:['W'],\n                reelType: 'multi'\n            }\n        });\n\t}\n}\n\nmodule.exports = GottonGangAffairSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DesertLegendsSpinsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.DesertLegendsSpins,\n                reelType: 'multi',\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = DesertLegendsSpinsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DragonPearlSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            flippedReels:true,\n            Reels:{\n                rows:5,\n                cols:3,\n                lineIds:this.gameLines.DragonPearl,\n                SCREEN_INDEX:9,\n                translateTile:['X'],\n                offsets: 1\n            },\n        });\n\t}\n}\n\nmodule.exports = DragonPearlSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass DreamDestinySlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.DreamDestiny,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = DreamDestinySlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass EightysSpinsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                ways: {\n                    min: 5,\n                    max: 5\n                },\n                Y2X: true,\n                remapBonusSymbols:{M:'CM'},\n                reelType: 'multi',\n                reelTypeFS: 'collector',\n\n                Manager: function(_config){\n                        let _response;\n                        let manager = {\n                            getTile:(x, y, fs=false) => {\n                                let ret = false;\n                                let json = manager.getResponse();\n                                \n                                if (json.reels) {\n                                    if(fs){\n                                        y = json.reels[x].length - 1 - y;\n                                        ret = json.reels[y][x];\n                                    }else{\n                                        ret = json.reels[y][x];\n                                    }\n                                }\n                                \n                                return ret;\n                            },\n                            \n                            setResponse:function(json){\n                              _response = json;\n                              return manager;\n                            },\n                            \n                            setGameData:function(data){\n                              $.extend((_response.result.game.nsp || _response.result.game.mwg || {}),data);\n                            },\n                            \n                            getResponse:function(raw){\n                              try{\n                                return (raw?_response:_response.result.game.nsp || _response.result.game.mwg) || {};\n                              }catch(e){\n                                return {};\n                              }\n                            },\n                            \n                            getLines:function(){\n                                try{\n                                    let response = manager.getResponse();\n                                    let ways = (response.lines || response.multiWays);\n                                    if(!ways && response.win && response.win.ways){\n                                        ways = response.win.ways;\n                                    }\n                                    return ways;\n                                }catch(e){\n                                    return [];\n                                }\n                            }\n                        }\n\n                        return manager;\n                    }\n            }\n        });\n\t}\n}\n\nmodule.exports = EightysSpinsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass ElephantTreasureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.ElephantTreasure,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','W','O','U']\n            }\n        });\n\t}\n}\n\nmodule.exports = ElephantTreasureSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass EpicTreasureSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        this.setGameConfig({\n            Reels:{\n                rows: 5,\n                cols: 5,\n                translateTile:[],\n                SCREEN_INDEX: 0,\n                lineIds:this.gameLines.EpicTreasure,\n                reelType: 'collector'\n            }\n        });\n\t}\n}\n\nmodule.exports = EpicTreasureSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GoldenLampsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            flippedReels:true,\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.GoldenLamps,\n                SCREEN_INDEX:0,\n                translateTile:['S','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = GoldenLampsSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass GoldenToadSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds: this.gameLines.GoldenToad,\n                SCREEN_INDEX:5,\n                translateTile:['S','W','V','U']\n            }\n        });\n\t}\n}\n\nmodule.exports = GoldenToadSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass JellyMULTIHOPSSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                cols: 7,\n                rows: 7,\n                reactions: true,\n                translateTile:['W'],\n                screens: 2,\n                reelType:'multi',\n                flip: true,\n                tileParse: tile => tile[0] === 'W' ? 'W' : tile\n            }\n        });\n\t}\n}\n\nmodule.exports = JellyMULTIHOPSSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicMegawaysSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                ways:{\n                    min: 2,\n                    max: 5\n                },\n                cols: 6,\n                translateTile:[]\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicMegawaysSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicPowerReelsSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 6,\n                cols: 8,\n                SCREEN_INDEX:11,\n                translateTile:['S'],\n                reelType: 'multi',\n                lineIds:this.gameLines.LeprechaunsMagicPowerReels,\n                linesMap: {\n                    '66666666': [6,6,6,6,6,6,6,6],\n                    '77777777': [7,7,7,7,7,7,7,7],\n                    '88888888': [8,8,8,8,8,8,8,8],\n                    '99999999': [9,9,9,9,9,9,9,9],\n                    '1010101010101010': [10,10,10,10,10,10,10,10],\n                    '1111111111111111': [11,11,11,11,11,11,11,11],\n                    '67676767': [6,7,6,7,6,7,6,7],\n                    '78787878': [7,8,7,8,7,8,7,8],\n                    '89898989': [8,9,8,9,8,9,8,9],\n                    '910910910910': [9,10,9,10,9,10,9,10],\n                    '1011101110111011': [10,11,10,11,10,11,10,11],\n                    '76767676': [7,6,7,6,7,6,7,6],\n                    '87878787': [8,7,8,7,8,7,8,7],\n                    '98989898': [9,8,9,8,9,8,9,8],\n                    '109109109109': [10,9,10,9,10,9,10,9],\n                    '1110111011101110': [11,10,11,10,11,10,11,10],\n                    '67891011109': [6,7,8,9,10,11,10,9],\n                    '78910111098': [7,8,9,10,11,10,9,8],\n                    '89101110987': [8,9,10,11,10,9,8,7],\n                    '91011109876': [9,10,11,10,9,8,7,6],\n                    '10111098767': [10,11,10,9,8,7,6,7],\n                    '1110987678': [11,10,9,8,7,6,7,8],\n                    '109876789': [10,9,8,7,6,7,8,9],\n                    '987678910': [9,8,7,6,7,8,9,10],\n                    '8767891011': [8,7,6,7,8,9,10,11],\n                    '76789101110': [7,6,7,8,9,10,11,10],\n                    '6667891011': [6,6,6,7,8,9,10,11],\n                    '7777891010': [7,7,7,7,8,9,10,10],\n                    '101010109877': [10,10,10,10,9,8,7,7],\n                    '111111109876': [11,11,11,10,9,8,7,6],\n                }\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicPowerReelsSlotParser;","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LeprechaunsMagicSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.LeprechaunsMagic,\n                SCREEN_INDEX:5,\n                translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = LeprechaunsMagicSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass LuckyCarnivalSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.LuckyCarnival,\n                    SCREEN_INDEX:5,\n                    translateTile:['S']\n            }\n        });\n\t}\n}\n\nmodule.exports = LuckyCarnivalSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass MacauRacingSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.MacauRacing,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','U','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = MacauRacingSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass NeptunesRichesSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows:3,\n                cols:5,\n                lineIds:this.gameLines.NeptunesRiches,\n                SCREEN_INDEX:5,\n                translateTile:['S','W']\n            }\n        });\n\t}\n}\n\nmodule.exports = NeptunesRichesSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass RedHotSlotSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n                Reels:{\n                    rows:3,\n                    cols:5,\n                    lineIds:this.gameLines.RedHotSlot,\n                    SCREEN_INDEX:5,\n                    translateTile:['S','P','W','U','W','Y']\n            }\n        });\n\t}\n}\n\nmodule.exports = RedHotSlotSlotParser;\n","const NSGSlotParser = require('../NSGSlotParser');\n\nclass WantedWildzSlotParser extends NSGSlotParser {\n\tconstructor() {\n        super();\n        \n        this.setGameConfig({\n            Reels:{\n                rows: 3,\n                cols: 5,\n                SCREEN_INDEX:5,\n                translateTile:['W'],\n                reelType: 'multi',\n                lineIds:this.gameLines.WantedWildz,\n            }\n        });\n\t}\n}\n\nmodule.exports = WantedWildzSlotParser;","const Handlebars = require('hbsfy/runtime');\nconst Cards = require('../../../../templates/Partials/cards.hbs');\nconst Number = require('../../../../templates/Partials/number.hbs');\nconst InfoRoulette = require('../../../../templates/Partials/infoRoulette.hbs');\nconst KeyValueMap = require('../../../config/KeyValueMap');\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tCayTableParser - this is currently a Parser for both EuropeanRoulette and PuntoBanco.\n *\tTODO: This class will need to be refacoted and made a lot less custom, a base parser similar to the DopSlotParser\n *\tfor Dop table games.\n *\n * @class\n */\nclass CayTableParser extends DefaultParser {\n\tregisterPartials(gameId) {\n\t\tlet partials = CayTableParser._getPartials(gameId);\n\t\tHandlebars.registerPartial('outcome', partials.outcome);\n\t\tHandlebars.registerPartial('info', partials.info);\n\t}\n\n\t/**\n\t *\n\t * @param {String} gameId\n\t * @param {Object} data\n\t * @description parse the actual server data\n\t * @returns {void}\n\t * @private\n\t */\n\tparse(gameId, data) {\n\t\tif (KeyValueMap[gameId] && KeyValueMap[gameId].pre) {\n\t\t\tdata = CayTableParser._mapKeys(KeyValueMap[gameId].pre, data);\n\t\t}\n\n\t\tlet { game, user, promo } = data.responses[0];\n\t\tlet transactions = data.transactions;\n\t\tlet combine = gameId === 'EuropeanRoulette'; // if true combine similar stakes and wins into groups\n\t\tlet actualWins = CayTableParser._filterWins(game); // apparently win of 0 is a thing also handles the case with limited wins\n\t\tlet stake = CayTableParser._extractSubKeys(CayTableParser._parseObject(game.stake, 'Stake', combine));\n\t\tlet wins = CayTableParser._extractSubKeys(CayTableParser._parseObject(actualWins, 'Win', combine));\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t\twinner: game.winner\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\tstake,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: user.balance.cash,\n\t\t\t\t\tfreeBets: user.balance.freeBets,\n\t\t\t\t\tsessionCash: user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: user.balance.bonus\n\t\t\t\t}\n\t\t\t},\n\t\t\tregulations: data.regulations, // not .responses[0]\n\t\t\twinDetails: wins,\n\t\t\tcards: game.cards,\n\t\t\tnumber: game.ballPosition,\n\t\t\tpromo\n\t\t};\n\n\t\tif (game) { // TODO: this is temporary fix when the server returns game:null. It analyzed be taken more seriously\n\t\t\treturn KeyValueMap[gameId] && KeyValueMap[gameId].post\n\t\t\t\t? CayTableParser._mapKeys(KeyValueMap[gameId].post, history) : history;\n\t\t}\n\t}\n\n\tstatic _extractSubKeys(stakes) {\n\t\tvar groups = {};\n\n\t\tvar numbers = ['first', 'second', 'third'];\n\n\t\tvar names = {\n\t\t\tcolor: {\n\t\t\t\tpattern: /(red|black)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\tsmall_big: {\n\t\t\t\tpattern: /(small|big)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\teven_odd: {\n\t\t\t\tpattern: /(odd|even)/,\n\t\t\t\textractFn: (key) => key,\n\t\t\t\torderIndex: (key) => key\n\t\t\t},\n\t\t\tcolumn: {\n\t\t\t\tpattern: /column\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => numbers[parseInt(matches[1], 10)] + '_column',\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tdozen: {\n\t\t\t\tpattern: /dozen\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => numbers[parseInt(matches[1], 10)] + '_dozen',\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tsix_line: {\n\t\t\t\tpattern: /sixLine\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\treturn [...Array(6).keys()].map((n, i) => idx * 3 + n + 1).join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tstraight: {\n\t\t\t\tpattern: /straight\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => matches[1],\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tstreet: {\n\t\t\t\tpattern: /street\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\treturn [...Array(3).keys()].map((n, i) => idx * 3 + n + 1).join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\ttrio: {\n\t\t\t\tpattern: /trio\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tswitch(matches[1]) {\n\t\t\t\t\t\tcase '0': return [0, 1, 2].join(' - ');\n\t\t\t\t\t\tcase '1': return [0, 2, 3].join(' - ');\n\t\t\t\t\t\tdefault:  return 'trio ' + matches[1]; // should not happen maybe?\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => parseInt(matches[1], 10)\n\t\t\t},\n\t\t\tcorner: {\n\t\t\t\tpattern: /corner\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\n\t\t\t\t\t// edge case\n\t\t\t\t\tif (idx == 22) return [0,1,2,3].join(' - ');\n\n\t\t\t\t\tvar lower = 0;\n\t\t\t\t\twhile(idx >= 0) {\n\t\t\t\t\t\tif (++lower % 3 == 0) lower++;\n\t\t\t\t\t\tidx--;\n\t\t\t\t\t}\n\t\t\t\t\treturn [lower, lower + 1, lower + 3, lower + 4].join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10)\n\t\t\t\t\tif (idx == 22) return 0;\n\t\t\t\t\treturn idx + 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tsplit: {\n\t\t\t\tpattern: /split\\_(\\d+)/,\n\t\t\t\textractFn: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\n\t\t\t\t\t// edge cases\n\t\t\t\t\tswitch(idx) {\n\t\t\t\t\t\tcase 57: return [0,1].join(' - ');\n\t\t\t\t\t\tcase 58: return [0,2].join(' - ');\n\t\t\t\t\t\tcase 59: return [0,3].join(' - ');\n\t\t\t\t\t}\n\n\t\t\t\t    var first = 0;\n\t\t\t\t    var second = 1;\n\t\t\t\t    var c1 = 0;\n\t\t\t\t    var c2 = 0;\n\t\t\t\t    for (var i = 0; i <= idx; i++) {\n\t\t\t\t       first++;\n\t\t\t\t       second++;\n\t\t\t\t       c1++;\n\t\t\t\t       c2++;\n\t\t\t\t       if (c1 == 3) first -= 2;\n\t\t\t\t       if (c1 == 5) c1 = 0;\n\t\t\t\t       if (c2 == 6) {\n\t\t\t\t         c2 = 1;\n\t\t\t\t         second -= 2;\n\t\t\t\t       }\n\t\t\t\t    }\n\t\t\t\t    return [first, second].join(' - ');\n\t\t\t\t},\n\t\t\t\torderIndex: (key, matches) => {\n\t\t\t\t\tvar idx = parseInt(matches[1], 10);\n\t\t\t\t\tif (idx < 57) return idx + 3;\n\t\t\t\t\treturn idx - 57;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tObject.keys(stakes).forEach((stake) => {\n\t\t\tvar matched = false;\n\t\t\tvar matches = null;\n\t\t\tObject.keys(names).forEach((groupName) => {\n\t\t\t\tmatches = stake.match(names[groupName].pattern);\n\t\t\t\tif (matched || !matches) return;\n\t\t\t\tmatched = true;\n\t\t\t\tif (!groups[groupName]) groups[groupName] = [];\n\t\t\t\tgroups[groupName].push({key: names[groupName].extractFn(stake, matches), value: stakes[stake].total, order: names[groupName].orderIndex(stake, matches)});\n\t\t\t});\n\t\t\tif (!matched) {\n\t\t\t\tgroups[stake] = stakes[stake];\n\t\t\t}\n\t\t});\n\n\t\tvar sortedGroups = {};\n\n\t\tvar keys = Object.keys(groups);\n\t\tkeys.sort();\n\n\t\tif (groups.totalWin) {\n\t\t\tkeys.splice(keys.indexOf('totalWin'), 1);\n\t\t}\n\t\tif (groups.totalStake) {\n\t\t\tkeys.splice(keys.indexOf('totalStake'), 1);\n\t\t}\n\n\t\tkeys.forEach((key) => {\n\t\t\tsortedGroups[key] = {sub: {}};\n\t\t\tgroups[key].sort((a,b) => a.order - b.order);\n\t\t\tgroups[key].forEach((group) => {\n\t\t\t\tsortedGroups[key].sub[group.key] = group.value;\n\t\t\t});\n\t\t});\n\n\t\tif (groups.totalWin) {\n\t\t\tsortedGroups['totalWin'] = groups.totalWin;\n\t\t}\n\n\t\tif (groups.totalStake) {\n\t\t\tsortedGroups['totalStake'] = groups.totalStake;\n\t\t}\n\n\t\treturn sortedGroups;\n\t}\n\n\t/**\n\t *\n\t * @param {Object} data\n\t * @description returns only none 0 wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _filterWins(data){\n\t\tlet wins = data.win;\n\n\t\treturn Object.keys(wins)\n\t\t\t.filter((type) => parseFloat(wins[type]) > 0)\n\t\t\t.reduce((acc, type) => {\n\t\t\t\tacc[type] = wins[type];\n\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t}\n\n\t/**\n\t *\n\t * @param {Object} obj - Object to be parsed\n\t * @param {String} name - name of data set, eg. Stake, Win, used for total naming\n\t * @param {Boolean}[combine=false] combine into groups\n\t * @description returns proper partial depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _parseObject(obj, name, combine = false) {\n\t\tif (typeof obj === 'number') {\n\t\t\treturn [{ type: 'total' + name, amount: obj }];\n\t\t}\n\n\t\tif (typeof obj === 'object') {\n\t\t\treturn Object.keys(obj)\n\t\t\t\t.reduce((acc, key) => {\n\t\t\t\t\tif(!combine){\n\t\t\t\t\t\tlet singleName = key === 'total' ? 'total' + name : key;\n\t\t\t\t\t\tacc[singleName] = { total: obj[key] };\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet group = key.split('_')[0]; // eg. straight_12 -> straight\n\n\t\t\t\t\t\tlet groupName;\n\t\t\t\t\t\t// don't group total win and limited win\n\t\t\t\t\t\tif (group === 'total') groupName = 'total' + name;\n\t\t\t\t\t\telse if (group === 'limitedWin') groupName = 'limitedWin';\n\t\t\t\t\t\t// generate group name\n\t\t\t\t\t\telse groupName = group + 'Total'; // eg. straightTotal\n\n\t\t\t\t\t\tif (acc[groupName]) return acc;\n\n\t\t\t\t\t\tacc[groupName] = CayTableParser._extractGroup(group, obj);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}, {});\n\t\t}\n\n\t\tconsole.error(\"Table history parser. Unexpected data format when parsing\", obj);\n\t\treturn null;\n\t}\n\n\t/**\n\t *\n\t * @param {String} id - game id\n\t * @description returns proper partioal depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _getPartials(id) {\n\t\tlet info,\n\t\t\toutcome;\n\n\t\tif (id.toLowerCase().indexOf('roulette') > -1) {\n\t\t\tinfo = InfoRoulette;\n\t\t\toutcome = Number;\n\t\t}\n\n\t\treturn { info, outcome };\n\t}\n\n\t/**\n\t *\n\t * @param {String} group - the name of the group\n\t * @param {Object} collection - the collection from which the group is been extracted\n\t * @description extract similar properties from collection ane group them,\n\t\tfor example similar wins from all wins, for example all split wins (split_0, split_1) will be grouped into\n\t\tone object with total property(containing all split wins sum), and sub properties containing all info for all\n\t \tindividual split wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _extractGroup(group, collection) {\n\t\tlet total = 0;\n\t\tlet sub = Object.keys(collection)\n\t\t\t.filter((key) => key.includes(group))\n\t\t\t.reduce((acc, key) => {\n\t\t\t\ttotal += parseInt(collection[key], 10);\n\t\t\t\tacc[key] = collection[key];\n                return acc;\n            }, {});\n\n\t\treturn (group !== 'total' && group !== 'limitedWin')? { total, sub } : { total };\n\t}\n\n\t/**\n\t *\n\t * @param {Object} map\n\t * @param {Object} obj\n\t * @description traverse object 'obj' recursively and replaces every key that is a also a key on 'map' object with the value in map(map[key])\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _mapKeys(map, obj) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\tlet k = map[key] || key;\n\n\t\t\tacc[k] = typeof obj[key] === 'object' && obj[key] !== null ? CayTableParser._mapKeys(map, obj[key]) : obj[key];\n\n\t\t\treturn acc;\n\t\t}, {});\n\t}\n}\n\nmodule.exports = CayTableParser;\n","const CayTableParser = require('./CayTableParser');\nconst BlackJackParser = require('./games/BlackJackParser');\nconst ThreeCardBragParser = require('./games/ThreeCardBragParser');\nconst VideoPokerParser = require('./games/VideoPokerParser');\n\nclass CayTableParserFactory {\n\n    constructor() {\n        this.parsers = {\n        };\n    }\n\n    /**\n     * Creates an appropriate parser instance for the specified game id\n     * @param  {String} gameId The game id\n     * @return {CayTableParser} The table parser instance\n     */\n    createParser(gameId) {\n        // search for specific parser\n        gameId = gameId.toLowerCase();\n        var keys = Object.keys(this.parsers);\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i].toLowerCase() == gameId) {\n                return new this.parsers[keys[i]]();\n            }\n        }\n\n        // check for generic blackjack parser\n        if (gameId.toLowerCase().indexOf('blackjack') > -1) {\n            return new BlackJackParser();\n        }\n        \n        // check for generic 3 card brag parser\n        if (gameId.toLowerCase().indexOf('brag') > -1) {\n            return new ThreeCardBragParser();\n        }\n        // check for generic video poker parser\n        if (gameId.toLowerCase().indexOf('vp') > -1) {\n            return new VideoPokerParser();\n        }\n        \n        // return the roulette parser\n        return new CayTableParser();\n    }\n}\n\nmodule.exports = CayTableParserFactory;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_ORDER = [\n    'dealer', \n    'hand_0', \n    'hand_0_split_0',\n    'sidebet_0',\n    'sidebet_1000',\n    'hand_1', \n    'hand_1_split_0',\n    'sidebet_1',\n    'sidebet_1001',\n    'hand_2', \n    'hand_2_split_0',\n    'sidebet_2',\n    'sidebet_1002', \n    'insurance_hand_0',\n    'insurance_hand_1',\n    'insurance_hand_2',\n    'total'\n];\n\nclass BlackJackParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n\n            result.hands = hands;\n            result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        hands.dealer = data.game.gameData.dealerHand;\n        hands.dealer.stake = 0;\n\n        data.game.gameData.lastPayouts.forEach((payout, index) => {\n            var key = payout.playersHand.handPosition - 1;\n            var key_str = 'hand_' + key;\n            var key_split = 'hand_' + key + '_split_0';\n            if (key >= 1000) {\n                key_str = 'sidebet_' + (key - 1000);\n            }\n\n            hands[key_str] = payout.playersHand;\n            hands[key_str].hasInsurance = !!payout.isInsured;\n\n            if (payout.playersSplitHand) {\n                hands[key_split] = payout.playersSplitHand;\n                hands[key_split].hasInsurance = !!payout.isInsured;\n            }\n        });\n\n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                let uniqueAction = handsObj[hand].hasBlackjack || handsObj[hand].isDoubled ? '(BlackJack)' : '';\n                if(handsObj[hand].hasBlackjack) uniqueAction = '(BlackJack)';\n                if(handsObj[hand].isDoubled) uniqueAction = '(Double Down)';\n                if(handsObj[hand].handPosition >= 1000) uniqueAction = '(Sidebet)';\n\n                return {\n                    score: handsObj[hand].sum,\n                    handName: hand.toUpperCase(),\n                    uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        if (type == \"insurance\") {\n            return this.sortHandsOrder(handsObj)\n                        .filter((hand) => type == \"insurance\" ? handsObj[hand].hasInsurance : true)\n                        .map((hand) => handsObj[hand].sideBet)\n                        .reduce((a, b) => a + b, 0);\n        }\n\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        Object.keys(winObj).forEach((key) => {\n            var splitted = key.split('_');\n            if (splitted[1] && !isNaN(splitted[1])) {\n                splitted[1] = parseInt(splitted[1], 10) - 1;\n            }\n            mappedWinObj[splitted.join('_')] = winObj[key];\n        });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = BlackJackParser;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_ORDER = [\n    'dealer',\n    'ante', \n    'ante_bonus', \n    'pair_bonus',\n    'play',\n    'total'\n];\n\nclass ThreeCardBragParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            // sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            // totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n            result.hands = hands;\n            // result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            // result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        // hands.dealer = data.game.gameData.dealerHand;\n        // hands.dealer.stake = 0;\n\n        // data.game.gameData.payoutData.forEach((payout, index) => {\n        //     var key = payout.playersHand.handPosition - 1;\n        //     var key_str = 'hand_' + key;\n        //     var key_split = 'hand_' + key + '_split_0';\n        //     if (key >= 1000) {\n        //         key_str = 'sidebet_' + (key - 1000);\n        //     }\n\n        //     hands[key_str] = payout.playersHand;\n        //     hands[key_str].hasInsurance = !!payout.isInsured;\n\n        //     if (payout.playersSplitHand) {\n        //         hands[key_split] = payout.playersSplitHand;\n        //         hands[key_split].hasInsurance = !!payout.isInsured;\n        //     }\n        // });\n        if(data.game.gameData.playerHand != null) {\n            hands.ante = data.game.gameData.playerHand;\n        }\n        \n        if(data.game.gameData.dealerHand) {\n            hands.dealer = data.game.gameData.dealerHand;\n        }\n       \n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        // if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                // let uniqueAction = handsObj[hand].hasBlackjack || handsObj[hand].isDoubled ? '(BlackJack)' : '';\n                // if(handsObj[hand].hasBlackjack) uniqueAction = '(BlackJack)';\n                // if(handsObj[hand].isDoubled) uniqueAction = '(Double Down)';\n                // if(handsObj[hand].handPosition >= 1000) uniqueAction = '(Sidebet)';\n\n                return {\n                    score: handsObj[hand].winAmount,\n                    handName: hand.toUpperCase(),\n                    // uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: this.fixCardsFormat(handsObj[hand].cards)\n                };\n        });\n    }\n\n    fixCardsFormat(cards = []) {\n        var fixedCards = [];\n        cards.forEach((card)=> {\n            fixedCards.push(card.string);\n        });\n\n        return fixedCards;\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        if (type == \"insurance\") {\n            return this.sortHandsOrder(handsObj)\n                        .filter((hand) => type == \"insurance\" ? handsObj[hand].hasInsurance : true)\n                        .map((hand) => handsObj[hand].sideBet)\n                        .reduce((a, b) => a + b, 0);\n        }\n\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        Object.keys(winObj).forEach((key) => {\n            var splitted = key.split('_');\n            if (splitted[1] && !isNaN(splitted[1])) {\n                splitted[1] = parseInt(splitted[1], 10) - 1;\n            }\n            mappedWinObj[splitted.join('_')] = winObj[key];\n        });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n\n        console.log(result);\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = ThreeCardBragParser;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoVideoPoker.hbs');\nconst DefaultParser = require('../../../DefaultParser');\n\nconst HANDS_TYPE = [\n    'Royal flush',\n    'Straight flush',\n    'Four of a Kind',\n    'hand_3',\n    'Full House',\n    'Flush',\n    'Straight',\n    'Three of a Kind',\n    'Two Pair',\n    'Jacks or Better'\n];\n\nclass VideoPokerParser extends DefaultParser {\n    registerPartials() {\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n        Handlebars.registerHelper(\"log\", function(something) {\n            console.log(something);\n          });\n    }\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n\n        var currData = this.nextResponse( data );\n        var hands = this.extractHands(currData);\n        var result = {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: currData.transactions.roundId,\n                prevRoundId: currData.transactions.prevRoundId,\n                nextRoundId: currData.transactions.nextRoundId,\n                serverTimeStart: currData.transactions.startTime,\n                serverTimeEnd: currData.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: currData.user.balance.cash,\n                    freeBets: currData.user.balance.freeBets,\n                    sessionCash: currData.user.balance.sessionCash,\n                    sessionFreeBets: currData.user.balance.sessionFreeBets,\n                    bonus: currData.user.balance.bonus\n                }\n            },\n            regulations: data.regulations,\n            winDetails: this.extractWinDetails(currData.game.win),\n            hands: hands,\n            // sideBets: this.extractSideBets(hands),\n            handScores: this.extractHandInfo(hands),\n            totalStake: this.extractTotalStake(hands, 'stake'),\n            // totalSideBetsStake: this.extractTotalStake(hands, 'insurance'),\n            totalWins: Number(currData.game.win.total),\n            promo: currData.promo\n        };\n        // console.log(\"~~~~~LAST CHECK\", result.handScores, this.extractHandInfo(hands));\n        while(currData = this.nextResponse(data)) {\n            hands = this.extractHands(currData);\n            result.hands = hands;\n            // result.sideBets = this.extractSideBets(hands);\n            result.handScores = this.extractHandInfo(hands);\n            result.totalStake = this.extractTotalStake(hands, 'stake');\n            // result.totalSideBetsStake = this.extractTotalStake(hands, 'insurance');\n            result.winDetails = this.extractWinDetails(currData.game.win);\n            result.totalWins = Number(currData.game.win.total);\n        }\n        return result;\n    }\n\n    nextResponse(data) {\n        // single response data\n        if (!data.responses) {\n            if (this.responseHandled) return null;\n            this.responseHandled = true;\n            return data;\n        }\n\n        if (typeof this.responseIndex == \"undefined\") {\n            this.responseIndex = 0;\n        } else {\n            this.responseIndex++;\n        }\n\n        if (this.responseIndex >= data.responses.length) {\n            return null;\n        }\n\n        let responseData = data.responses[this.responseIndex];\n\n        let userData = {};\n        //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n        userData.balance = data.responses[0].user.balance;\n        userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n        userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n        userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n        userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n        //use the last response as it will have the most up to date info\n        responseData.user = userData;\n        responseData.transactions = data.transactions\n        return responseData;\n    }\n\n    extractHands(data) {\n        var hands = {};\n\n        data.game.gameData.payoutData.forEach((payout, index) => {\n            if (payout.className.indexOf(\"VideoPokerDrawDto\") != -1) {\n                payout.playerHands.forEach((hand, handId) => {\n                    var key_str = 'hand_' + handId;\n                    hands[key_str] = hand;\n                });\n            } \n        });\n        \n        return hands;\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        // if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n\n            const userData = {};\n            //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n            userData.balance = data.responses[0].user.balance;\n            userData.balance.cash.atEnd = data.responses[data.responses.length-1].user.balance.cash.atEnd;\n            userData.balance.freeBets.atEnd = data.responses[data.responses.length-1].user.balance.freeBets.atEnd;\n            userData.balance.sessionCash.atEnd = data.responses[data.responses.length-1].user.balance.sessionCash.atEnd;\n            userData.balance.sessionFreeBets.atEnd = data.responses[data.responses.length-1].user.balance.sessionFreeBets.atEnd;\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj = this.data.game.gameData.hands) {\n        return Object.keys(handsObj)\n            .map((hand) => {\n                return {\n                    score: handsObj[hand].winAmount,\n                    handName: hand.toUpperCase().split(\"_\").join(\" [\") + \"]\",\n                    combinationName: handsObj[hand].winAmount > 0 ? handsObj[hand].winningCombination.combinationName.split(\"_\").join(\" \") : \"\",\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    fixCardsFormat(cards = []) {\n        var fixedCards = [];\n        cards.forEach((card)=> {\n            fixedCards.push(card.string);\n        });\n\n        return fixedCards;\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj = this.data.game.gameData.hands, type) {\n        return this.sortHandsOrder(handsObj)\n                .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n                .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n                .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj = this.data.game.win) {\n        var result = {};\n        var mappedWinObj = {};\n        // Object.keys(winObj).forEach((key) => {\n        //     var splitted = key.split('_');\n        //     if (splitted[1] && !isNaN(splitted[1])) {\n        //         splitted[1] = parseInt(splitted[1], 10) + 1;\n        //     }\n        //     mappedWinObj[splitted.join('_')] = winObj[key];\n        // });\n        this.sortHandsOrder(mappedWinObj)\n                    .forEach((win) => {\n                        if (win == \"total\") return; \n                        result[win.toUpperCase()] = Number(mappedWinObj[win]); \n                    });\n\n        return result;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} insuranceArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj = this.data.game.gameData.hands) {\n        let insuranceArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n                        .filter((hand) => hand !== 'dealer' && handsObj[hand].hasInsurance && !hand.includes('split'));\n\n        if(!hands.length) return [];\n\n        hands.forEach((hand) => {\n            let output = {};\n            output.name = hand.toUpperCase();\n            output.stake = Number(handsObj[hand].stake/2);\n            insuranceArray.push(output);\n        });\n        return insuranceArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = this.data.game.gameData.hands) {\n        return HANDS_TYPE.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n}\nmodule.exports = VideoPokerParser;","const Handlebars = require('hbsfy/runtime');\nconst Cards = require('../../../../templates/Partials/cards.hbs');\nconst Number = require('../../../../templates/Partials/number.hbs');\nconst InfoRoulette = require('../../../../templates/Partials/infoRoulette.hbs');\nconst InfoPuntoBanco = require('../../../../templates/Partials/infoPuntoBanco.hbs');\nconst KeyValueMap = require('../../../config/KeyValueMap');\nconst DefaultParser = require('../../DefaultParser');\n\n/**\n *\tDopTableParser - this is currently a Parser for both roulette and punto banco.\n *\tTODO: This class will need to be refacoted and made a lot less custom, a base parser similar to the DopSlotParser\n *\tfor Dop table games.\n *\n * @class\n */\nclass DopTableParser extends DefaultParser {\n\n\t/**\n\t *\n\t * @param {String} gameId\n\t * @param {Object} serverData\n\t * @description parse the actual server data\n\t * @returns {void}\n\t * @private\n\t */\n\tparse(gameId, serverData) {\n\t\tlet data = serverData.responses[0]; // Baccarat and Roulette have no actions, so always in [0]\n\n\t\tif (KeyValueMap[gameId] && KeyValueMap[gameId].pre) {\n\t\t\tdata = DopTableParser._mapKeys(KeyValueMap[gameId].pre, data);\n\t\t}\n\n\t\tlet { game, user, transactions, promo } = data;\n\t\tlet combine = (gameId === 'EuropeanRoulette' || gameId === 'PlatinumRoulette' || gameId === 'PlatinumRouletteSingleZero'); // if true combine similar stakes and wins into groups\n\t\tlet actualWins = DopTableParser._filterWins(game); // apparently win of 0 is a thing also handles the case with limited wins\n\t\tlet partials = DopTableParser._getPartials(gameId);\n\t\tlet stake = DopTableParser._parseObject(game.stake, 'Stake', combine);\n\t\tlet wins = DopTableParser._parseObject(actualWins, 'Win', combine);\n\n\t\tHandlebars.registerPartial('outcome', partials.outcome);\n\t\tHandlebars.registerPartial('info', partials.info);\n\n\t\tlet history = {\n\t\t\tgameDetails: {\n\t\t\t\tgameId,\n\t\t\t\troundId: transactions.roundId,\n\t\t\t\tprevRoundId: transactions.prevRoundId,\n\t\t\t\tnextRoundId: transactions.nextRoundId,\n\t\t\t\tserverTimeStart: transactions.startTime,\n\t\t\t\tserverTimeEnd: transactions.endTime,\n\t\t\t\twinner: game.winner\n\t\t\t},\n\t\t\ttransactions: {\n\t\t\t\tstake,\n\t\t\t\tbalance: {\n\t\t\t\t\tcash: user.balance.cash,\n\t\t\t\t\tfreeBets: user.balance.freeBets,\n\t\t\t\t\tsessionCash: data.user.balance.sessionCash,\n\t\t\t\t\tsessionFreeBets: data.user.balance.sessionFreeBets,\n\t\t\t\t\tbonus: user.balance.bonus\n\t\t\t\t}\n\t\t\t},\n\t\t\tregulations: serverData.regulations,\n\t\t\twinDetails: wins,\n\t\t\tcards: game.cards,\n\t\t\tnumber: game.ballPosition,\n\t\t\tpromo\n\t\t};\n\n\t\tif (game) { // TODO: this is temporary fix when the server returns game:null. It analyzed be taken more seriously\n\t\t\treturn KeyValueMap[gameId] && KeyValueMap[gameId].post\n\t\t\t\t? DopTableParser._mapKeys(KeyValueMap[gameId].post, history) : history;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Object} data\n\t * @description returns only none 0 wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _filterWins(data){\n\t\tlet wins = data.win;\n\n\t\treturn Object.keys(wins)\n\t\t\t.filter((type) => parseFloat(wins[type]) > 0)\n\t\t\t.reduce((acc, type) => {\n\t\t\t\tacc[type] = wins[type];\n\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t}\n\n\t/**\n\t *\n\t * @param {Object} obj - Object to be parsed\n\t * @param {String} name - name of data set, eg. Stake, Win, used for total naming\n\t * @param {Boolean}[combine=false] combine into groups\n\t * @description returns proper partial depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _parseObject(obj, name, combine = false) {\n\t\tif (typeof obj === 'number') {\n\t\t\treturn [{ type: 'total' + name, amount: obj }];\n\t\t}\n\n\t\tif (typeof obj === 'object') {\n\t\t\treturn Object.keys(obj)\n\t\t\t\t.reduce((acc, key) => {\n\t\t\t\t\tif(!combine){\n\t\t\t\t\t\tlet singleName = key === 'total' ? 'total' + name : key;\n\t\t\t\t\t\tacc[singleName] = { total: obj[key] };\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet group = key.split('_')[0]; // eg. straight_12 -> straight\n\t\t\t\t\t\tlet groupName = (group === 'total') ? 'total' + name : group;\n\t\t\t\t\t\tif (acc[groupName]) return acc;\n\n\t\t\t\t\t\tacc[groupName] = DopTableParser._extractGroup(group, obj);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}\n\t\t\t\t}, {});\n\t\t}\n\n\t\tconsole.error(\"Table history parser. Unexpected data format when parsing\", obj);\n\t\treturn null;\n\t}\n\n\t/**\n\t *\n\t * @param {String} id - game id\n\t * @description returns proper partioal depending of the game\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _getPartials(id) {\n\t\tlet info,\n\t\t\toutcome;\n\n\t\tif (id === 'EuropeanRoulette' || id === 'PlatinumRoulette' || id === 'PlatinumRouletteSingleZero') {\n\t\t\tinfo = InfoRoulette;\n\t\t\toutcome = Number;\n\t\t}\n\n\t\tif (id === 'PuntoBanco') {\n\t\t\tinfo = InfoPuntoBanco;\n\t\t\toutcome = Cards;\n\t\t}\n\n\t\treturn { info, outcome };\n\t}\n\n\t/**\n\t *\n\t * @param {String} group - the name of the group\n\t * @param {Object} collection - the collection from which the group is been extracted\n\t * @description extract similar properties from collection ane group them,\n\t\tfor example similar wins from all wins, for example all split wins (split_0, split_1) will be grouped into\n\t\tone object with total property(containing all split wins sum), and sub properties containing all info for all\n\t \tindividual split wins\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _extractGroup(group, collection) {\n\t\tif(group === 'total' || group === 'limitedWin') return { total: collection[group] };\n\n\t\tlet sub = Object.keys(collection)\n\t\t\t.filter((key) => key.includes(group))\n\t\t\t.reduce((acc, key) => {\n\t\t\t\tacc[key] = collection[key];\n                return acc;\n            }, {});\n\n\t\treturn { sub };\n\t}\n\n\t/**\n\t *\n\t * @param {Object} map\n\t * @param {Object} obj\n\t * @description traverse object 'obj' recursively and replaces every key that is a also a key on 'map' object with the value in map(map[key])\n\t * @returns {Object}\n\t * @private\n\t */\n\tstatic _mapKeys(map, obj) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\tlet k = map[key] || key;\n\n\t\t\tacc[k] = typeof obj[key] === 'object' && obj[key] !== null && key !== 'responses' ? DopTableParser._mapKeys(map, obj[key]) : obj[key];\n\n\t\t\treturn acc;\n\t\t}, {});\n\t}\n}\n\nmodule.exports = DopTableParser;\n","const DopTableParser = require('./DopTableParser');\nconst BlackJackParser = require('./games/BlackJackParser');\n\nclass DopTableParserFactory {\n\n    constructor() {\n        this.parsers = {\n            //currently EuropeanRoulette, PlatinumRoulette and PuntoBanco use DopTableParser\n            ClassicBlackjack: BlackJackParser,\n            DONDBlackjack: BlackJackParser,\n            PlatinumBlackjack: BlackJackParser,\n            PlatinumBlackjackSideBetsPA: BlackJackParser,\n        };\n    }\n\n    /**\n     * Creates an appropriate parser instance for the specified game id\n     * @param  {String} gameId The game id\n     * @return {DopTableParser} The table parser instance\n     */\n    createParser(gameId) {\n        if(gameId in this.parsers) {\n            return new this.parsers[gameId]();\n        }\n\n        return new DopTableParser();\n    }\n}\n\nmodule.exports = DopTableParserFactory;","const Handlebars = require('hbsfy/runtime');\nconst Hands = require('../../../../../templates/Partials/hands.hbs');\nconst InfoBlackJack = require('../../../../../templates/Partials/infoBlackjack.hbs');\nconst DefaultParser = require('../../../DefaultParser');\nconst Language = require('../../../../utils/Language');\n\nconst HANDS_ORDER = [\n    'dealer',\n    'hand_0',\n    'hand_0_side_0',\n    'hand_0_side_1',\n    'hand_0_side_2',\n    'hand_0_split_0',\n    'hand_1',\n    'hand_1_side_0',\n    'hand_1_side_1',\n    'hand_1_side_2',\n    'hand_1_split_0',\n    'hand_2',\n    'hand_2_side_0',\n    'hand_2_side_1',\n    'hand_2_side_2',\n    'hand_2_split_0',\n    'insurance_hand_0',\n    'insurance_hand_1',\n    'insurance_hand_2',\n    'total',\n    'limitedWin',\n];\n\nclass BlackJackParser extends DefaultParser {\n\n    /**\n     * This method parses the response from the server and returns a suitable object that can be used to add the data\n     * to the handlebars.\n     * @param {String} gameId - gameId of the project\n     * @param {Object} data - the data received from the server (before any sort of manipulation).\n     * @returns {Object} an object with all the data ready for the handlebars\n     */\n    parse(gameId, data) {\n        this.gameId = gameId;\n        this.data = data;\n        this.limitedWin = this.data.game.win.limitedWin;\n        this.handsData = this.data.game.gameData && this.data.game.gameData.hands;\n\n        //This check is used in case of HERMES gpanel results\n        if(this.data.result && this.data.result.history) this.data = this.data.result.history;\n\n        Handlebars.registerPartial('outcome', Hands);\n        Handlebars.registerPartial('info', InfoBlackJack);\n\n        return {\n            gameDetails: {\n                gameId: this.gameId,\n                roundId: this.data.transactions.roundId,\n                prevRoundId: this.data.transactions.prevRoundId,\n                nextRoundId: this.data.transactions.nextRoundId,\n                serverTimeStart: this.data.transactions.startTime,\n                serverTimeEnd: this.data.transactions.endTime,\n            },\n            transactions: {\n                balance: {\n                    cash: this.data.user.balance.cash,\n                    freeBets: this.data.user.balance.freeBets,\n                    sessionCash: this.data.user.balance.sessionCash,\n                    sessionFreeBets: this.data.user.balance.sessionFreeBets,\n                    bonus: this.data.user.balance.bonus\n                }\n            },\n            regulations: this.data.regulations,\n            winDetails: this.extractWinDetails(this.data.game.win),\n            hands: this.handsData,\n            sideBets: this.handsData && this.extractSideBets(this.handsData),\n            handScores: this.handsData && this.extractHandInfo(this.handsData),\n            totalStake: this.handsData && this.extractTotalStake(this.handsData, 'stake'),\n            totalSideBetsStake: this.handsData && this.extractSidebetTotalStake(this.handsData, 'insurance'),\n            totalWins: Number(this.data.game.win.total),\n            promo: this.data.promo\n        };\n    }\n\n    /**\n     * Sanitze spin data object\n     * @private\n     * @return {Object} Sanitized data\n     */\n    sanitizeData(data) {\n        //This check is used in case of HERMES gpanel results\n        if(data.result && data.result.history) data = data.result.history;\n\n        let multiResponseFormat = !!data.responses; //Check for multiple responses format\n        if(multiResponseFormat){ //We are using multi-response format\n            const transactions = data.transactions;\n            const responses = data.responses;\n            const regulations = data.regulations;\n            const userData = {};\n\n            if (!responses[responses.length - 1].game.win.limitedWin) {\n                //use the first response as it will have the correct Balance before Stake/Balance after Bet values\n                userData.balance = responses[0].user.balance;\n                userData.balance.cash.atEnd = responses[responses.length - 1].user.balance.cash.atEnd;\n                userData.balance.freeBets.atEnd = responses[responses.length - 1].user.balance.freeBets.atEnd;\n                userData.balance.sessionCash.atEnd = responses[responses.length - 1].user.balance.sessionCash.atEnd;\n                userData.balance.sessionFreeBets.atEnd = responses[responses.length - 1].user.balance.sessionFreeBets.atEnd;\n            } else {\n                //use the last response as it will have the correct values for balance after bet and balance at end\n                userData.balance = responses[responses.length - 1].user.balance;\n                //use the first response as it will have the correct values for balance at start\n                userData.balance.cash.atStart = responses[0].user.balance.cash.atStart;\n                userData.balance.freeBets.atStart = responses[0].user.balance.freeBets.atStart;\n                userData.balance.sessionCash.atStart = responses[0].user.balance.sessionCash.atStart;\n                userData.balance.sessionFreeBets.atStart = responses[0].user.balance.sessionFreeBets.atStart;\n            }\n\n            data = responses[responses.length-1]; //Use the main spin response for now\n            data.user = userData;\n            data.transactions = transactions || data.result.history.transactions;\n            data.responses = responses;\n            data.regulations = regulations;\n        }\n\n        if (data && data.result && data.result.history) {\n            data = data.result.history;\n        }\n\n        if (!data.transactions) data.transactions = {}; // allow it ;)\n        if (!data.regulations) data.regulations = {}; // allow it ;)\n        // TODO: this is temporary fix when the server returns game:null.\n        if (!data.game) {\n            data = {\n                gameDetails: {\n                    gameId: this.gameId,\n                    roundId: data.transactions.roundId,\n                    prevRoundId: data.transactions.prevRoundId,\n                    nextRoundId: data.transactions.nextRoundId,\n                    serverTimeStart: data.transactions.startTime,\n                    serverTimeEnd: data.transactions.endTime,\n                },\n                transactions: {\n                    totalBet: null,\n                    totalWin: null,\n                    balance: {\n                        cash: data.user.balance.cash,\n                        freeBets: data.user.balance.freeBets,\n                        sessionCash: data.user.balance.sessionCash,\n                        sessionFreeBets: data.user.balance.sessionFreeBets,\n                        bonus: data.user.balance.bonus\n                    },\n                },\n                regulations: data.regulations,\n                winDetails: null,\n                reels: null,\n                promo: data.promo\n            };\n\n            data.hasGameData = false;\n        }else{\n            const autofinish = data.game.autofinish;\n\n            if (!data.game.gameData && autofinish && Array.isArray(autofinish) && autofinish.length) {\n                data.game.gameData = data.game.autofinish[autofinish.length-1].gameData;\n            }\n\n            data.hasGameData = true;\n        }\n\n        return data;\n    }\n\n    /**\n     * Filters and maps through the hands object from the response and returns a suitable object for the handleBars\n     * (score,handNames,cards,stakes);\n     * @param {Object} handsObj\n     * @returns {Object} - an object with all the necessary hand data for the history\n     */\n    extractHandInfo(handsObj) {\n        return this.sortHandsOrder(handsObj)\n            .map((hand) => {\n                let uniqueAction = '';\n                if(handsObj[hand].hasBlackjack) uniqueAction = `(${ Language.texts.GH_BLACKJACK })`;\n                if(handsObj[hand].isDoubled) uniqueAction = `(${ Language.texts.GH_DOUBLE_DOWN })`;\n                if(handsObj[hand].offerState === 'offerAccept') uniqueAction = `(${ Language.texts.GH_OFFER_ACCEPTED })`;\n                if(handsObj[hand].isSurrendered) uniqueAction = `(${ Language.texts.GH_SURRENDERED })`;\n\n                return {\n                    score: handsObj[hand].score,\n                    handName: hand.toUpperCase(),\n                    uniqueAction: uniqueAction,\n                    stake: handsObj[hand].stake,\n                    cards: handsObj[hand].cards\n                };\n        });\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all stakes in it, depending on the type.\n     * @param {Object} handsObj\n     * @param {String} type - types of stakes (insurance stakes or normal stakes)\n     * @returns {Number} sum of stakes in hands object\n     */\n    extractTotalStake(handsObj, type) {\n        return this.sortHandsOrder(handsObj)\n            .filter((hand) => type !== 'stake' ? handsObj[hand].hasInsurance : true)\n            .map((hand) => type !== 'stake' ? Number(handsObj[hand].stake)/2 : Number(handsObj[hand].stake))\n            .reduce((a,b) => a + b, 0);\n    }\n\n    /**\n     * This method takes the handsObj from the response and sums up all sidebet stakes for each and plus the insurance stakes\n     * @param {Object} handsObj\n     * @returns {Number} sum of all sidebet stakes in hands object\n     */\n    extractSidebetTotalStake(handsObj) {\n        const insuranceStake = this.extractTotalStake(handsObj, 'insurance');\n        const sidebetStakes = this.sortHandsOrder(handsObj)\n            .filter((hand) => Boolean(handsObj[hand].sideBet))\n            .flatMap(hand => handsObj[hand].sideBet.map((sideBet) => Number(sideBet.stake)))\n            .reduce((total, stake) => total + stake, 0);\n\n        return insuranceStake+sidebetStakes;\n    }\n\n    /**\n     * This method returns a converted hand object, where the keys are upper-cased to match the Texts.js keys, and\n     * the values are converted to Integers.\n     * @param {Object} winObj\n     * @returns {Object}\n     */\n    extractWinDetails(winObj) {\n        const res = this.sortHandsOrder(winObj)\n            .filter((hand) => hand !== 'total')\n            .reduce((acc, win) => {\n                if (win === 'limitedWin') acc['GH_LIMITED_WIN'] = Number(winObj[win]);\n                else acc[win.toUpperCase()] = Number(winObj[win]);\n\n                return acc;\n        }, {});\n\n        return res;\n    }\n\n    /**\n     * This method returns an array of all insurance bets (the names of the insured hand and the amounts).\n     * @param {Object} handsObj\n     * @returns {Array} sidebetsArray - if there are any insurance bets\n     */\n    extractSideBets(handsObj) {\n        let sidebetsArray = [];\n        let hands = this.sortHandsOrder(handsObj)\n        .filter((hand) => {\n            return hand !== 'dealer' && ((handsObj[hand].hasInsurance && !hand.includes('split') || handsObj[hand].sideBet));\n        });\n\n        if(!hands.length) return;\n\n        hands.forEach((handType) => {\n            const hand = handsObj[handType];\n\n            if(hand.sideBet) {\n                hand.sideBet.forEach((sideBet) => {\n                    sidebetsArray.push({\n                        name: Language.texts[sideBet.name.toUpperCase()],\n                        stake: Number(sideBet.stake),\n                    });\n                });\n            }\n\n            if(hand.hasInsurance){\n                sidebetsArray.push({\n                    name: `${Language.texts[handType.toUpperCase()]} ${Language.texts.INSURANCE}`,\n                    stake: Number(hand.stake/2),\n                });\n            }\n\n        });\n\n        return sidebetsArray;\n    }\n\n    /**\n     * Returns an array of handNames with the correct order.\n     * @param {Object} handObj\n     * @returns {Array.<string>}\n     */\n    sortHandsOrder(handObj = {}) {\n        return HANDS_ORDER.filter((hand) => Object.keys(handObj).includes(hand))\n    }\n\n}\n\nmodule.exports = BlackJackParser;","const CacheHelper = require('./CacheHelper');\n\nclass AssetsHelper extends CacheHelper {\n\n  getTranslations(args = {}) {\n    const {\n      games, lang = this.lang, onProgress, onComplete, onError,\n    } = args;\n\n    if (!games) {\n      throw new Error('Invalid game entered.');\n    }\n\n    const result = {};\n\n    const promises = games.map(game => {\n      const override = this.parseGameName(game);\n\n      return this.getTranslationsFile(override)\n        .then((translations) => { // fallback move in setOptions relative to supported languages\n          const subLang = lang.substring(0, 2);\n          const fallbackLang = 'en';\n\n          if (translations[lang]) {\n            result[game] = translations[lang];\n          } else if (translations[subLang]) {\n            result[game] = translations[subLang];\n          } else {\n            result[game] = translations[fallbackLang];\n          }\n\n          if (onProgress) {\n            onProgress({ game, value: result[override] });\n          }\n        });\n    });\n\n    return Promise.all(promises)\n      .then(() => result)\n      .catch((e) => {\n        if (onError) onError(e);\n        return {};\n      });\n  }\n\n  /**\n   * @param {{}} args\n   * @param {Function} args.onComplete\n   * @param {Function} args.onUpdate\n   * @param {Function} args.onError\n   * @param {String} imageType\n   * @param {Array.<String>} args.games\n   * @param {Function} parser\n */\n  getImages(imageType, args = {}, parser) {\n    const {\n      games, onProgress, onComplete, onError,\n    } = args;\n\n    const result = {};\n\n    if (!games) {\n      throw new Error('Invalid games array entered.');\n    }\n\n    if (!imageType) {\n      throw new Error('Specify a image type please. banners | features | ...');\n    }\n\n    for (const game of games) {\n      const override = this.parseGameName(game);\n\n      this.getManifestFile(override).then(file => {\n        const images = file[imageType];\n        result[game] = parser(images, args, imageType);\n\n        if (onProgress) {\n          onProgress({ game, value: result[override] });\n        }\n      }).catch(e => {\n        console.warn(`${game} folder was not found in assets or something else went wrong ${e}`);\n\n        if (onError) {\n          onError(error);\n        }\n      }).then(() => onComplete && onComplete(result));\n    }\n  }\n\n  /**\n   * @param {Array.<Object>} tiles\n   * @param {Object} args\n   * @param {Array} args.games\n   * @param {String} args.lang\n   * @returns {Array.<Object>}\n   */\n  tilesDataParser(tiles, args) {\n    if (!tiles.en) return console.error('History: no english found for game. English language in mandatory');\n\n    return tiles.en.map((tile) => {\n      // Try to find localized tile\n      const localized = tiles[args.lang] && tiles[args.lang].find(item => tile.id === item.id);\n      let result = localized || tile;\n\n      if (!result.src.includes(this.cdn)) {\n        result.src =  `${this.cdn}games/${result.src}`;\n      }\n\n      return result;\n    });\n  }\n\n  getTiles(args) {\n    return this.getImages('tiles', args, this.tilesDataParser.bind(this));\n  }\n\n}\n\nmodule.exports = AssetsHelper;\n","const overrides = require('./Overrides');\n\nclass CacheHelper {\n  constructor({\n    cdn, provider, timestamp, lang,\n  } = {}) {\n    this.cdn = cdn || null;\n    this.provider = provider || null;\n    this.timestamp = timestamp || '';\n    this.lang = lang || 'en';\n    this.cache = {};\n  }\n\n  setOptions({\n    cdn, provider, timestamp, lang,\n  } = {}) {\n    if (cdn) this.cdn = cdn;\n    if (provider) this.provider = provider;\n    if (timestamp) this.timestamp = timestamp;\n    if (lang) this.lang = lang;\n  }\n\n  getManifestFile(game) {\n    return new Promise(resolve => {\n        if (!this.cache[game]) this.cache[game] = {};\n\n        let { manifest } = this.cache[game];\n\n        if (!manifest) {\n          const path = `${this.cdn}games/${game}/files.json${this.timestamp}`;\n\n          fetch(path).then(response => response.json()).then(data => {\n            this.cache[game].manifest = data;\n            return resolve(data);\n          }).catch(e => {\n            console.error(e);\n          });\n        } else {\n            return resolve(manifest);\n        }\n    });\n  }\n\n  getTranslationsFile(game) {\n    return this.getManifestFile(game).then((file) => {\n      let { translations } = this.cache[game];\n\n      if (!translations) {\n        const locale = file.locale.find(f => f.id === 'translations');\n\n        const path = `${this.cdn}games/${locale.src}`;\n\n        return fetch(path)\n          .then((response) => response.json())\n          .then((translations) => {\n            this.cache[game].translations = translations;\n\n            return translations;\n        })\n      } else {\n        return Promise.resolve(translations);\n      }\n\n    });\n  }\n\n  parseGameName(game) {\n    let override = game;\n\n    if (overrides.default[game]) {\n      override = overrides.default[game];\n    }\n\n    if (this.provider && overrides[this.provider] && overrides[this.provider][game]) {\n      override = overrides[this.provider][game];\n    }\n\n    return override;\n  }\n}\n\nmodule.exports =  CacheHelper;\n","const Format = require('./Format');\n\nconst RIGHT_POSITION_CURRENCIES = [\n\t'NOK', // kr symbol\n\t'SEK', // kr symbol\n\t'DKK', // kr symbol\n\t'AMD', // ֏ symbol\n\t'BGN', // лв. symbol\n\t'CZK', // Kč symbol\n\t'GEL', // ₾ symbol\n\t'VN2', // VN2 symbol\n\t'KR2', // KR2 symbol\n\t'ID2', // ID2 symbol\n]\n\nclass Currency {\n\t/** @type {string} */\n\t_code = 'USD';\n\n\t/** @type {string} */\n\t_symbol = '$';\n\n\t/** @type {string} */\n\t_position = 'left';\n\n\t/** @type {string} */\n\t_thousands = ',';\n\n\t/** @type {string} */\n\t_decimals = '.';\n\n\t/** @type {number} */\n\t_digits = 2;\n\n\t/** @type {string} */\n\t_formatting = '$%s';\n\n\tstatic singleton = new Currency({});\n\n\tstatic set(cfg) {\n\t\treturn this.singleton.set(cfg);\n\t}\n\n\tstatic format(number) {\n\t\treturn this.singleton.format(number);\n\t}\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param {Object} object\n\t */\n\tconstructor(object) {\n\t\tif (this._exists(object)) this.set(object);\n\t}\n\n\t/**\n\t * Setup the currency config.\n\t *\n\t * @param {Object} object\n\t * @param {string|null} [object.code]\n\t * @param {string|null} [object.symbol]\n\t * @param {string|null} [object.position]\n\t * @param {string|null} [object.thousands]\n\t * @param {string|null} [object.decimals]\n\t * @param {number|null} [object.digits]\n\t */\n\tset(object) {\n\t\tif (this._exists(object.code)) this._code = object.code;\n\t\tif (this._exists(object.symbol)) this._symbol = object.symbol;\n\t\tif (this._exists(object.position)) {\n\t\t\tthis._position = object.position;\n\t\t} else if (RIGHT_POSITION_CURRENCIES.includes(this._code)) { // if position is defined in object RIGHT_POSITION_CURRENCIES won't be applied\n\t\t\tthis._position = 'right'\n\t\t}\n\t\tif (this._exists(object.thousands)) this._thousands = object.thousands;\n\t\tif (this._exists(object.decimals)) this._decimals = object.decimals;\n\t\tif (this._exists(object.digits)) this._digits = object.digits;\n\t\tthis._formatting = (this._position === 'right') ? '%s' + this._symbol : this._symbol + '%s';\n\t}\n\n\t/**\n\t * Format a number\n\t *\n\t * @param {number} number\n\t * @returns {string}\n\t */\n\tformat(number) {\n\t\treturn Format.currency(number, this._code, this._formatting, this._decimals, this._thousands, this._digits);\n\t}\n\n\t_exists(el) {\n\t\treturn typeof el !== 'undefined' && el !== null;\n\t}\n\t\n\t/** @returns {string} */\n\tget code() {\n\t\treturn this._code;\n\t}\n\n\t/** @returns {string} */\n\tget symbol() {\n\t\treturn this._symbol;\n\t}\n\n\t/** @returns {string} 'left' or 'right' */\n\tget position() {\n\t\treturn this._position;\n\t}\n\n\t/** @returns {string} */\n\tget thousands() {\n\t\treturn this._thousands;\n\t}\n\n\t/** @returns {string} */\n\tget decimals() {\n\t\treturn this._decimals;\n\t}\n\n\t/** @returns {number} */\n\tget digits() {\n\t\treturn this._digits;\n\t}\n\n\t/** @returns {string} */\n\tget formatting() {\n\t\treturn this._formatting;\n\t}\n}\n\nmodule.exports = new Currency({});","\nclass FeatureBuyParser {\n\n  constructor (assetsHelper) {\n    this.assetsHelper = assetsHelper;\n  }\n\n  parse(gameId, language, data) {\n    return this.getTranslations(gameId, language)\n      .then(translations => {\n        if (data.transactions && data.transactions.featureBuyCost) {\n          const currenrFbName = data.transactions.featureBuyName;\n\n          if (translations[currenrFbName]) {\n            data.transactions.featureBuyName = translations[currenrFbName].name || translations[currenrFbName];\n          }\n        }\n\n        return data;\n      });\n  }\n\n  getTranslations(gameId, lang) {\n    return new Promise(resolve => {\n      this.assetsHelper.getTranslations({ games: [gameId], lang })\n        .then((translations) => resolve(translations[gameId] ? translations[gameId].features : []));\n    });\n  }\n}\n\nmodule.exports = FeatureBuyParser;","const EXCLUDED_PROPS = [\n\t'rtp', // rtp is number passed as string but is not money based\n\t'responses' // avoid endless recursion, data is already in .game\n];\n\nclass Format {\n\t/**\n\t * PHP-like number format.\n\t *\n\t * @param {number} number\n\t * @param {number} decimals\n\t * @param {string} decPoint\n\t * @param {string} thousandsSep\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic number(number, decimals, decPoint, thousandsSep) {\n\t\tlet tmp = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n\t\tvar n = !isFinite(+ tmp) ? 0 : + tmp,\n\t\t\tprec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\n\t\t\tsep = (typeof thousandsSep === 'undefined') ? ' ' : thousandsSep,\n\t\t\tdec = (typeof decPoint === 'undefined') ? '.' : decPoint,\n\t\t\ts,\n\t\t\ttoFixedFix = function (n, prec) {\n\t\t\t\tvar k = Math.pow(10, prec);\n\t\t\t\treturn '' + (Math.round(n * k) / k)\n\t\t\t\t\t\t.toFixed(prec);\n\t\t\t};\n\t\t// Fix for IE parseFloat(0.55).toFixed(0) = 0;\n\t\ts = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n\t\tif (s[0].length > 3) {\n\t\t\ts[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n\t\t}\n\t\tif ((s[1] || '')\n\t\t\t\t.length < prec) {\n\t\t\ts[1] = s[1] || '';\n\t\t\ts[1] += new Array(prec - s[1].length + 1)\n\t\t\t\t.join('0');\n\t\t}\n\t\treturn s.join(dec);\n\t}\n\n\t/**\n\t * Format currency using the PHP-like number format.\n\t *\n\t * @param {number} number\n\t * @param {string} currency\n\t * @param {string} [format]\n\t * @param {string} [decimals]\n\t * @param {string} [thousands]\n\t * @param {number} [digits]\n\t * @returns {string}\n\t * @static\n\t */\n\tcurrency(number, currency, format, decimals, thousands, digits) {\n\t\t// Current issues with using const Currencies.\n\t\t// 1 New currencies don't provide format, decimals, thousand and digits data.\n\t\t// 2 Mismatch between slots' format and below values (eg. in slot games JPY has digits = 2\n\t\t// var config = Currencies[currency];\n\t\t//\n\t\t// if (typeof config === 'undefined') {\n\t\t// \tconsole.warn(\"No configuration found for currency\", currency);\n\t\t// \tconfig = {\n\t\t// \t\t\"format\": format,\n\t\t// \t\t\"thousands\": thousands,\n\t\t// \t\t\"decimals\": decimals,\n\t\t// \t\t\"digits\": digits\n\t\t// \t};\n\t\t// \tCurrencies[currency] = config;\n\t\t// }\n\t\t//\n\t\t// var decPoint = decimals || config.decimals;\n\t\t// var thousandsSep = thousands || config.thousands;\n\t\t//\n\t\t// digits = digits || config.digits;\n\t\t// format = format || config.format;\n\n\t\tif (typeof digits == 'undefined' || digits === null) digits = 2;\n\t\tif (typeof format == 'undefined' || format === null) format = '$%s';\n\n\t\tvar l = Math.pow(10, digits);\n\t\tvar a = Math.round(number * l) / l;\n\t\tvar n;\n\n\t\tif (a < 0) n = ('-' + format).replace(\"%s\", Format.number(Math.abs(a), digits, decimals, thousands));\n\t\telse n = format.replace(\"%s\", Format.number(a, digits, decimals, thousands));\n\t\treturn n;\n\t}\n\n\t/**\n\t * Convert any number to 1/something.\n\t *\n\t * @param {number} number\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic fraction(number) {\n\t\treturn '1/' + (number ? (1 / number).toFixed(1) : '0.0');\n\t}\n\n\t/**\n\t * Parse any number as a float, but don't return NaN, just 0.\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @static\n\t */\n\tstatic float(number) {\n\t\treturn number ? parseFloat(number) : '0';\n\t}\n\n\t/**\n\t * Parse any number as an integer, but don't return NaN, just 0.\n\t *\n\t * @param {number} number\n\t * @returns {number}\n\t * @static\n\t */\n\tstatic integer(number) {\n\t\treturn number ? parseInt(number) : '0';\n\t}\n\n\t/**\n\t * Convert any float to percent string.\n\t *\n\t * @param {number} number\n\t * @param {number} digits\n\t * @returns {string}\n\t * @static\n\t */\n\tstatic percent(number, digits) {\n\t\tif (!digits && digits !== 0) digits = 4;\n\t\tvar tail = '';\n\t\tfor (var i = 0; i < digits; i ++) tail += '0';\n\t\treturn number ? (number * 100).toFixed(digits) + '%' : '0.' + tail + '%';\n\t}\n\n\t/**\n\t * @param {object} obj\n\t * Parses the whole response converting money values stored as strings to Number.\n\t * These values are necessary as number for internal calculations such as total wins, rounding corrections.\n\t * Formatting the number back as currency in the template is done by the Currency class.\n\t */\n\tconvertMoneyToNumber(obj) {\n\t\tlet value;\n\n\t\tconst stringIsNumber = (value) => {\n\t\t\treturn typeof value === 'string' && !isNaN(parseFloat(value)) && isFinite(value);\n\t\t}\n\n\t\tfor (let prop in obj) {\n\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\tif (EXCLUDED_PROPS.includes(prop)) continue;\n\n\t\t\t\tvalue = obj[prop];\n\n\t\t\t\tif (typeof value === 'object') {\n\t\t\t\t\tthis.convertMoneyToNumber(value);\n\t\t\t\t} else if (stringIsNumber(value)) {\n\t\t\t\t\tobj[prop] = parseFloat(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nmodule.exports = new Format({});","const Texts = require('../config/Texts');\nconst Config = require('../config/Config');\n\n/**\n * Exposes singleton with preset texts for a given language code.\n * Usage: call required class with language code param (constructor or change method),\n * elsewhere - only require and call Language.texts.KEY_NAME\n */\nclass Language {\n    /**\n     * Singleton\n     * @type {Language}\n     * @private\n     */\n\tstatic _instance = null;\n\n    /**\n     * @type {string}\n     * @private\n     */\n\t_code = '';\n\n    /**\n     * @type {Object}\n     * @private\n     */\n\t_texts = null;\n\n    /**\n     * @param {string} code\n     */\n\tconstructor(code) {\n\t\tif (!Config.defaults.lang) {\n\t\t\tthrow new Error('Missing default language.');\n\t\t}\n\n\t\tcode = Language.supported(code);\n\n\t\tif (!Language._default) {\n\t\t\tthis._code = code;\n\t\t\tthis._texts = Texts[code];\n\t\t\tLanguage._instance = this;\n\t\t} else {\n\t\t\tconsole.warn('Language has already been instantiated.');\n\t\t}\n\t}\n\n    /**\n     * @param {string} code\n     */\n\tstatic change(code) {\n\t\tconst instance = Language.instance;\n\n\t\tcode = Language.supported(code);\n\n\t\tinstance._code = code;\n\t\tinstance._texts = Texts[code];\n\t\tconsole.info('Language changed to:', code);\n\t}\n\n    /**\n     * @returns {Language}\n     */\n\tstatic get instance() {\n\t\tif (!Language._instance) Language._instance = new Language(Config.defaults.lang);\n\n\t\treturn Language._instance;\n\t}\n\n    /**\n     * @returns {Object} current language texts\n     */\n\tstatic get texts() {\n\t\treturn Language.instance._texts;\n\t}\n\n    /**\n     * Code support check with fallbacks\n     * @param code\n     * @returns {string} original code if supported, fallback to base or default if not\n     */\n\tstatic supported(code) {\n\t\tif (typeof code === 'undefined') return Config.defaults.lang;\n\t\tif (!Texts.hasOwnProperty(code)) {\n\t\t\tlet baseCode = code.substr(0, 2); // for example en-US => en\n\n\t\t\tif (!Texts.hasOwnProperty(baseCode)) {\n\t\t\t\tconsole.error(`Language code was not found: ${code}, falling back to default: ${Config.defaults.lang}`);\n\n\t\t\t\treturn Config.defaults.lang;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`Language was not found: ${code}, fallback available: ${baseCode}`);\n\n\t\t\t\treturn baseCode;\n\t\t\t}\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n     * @returns {String} current language code\n     */\n\tstatic currentCode() {\n\t\treturn Language.instance._code.toLowerCase().trim();\n\t}\n}\n\nmodule.exports = Language;\n","module.exports = {\n    default: {\n      PlatinumBlackjack: 'PlatinumBlackjackSideBets',\n      BlackjackOriginal: 'BlackjackPremium3H',\n      BlackjackOriginalSideBets: 'BlackjackPremium3HPlus',\n      BlackjackOriginalCashOut: 'BlackjackPremium3HCashOut',\n      BlackjackClassic: 'BlackjackStandard3H',\n      RouletteClassic: 'RouletteEuropean',\n      RouletteOriginalMoneyBack: 'RouletteMoneyBack',\n      RouletteOriginalStats: 'RoulettePremiumPlus',\n      RoulettePremium: 'RoulettePremium2018',\n      PaddyPowerGoldHaxe: 'PaddyPowerGold',\n    },\n    paddyMars: {\n      PlatinumBlackjack: 'PlatinumBlackjackSideBets',\n      PaddyPowerGold: 'PaddyPowerGoldPaddy',\n      PaddyPowerGoldHaxe: 'PaddyPowerGoldPaddy',\n      PaddysLuckyMine: 'PaddysLuckyMinePaddy',\n      BlackjackOriginal: 'BlackjackPremium3HPaddy',\n      BlackjackOriginalSideBets: 'BlackjackPremium3HPlusPaddy',\n      BlackjackOriginalCashOut: 'BlackjackPremium3HCashOutPaddy',\n      BlackjackClassic: 'BlackjackStandard3HPaddy',\n      BlackjackPremiumSideBets: 'BlackjackPremiumSideBetsPaddy',\n      RouletteClassic: 'RouletteEuropeanPaddy',\n      RouletteOriginalMoneyBack: 'RouletteMoneyBackPaddy',\n      RouletteOriginalStats: 'RoulettePremiumPlusPaddy',\n      RoulettePremium: 'RoulettePremium2018Paddy',\n    },\n  };","const Currency = require ('../utils/Currency');\nconst Handlebars = require('hbsfy/runtime');\nconst Language = require('./Language');\nconst Config = require('../config/Config');\n\nconst toSlash = (string) => string.replace(/(?:^|\\.?)([A-Z])/g, (x, y) => `_${y}`).replace(/^_/, '').toUpperCase();\nconst ROULETTE_COLORS = {\n\tred: [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36],\n\tblack: [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35],\n};\nconst SUITS = [\n\t{ code: 'c', value: 'clubs'},\n\t{ code: 'd', value: 'diamonds'},\n\t{ code: 'h', value: 'hearts'},\n\t{ code: 's', value: 'spades'},\n];\n\nHandlebars.registerHelper('getCardRank', (card) => {\n    return card.split('')[0];\n});\n\nHandlebars.registerHelper('sum', function (first, second) {\n\treturn parseInt(first) + parseInt(second);\n});\n\nHandlebars.registerHelper('ifCond', function (v1, v2, options) {\n\tif (v1 === v2) {\n\t\treturn options.fn(this);\n\t}\n\n\treturn options.inverse(this);\n});\n\nHandlebars.registerHelper('ifNot', function (v1, v2, options) {\n\tif (v1 !== v2) {\n\t\treturn options.fn(this);\n\t}\n\n\treturn options.inverse(this);\n});\n\nHandlebars.registerHelper('formatSum', function (sum, hideDecimal, hideZero) {\n\tif (hideZero && sum === 0) return '';\n\n\tCurrency.set({ digits: hideDecimal === true ? 0 : 2 });\n\n\treturn Currency.format(sum);\n});\n\nHandlebars.registerHelper('selectLastElement', function(array) {\n\treturn array[array.length-1];\n});\n\nHandlebars.registerHelper('math', function (lvalue, operator, rvalue, options) {\n\tlvalue = parseFloat(lvalue);\n\trvalue = parseFloat(rvalue);\n\n\treturn {\n\t\t'+': lvalue + rvalue,\n\t\t'-': lvalue - rvalue,\n\t\t'*': lvalue * rvalue,\n\t\t'/': lvalue / rvalue,\n\t\t'%': lvalue % rvalue,\n\t}[operator];\n});\n\nHandlebars.registerHelper('compare', function (lvalue, comparator, rvalue) {\n\tlvalue = parseFloat(lvalue);\n\trvalue = parseFloat(rvalue);\n\n\treturn {\n\t\t'>': lvalue > rvalue,\n\t\t'<': lvalue < rvalue,\n\t\t'=': lvalue == rvalue,\n\t\t'>=': lvalue <= rvalue,\n\t\t'<=': lvalue >= rvalue,\n\t}[comparator];\n});\n\nHandlebars.registerHelper('isSelected', function (selectedIndex, currentIndex) {\n\treturn selectedIndex === currentIndex ? 'selected' : '';\n});\n\nHandlebars.registerHelper('localTime', function (timeStringUTC) {\n\treturn moment.utc(timeStringUTC).local().format('YYYY-MM-DD HH:mm:ss (Z)');\n});\n\nHandlebars.registerHelper('ifNum', function (num, options) {\n\tif (_.isNumber(num)) {\n\t\treturn options.fn(this);\n\t} else {\n\t\treturn options.inverse(this);\n\t}\n});\n\nHandlebars.registerHelper('notUndefinedOrNull', function (value) {\n\treturn typeof(value) !== 'undefined' && value !== null;\n});\n\nHandlebars.registerHelper('translate', function (keyword) {\n\treturn Language.texts[keyword];\n});\n\nHandlebars.registerHelper('translateTableWinner', function (win) {\n\tif (win === 'banker') return Language.texts.GH_BANKER;\n\tif (win === 'player') return Language.texts.GH_PLAYER;\n\tif (win === 'tie') return Language.texts.GH_TIE;\n\tif (win === 'bankerPair') return Language.texts.GH_BANKER_PAIR;\n\tif (win === 'playerPair') return Language.texts.GH_PLAYER_PAIR;\n\tif (win === 'total') return Language.texts.GH_GAME_TOTAL;\n\n\treturn '';\n});\n\nHandlebars.registerHelper('translateFromKey', function(key, loose) {\n    key = key || '';\n    let text = Language.texts[`GH_${toSlash(key)}`];\n\n    if (text) return text;\n\n    // this is only added if we want to skip the warn for some reason\n    let skipWarn = typeof loose === 'boolean' && loose;\n    !skipWarn && console.warn('There is no text for key: ', key);\n\n    return key;\n});\n\nHandlebars.registerHelper('getNumberColor', function (number) {\n\tif (typeof number === 'string') number = parseInt(number);\n\treturn Object.keys(ROULETTE_COLORS).reduce((acc, color) => (ROULETTE_COLORS[color].includes(number)) ? color : acc, 'green');\n});\n\nHandlebars.registerHelper('translateScratchGameText', function(keyword) {\n\tswitch(keyword) {\n\t\tcase 'matchNumbersBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_NUMBER_BONUS;\n\t\tcase 'sumOfSevenBonus':\n\t\t\treturn Language.texts.SCRATCH_SUM_OF_SEVEN_BONUS;\n\t\tcase 'matchSymbolsBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_SYMBOLS_BONUS;\n\t\tcase 'matchAmountsBonus':\n\t\t\treturn Language.texts.SCRATCH_MATCH_AMOUNTS_BONUS;\n\t\tcase 'freeCard':\n\t\t\treturn Language.texts.SCRATCH_FREE_CARD;\n\t\tcase 'cashPrize':\n\t\t\treturn Language.texts.SCRATCH_CASH_PRIZE;\n\t}\n\treturn `!!${keyword}!!`;\n});\n\nHandlebars.registerHelper('translateOtherWin', function (keyword) {\n\tif (keyword === 'bonus' || keyword === 'multiPickerBonus') {\n\t\treturn Language.texts.GH_BONUS_WIN;\n\t}\telse if (keyword === 'instantWin' || keyword === 'instantWinMega'\n            || keyword === 'instantWin_1' || keyword === 'instantWin_2'\n            || keyword === 'instantWin_3' || keyword === 'instantWin_4'\n            || keyword === 'instantWin_5') {\n\t\treturn Language.texts.GH_INSTANT_WIN;\n\t}\telse if (keyword === 'multiplier') {\n\t\treturn Language.texts.GH_MULTIPLIER_WINS;\n\t}\telse if (keyword === 'gamble') {\n\t\treturn Language.texts.GH_GAMBLE_WINS;\n\t}\telse if (keyword === 'limitedWin') {\n\t\treturn Language.texts.GH_LIMITED_WIN;\n\t} \telse if (keyword === 'modifierWin') {\n\t\treturn Language.texts.GH_MODIFIER_WIN;\n\t}\telse if (keyword === 'dragonWheel') {\n\t\treturn Language.texts.GH_MULTIPLIER_WINS;\n\t}\telse if (keyword === 'totalCoinsWin') {\n\t\treturn Language.texts.TOTAL_COINS_WIN;\n\t} \telse if (keyword === 'winExchange') {\n\t\treturn Language.texts.WIN_EXCHANGE;\n  \t} \telse if (keyword === 'halfCollected') {\n\t\treturn Language.texts.HALF_COLLECT;\n  \t} \telse if (keyword === 'fullCollected') {\n\t\treturn Language.texts.FULL_COLLECT;\n  \t}\telse {\n\t\treturn `!!${keyword}!!`;\n\t}\n});\n\nHandlebars.registerHelper('getTileAsset', function (tiles, tileId) {\n\tlet tile = tiles.find((item) => item.id === `img_tile${tileId}`);\n    if(!tile) return console.error(`History: img_tile${tileId} image not found`);\n    return tile.src;\n});\n\nHandlebars.registerHelper('getCardAsset', function (tiles, card) {\n\tconst tile = tiles.find((item) => item.id === `card-${card}`);\n\n\tif(!tile) return console.error(`History: card-${card} image not found`);\n\n\treturn tile.src;\n});\n\nHandlebars.registerHelper('getCardSuit', (card) => {\n\treturn getCardSuit(card);\n});\n\nHandlebars.registerHelper('getCardSuitAsset', (tiles, card) => {\n\tconst suit = getCardSuit(card);\n\tconst tile = tiles.find((item) => item.id === suit);\n\n\tif(!tile) return console.error(`History: ${suit} image not found`);\n\n\treturn tile.src;\n});\n\nHandlebars.registerHelper('isFreeSpinsScatterWin', function (gameId, freeSpins) {\n\treturn _.contains(Config.freeSpinsScatterWin, gameId) && freeSpins && freeSpins.length;\n});\n\nHandlebars.registerHelper('isWays', function (gameId) {\n\treturn _.contains(Config.ways, gameId);\n});\n\nHandlebars.registerHelper('isCluster', function (gameId) {\n\treturn _.contains(Config.cluster, gameId);\n});\n\nHandlebars.registerHelper('isScatter', function (gameId) {\n\treturn _.contains(Config.scatterWins, gameId);\n});\n\nHandlebars.registerHelper('isDemo', function (promo) {\n\treturn promo && promo.mode === 'demo'\n});\n\nHandlebars.registerHelper('isVoucher', function (promo) {\n\treturn promo && promo.type === 'voucher'\n});\n\nHandlebars.registerHelper('validNumber', function (amount) {\n\treturn (typeof amount === 'number' || !isNaN(parseInt(amount))) &&\n\t\tparseInt(amount) !== 0;\n});\n\nHandlebars.registerHelper('hasHorizontalReels', function (gameId) {\n\treturn (_.contains(Config.horizontalReels.bottom, gameId) || _.contains(Config.horizontalReels.topAndBottom, gameId));\n});\n\nHandlebars.registerHelper('hasMultiplierFeature', function (gameId) {\n\treturn _.contains(Config.hasMultipliers, gameId);\n});\n\nHandlebars.registerHelper('hasMultipliers', function (root, reel, index, options) {\n\tconst { data: { winDetails: { multipliers = [] } = {} } } = root;\n\tconst { type = 0 } = options;\n\n\tconst { multiplier } = getSpecific(multipliers, reel, index, type);\n\n\treturn typeof multiplier !== 'undefined';\n});\n\nHandlebars.registerHelper('getMultipliers', function (root, reel, index, options) {\n\tconst { tiles, data: { winDetails: { multipliers } } } = root;\n\tconst { type = 0 } = options;\n\n\tconst { multiplier } = getSpecific(multipliers, reel, index, type);\n\n\tconst image = tiles.find(asset => asset.id === `multiplier_${multiplier}`);\n\tif (!image) return console.error(`History: multiplier_${multiplier} image not found`);\n\n\treturn image.src;\n});\n\nconst getSpecific = (objects, reel, index, type) => {\n\tconst found = objects.find(object => object.reel === reel && object.index === index && object.type === type);\n\n\treturn typeof found !== 'undefined' ? found : {};\n}\n\nlet getCardSuit = (card) => {\n\tlet suitCode = card.split('')[1].toLowerCase(); //'c', 'd'...\n\tlet suitObj = SUITS.find((suit) => suit.code === suitCode);\n\treturn suitObj.value;\n};\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <div class=\\\"player border-base\\\">\\n            <h3 class=\\\"label-type\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_PLAYER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"hand cards-\"\n    + alias3(container.lambda(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1.length : stack1), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"card card-1\\\">\\n                    <img src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"card card-2\\\">\\n                    <img src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n        </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <div class=\\\"card card-0\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    return \"                    <div class=\\\"card card-0 hidden\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),0,{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <div class=\\\"banker border-base\\\">\\n            <h3 class=\\\"label-type\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_BANKER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"hand cards-\"\n    + alias3(container.lambda(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1.length : stack1), depth0))\n    + \"\\\">\\n                <div class=\\\"card card-0\\\">\\n                    <img  src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"card card-1\\\">\\n                    <img  src=\\\"\"\n    + alias3((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || alias2).call(alias1,(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                </div>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"            </div>\\n        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <div class=\\\"card card-2\\\">\\n                        <img  src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1)) != null ? stack1[\"2\"] : stack1),{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    return \"                    <div class=\\\"card card-2 hidden\\\">\\n                        <img src=\\\"\"\n    + container.escapeExpression((helpers.getCardAsset || (depth0 && depth0.getCardAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.tiles : depth0),0,{\"name\":\"getCardAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\" >\\n                    </div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"row cards\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.player : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.cards : stack1)) != null ? stack1.banker : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"row hands\\\">\\n    <div class=\\\"score\\\"></div>\\n    <div class=\\\"cards\\\"></div>\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div>\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_HANDS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n        <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.handScores : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n        </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda;\n\n  return \"                <div class=\\\"handLabels\\\">\\n                    <div class=\\\"left big\\\">\"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.handName : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" \"\n    + alias2(alias3((depth0 != null ? depth0.uniqueAction : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n                <div class=\\\"hand\\\">\\n                    <div class=\\\"score\\\">\"\n    + alias2(alias3((depth0 != null ? depth0.score : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.cards : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"right\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"cards\\\">\\n                            <div class=\\\"\"\n    + alias3((helpers.getCardSuit || (depth0 && depth0.getCardSuit) || alias2).call(alias1,depth0,{\"name\":\"getCardSuit\",\"hash\":{},\"data\":data}))\n    + \"\\\" style=\\\"background-image: url('\"\n    + alias3((helpers.getCardSuitAsset || (depth0 && depth0.getCardSuitAsset) || alias2).call(alias1,(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getCardSuitAsset\",\"hash\":{},\"data\":data}))\n    + \"')\\\">\"\n    + alias3((helpers.getCardRank || (depth0 && depth0.getCardRank) || alias2).call(alias1,depth0,{\"name\":\"getCardRank\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SIDE_BETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalSideBetsStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n            </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), alias3=helpers.helperMissing;\n\n  return \"                    <div class=\\\"handLabels withPadding\\\">\\n                        <div class=\\\"left\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.name : depth0), depth0))\n    + \"</div>\\n                        <div class=\\\"right\\\">\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || alias3).call(alias2,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" - \"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || alias3).call(alias2,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                    </div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <div class=\\\"handLabels withPadding\\\">\\n                    <div class=\\\"left\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</div>\\n                    <div class=\\\"right\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                </div>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n    return \"            <div>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td class=\\\"right\\\">\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.hands : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n<div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.program(16, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_WINNER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.translateTableWinner || (depth0 && depth0.translateTableWinner) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.winner : stack1),{\"name\":\"translateTableWinner\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr>\\n                <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                    <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n    return \"            <td>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.stake : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    </table>\\n</div>\\n\\n<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"            <tr class=\\\"mainRow\\\">\\n                <!-- TODO the second 'true' parameter is added only added to skip the warn 'There is no text for key' -->\\n                <td>\"\n    + container.escapeExpression((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || helpers.helperMissing).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                \"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n            </tr>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.sub : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n    return \"<td>\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.total : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sub : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr class=\\\"subRow\\\">\\n                        <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                    </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td>\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                <tr class=\\\"mainRow\\\">\\n                    <td>\"\n    + container.escapeExpression((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || helpers.helperMissing).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                    \"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.total : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                </tr>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.sub : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"15\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.sub : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"16\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"subRow\\\">\\n                            <td>\"\n    + alias3((helpers.translateFromKey || (depth0 && depth0.translateFromKey) || alias2).call(alias1,(data && data.key),true,{\"name\":\"translateFromKey\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                            <td>\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    return \"            <td>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<div class=\\\"column\\\">\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.stake : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\\n<div class=\\\"column\\\">\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </table>\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div>\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_HANDS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n        <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.handScores : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n        </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\";\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                <div class=\\\"handLabels\\\">\\n                    <div class=\\\"left italic\\\">\"\n    + alias2(alias1((depth0 != null ? depth0.handName : depth0), depth0))\n    + \" \"\n    + alias2(alias1((depth0 != null ? depth0.combinationName : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.unless.call(alias3,(data && data.first),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n                <div class=\\\"hand\\\">\\n                    <div class=\\\"score\\\">\"\n    + alias2(alias1((depth0 != null ? depth0.score : depth0), depth0))\n    + \"</div>\\n\"\n    + ((stack1 = helpers.each.call(alias3,(depth0 != null ? depth0.cards : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"right\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.score : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <div class=\\\"cards\\\">\\n                            <div class=\\\"\"\n    + alias3((helpers.getCardSuit || (depth0 && depth0.getCardSuit) || alias2).call(alias1,depth0,{\"name\":\"getCardSuit\",\"hash\":{},\"data\":data}))\n    + \"\\\" style=\\\"background-image: url('\"\n    + alias3(container.lambda((depths[2] != null ? depths[2].assetsPath : depths[2]), depth0))\n    + alias3((helpers.getCardSuitAsset || (depth0 && depth0.getCardSuitAsset) || alias2).call(alias1,depth0,((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"getCardSuitAsset\",\"hash\":{},\"data\":data}))\n    + \"')\\\">\"\n    + alias3((helpers.getCardRank || (depth0 && depth0.getCardRank) || alias2).call(alias1,depth0,{\"name\":\"getCardRank\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                        </div>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SIDE_BETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n            <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.sideBets : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalSideBetsStake : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n            </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), alias3=helpers.helperMissing;\n\n  return \"                    <div class=\\\"handLabels withPadding\\\">\\n                        <div class=\\\"left\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.name : depth0), depth0))\n    + \"</div>\\n                        <div class=\\\"right\\\">\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || alias3).call(alias2,\"STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" - \"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || alias3).call(alias2,(depth0 != null ? depth0.stake : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                    </div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            <div class=\\\"right total withPadding\\\"><span class=\\\"italic\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_TOTAL\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span> - \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <div class=\\\"handLabels withPadding\\\">\\n                    <div class=\\\"left\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</div>\\n                    <div class=\\\"right\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,depth0,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n                </div>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n    return \"            <div>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"</td>\\n            </tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</tr>\\n            <tr>\\n                <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                <td class=\\\"text-right\\\">\"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":</td>\\n                        <td class=\\\"right\\\">\"\n    + alias1(container.lambda(depth0, depth0))\n    + \"</td>\\n                    </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.hands : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n<div>\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_WIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    <div class=\\\"details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.totalWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.program(16, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <div class=\\\"row\\\">\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BALL_POSITION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <div class=\\\"numbers \"\n    + alias3((helpers.getNumberColor || (depth0 && depth0.getNumberColor) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1),{\"name\":\"getNumberColor\",\"hash\":{},\"data\":data}))\n    + \"\\\">\"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1), depth0))\n    + \"</div>\\n    </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWinTotal : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n    return \"    <div class=\\\"row\\\">\\n        <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    </div>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.number : stack1),{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"demo-round-note\\\">\\n    <div class=\\\"demo-round-note-icon\\\">\\n      <i aria-hidden=\\\"true\\\" class=\\\"v-icon material-icons\\\">info</i>\\n    </div>\\n    <div class=\\\"demo-round-note-text\\\">\\n      \"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_SNEAK_PEEK_ACTIVE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n    </div>\\n</div>\\n\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"free-round-note\\\">\\n    <div class=\\\"free-round-note-icon\\\">\\n      <i aria-hidden=\\\"true\\\" class=\\\"v-icon material-icons\\\">info</i>\\n    </div>\\n    <div class=\\\"free-round-note-text\\\">\\n        \"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_FREE_ROUNDS_ACTIVE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n    </div>\\n</div>\\n\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"    <tr class=\\\"server-time-end\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.notUndefinedOrNull || (depth0 && depth0.notUndefinedOrNull) || helpers.helperMissing).call(alias1,depth0,{\"name\":\"notUndefinedOrNull\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"            <tr>\\n                <td>\\n                    <span class=\\\"label\\\">\\n                        \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.key),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias1(container.lambda(depth0, depth0))\n    + \"\\n                    </span>\\n                </td>\\n            </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    <tr class=\\\"round-id\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                #\"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.roundId : stack1), depth0))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n    <tr class=\\\"server-time-start\\\">\\n        <td>\\n            <span class=\\\"label\\\">\\n                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n            </span>\\n            <span class=\\\"value\\\">\\n                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.detailsData : depth0)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n            </span>\\n        </td>\\n    </tr>\\n\"\n    + ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || alias2).call(alias1,(depth0 != null ? depth0.compactView : depth0),true,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.regulationsData : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</table>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"<div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias4),(typeof helper === \"function\" ? helper.call(alias3,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\">\\n    <span class=\\\"label\\\">\\n        <a>\\n            \"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || alias4).call(alias3,(depth0 != null ? depth0.label : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n        </a>\\n    </span>\\n    <span class=\\\"value currency-amount\\\">\\n        \"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    </span>\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.winLinesDetails,depth0,{\"name\":\"winLinesDetails\",\"hash\":{\"gameId\":(depth0 != null ? depth0.gameId : depth0),\"lineIdPrefix\":(depth0 != null ? depth0.prefix : depth0),\"linesData\":(depth0 != null ? depth0.winLines : depth0)},\"data\":data,\"indent\":\"    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"<div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias4),(typeof helper === \"function\" ? helper.call(alias3,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias2(alias1((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.winLineSet : depth0), depth0))\n    + \"\\\">\\n    <span class=\\\"label\\\">\\n        <a>\\n            \"\n    + alias2((helpers.translate || (depth0 && depth0.translate) || alias4).call(alias3,(depth0 != null ? depth0.label : depth0),{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias2((helpers.math || (depth0 && depth0.math) || alias4).call(alias3,(depth0 != null ? depth0.index : depth0),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n        </a>\\n    </span>\\n    <span class=\\\"value\\\">\"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,(depth0 != null ? depth0.amount : depth0),false,(depth0 != null ? depth0.hide0s : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n</div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,(depth0 != null ? depth0.winLines : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"            <td css='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            </td>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(8, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                        <div>\\n                            <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultiplierFeature || (depth0 && depth0.hasMultiplierFeature) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.gameId),{\"name\":\"hasMultiplierFeature\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                        </div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || helpers.helperMissing).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),depths[2],{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                    <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),depths[2],{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    return \"                        <div>\\n                        </div>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(11, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"11\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"            </td>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                    <div>\\n                        <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultiplierFeature || (depth0 && depth0.hasMultiplierFeature) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.gameId),{\"name\":\"hasMultiplierFeature\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                    </div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || helpers.helperMissing).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),depths[2],{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),depths[2],{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"<tr class='spin-screen-\"\n    + alias3(((helper = (helper = helpers.prefix || (depth0 != null ? depth0.prefix : depth0)) != null ? helper : alias2),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"prefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \" spin-screen' style=\\\"display: none;\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || alias2).call(alias1,(depth0 != null ? depth0.gId : depth0),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.program(10, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"</tr>\";\n},\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"total-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FEATURE_BUY_COST\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyCost : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FEATURE_BUY_NAME\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyName : stack1), depth0))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"total-win\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr>\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.limitedWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.compactView : depth0),true,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3(helpers.log.call(alias1,(depth0 != null ? depth0.transactionDetails : depth0),{\"name\":\"log\",\"hash\":{},\"data\":data}))\n    + \"\\n\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.cash : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_FREEBETS_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers.unless.call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.promo : depth0),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"15\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.bonus : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SESSION_BALANCE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"        <tr class=\\\"balance-title\\\">\\n            <td>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SESSION_FREEBETS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n        </tr>\\n\\n        <tr class=\\\"balance-before-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_BEFORE_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-after-stake\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AFTER_STAKE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.afterBet : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            </td>\\n        </tr>\\n\\n        <tr class=\\\"balance-at-end\\\">\\n            <td>\\n                <span class=\\\"label\\\">\\n                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_AT_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                </span>\\n                <span class=\\\"value currency-amount right\\\">\\n                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atEnd : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                </span>\\n            <td>\\n        </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"<table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalBet : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.featureBuyCost : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.limitedWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,(depth0 != null ? depth0.promo : depth0),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.freeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.isBonusRound : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionCash : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.validNumber || (depth0 && depth0.validNumber) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.transactionDetails : depth0)) != null ? stack1.balance : stack1)) != null ? stack1.sessionFreeBets : stack1)) != null ? stack1.atStart : stack1),{\"name\":\"validNumber\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n</table>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"            <div class=\\\"line-details fs row\\\" data-freespin-id=\\\"\"\n    + alias2(alias1((depths[1] != null ? depths[1].lineIdPrefix : depths[1]), depth0))\n    + alias2(alias1((depths[1] != null ? depths[1].type : depths[1]), depth0))\n    + \"\\\" data-line-id=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.index : depth0), depth0))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias2(alias1((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias2(alias1((depths[1] != null ? depths[1].winLineSet : depths[1]), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias3,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.program(6, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"            </div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                    <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                        <br>\\n                        <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.program(12, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,(depths[1] != null ? depths[1].gameId : depths[1]),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.program(10, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <br>\\n                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <span class=\\\"line-number label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.sum || (depth0 && depth0.sum) || alias2).call(alias1,(depth0 != null ? depth0.index : depth0),1,{\"name\":\"sum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                \";\n},\"13\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                        <br>\\n                        <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression, alias5=container.lambda;\n\n  return \"<div class=\\\"wins lines-list lines-list-\"\n    + alias4(((helper = (helper = helpers.lineIdPrefix || (depth0 != null ? depth0.lineIdPrefix : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"lineIdPrefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias4(alias5((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias4(((helper = (helper = helpers.lineIdPrefix || (depth0 != null ? depth0.lineIdPrefix : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"lineIdPrefix\",\"hash\":{},\"data\":data}) : helper)))\n    + alias4(alias5((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.linesData : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\";\n},\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    return \"<div class=\\\"casino-game-history message\\\">\\n    History is initialized here!\\n</div>\";\n},\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <td align=\\\"center\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(6, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                <span class=\\\"symbol\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.symbol : depth0), depth0))\n    + \"</span>\\n                                <span class=\\\"amount\\\">\"\n    + alias1((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.prize : depth0),false,true,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                <img src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depths[1] != null ? depths[1].tiles : depths[1]),99,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" class=\\\"diamond\\\" />\\n\";\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.dices : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            <td align=\\\"center\\\">\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </tr>\\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n    return \"                                <td align=\\\"center\\\">\"\n    + container.escapeExpression(container.lambda(depth0, depth0))\n    + \"</td>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                    <tr>\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n\";\n},\"12\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                        <td align=\\\"center\\\"><img src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" /></td>\\n\";\n},\"14\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                    <tr>\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n\";\n},\"15\":function(container,depth0,helpers,partials,data) {\n    return \"                        <td align=\\\"center\\\">\"\n    + container.escapeExpression((helpers.formatSum || (depth0 && depth0.formatSum) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,false,true,{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"18\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_ID\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                #\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.roundId : stack1), depth0))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_START\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeStart : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SERVER_TIME_END\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value\\\">\\n                                \"\n    + alias3((helpers.localTime || (depth0 && depth0.localTime) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.serverTimeEnd : stack1),{\"name\":\"localTime\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n                </table>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"22\":function(container,depth0,helpers,partials,data) {\n    return \"            <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=helpers.helperMissing;\n\n  return \"                    <tr>\\n                        <td colspan=\\\"2\\\">\\n                            <div class=\\\"item free-spin-details free-spin-details-\"\n    + alias2(alias1(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.type : stack1), depth0))\n    + \"\\\" data-freespin-id=\\\"\"\n    + alias2(alias1(((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.type : stack1), depth0))\n    + \"\\\">\\n                                <span class=\\\"label\\\">\\n                                    <a>\\n                                        \"\n    + alias2((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias4).call(alias3,\"freeCard\",{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \"\\n                                    </a>\\n                                </span>\\n                                <span class=\\\"value currency-amount\\\">\"\n    + alias2((helpers.formatSum || (depth0 && depth0.formatSum) || alias4).call(alias3,((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.amount : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                            </div>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.otherWins : stack1)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias3,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.scratchWins : stack1)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        </td>\\n                    </tr>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(27, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"27\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <div class=\\\"details-row\\\">\\n                                            <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                            <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                        </div>\\n\";\n},\"29\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </div>\\n\";\n},\"30\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(31, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"31\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <div class=\\\"details-row\\\">\\n                                            <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                            <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                        </div>\\n\";\n},\"33\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(34, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"34\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"36\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(37, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"37\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(38, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"40\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(41, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"41\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(42, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"42\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr>\\n                        <td>\\n                            <span class=\\\"label\\\">\\n                                \"\n    + alias3((helpers.translateScratchGameText || (depth0 && depth0.translateScratchGameText) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateScratchGameText\",\"hash\":{},\"data\":data}))\n    + \":\\n                            </span>\\n                            <span class=\\\"value currency-amount\\\">\\n                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                            </span>\\n                        </td>\\n                    </tr>\\n\";\n},\"44\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\\n                        <span class=\\\"label\\\">\\n                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                        </span>\\n                        <span class=\\\"value currency-amount\\\">\\n                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </span>\\n                    </td>\\n                </tr>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(47, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"47\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"            <tr class=\\\"totalWin\\\">\\n                <td>\\n                    <span class=\\\"label\\\">\\n                        \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                    </span>\\n                    <span class=\\\"value currency-amount\\\">\\n                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                    </span>\\n                </td>\\n            </tr>\\n\";\n},\"49\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                <tr>\\n                    <td>\\n                        <span class=\\\"label\\\">\\n                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LIMITED_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                        </span>\\n                        <span class=\\\"value currency-amount right\\\">\\n                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                        </span>\\n                    </td>\\n                </tr>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"<div class=\\\"casino-game-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n    <table class=\\\"scratch-game-history-result\\\">\\n        <tr>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_NUMBER_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n                    <tr>\\n                        <td align=\\\"center\\\" valign=\\\"middle\\\">\\n                            \"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.luckySymbols : stack1)) != null ? stack1[\"0\"] : stack1), depth0))\n    + \"\\n                        </td>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.prizes : stack1)) != null ? stack1[\"0\"] : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n                    <tr>\\n                        <td align=\\\"center\\\" valign=\\\"middle\\\">\\n                            \"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.luckySymbols : stack1)) != null ? stack1[\"1\"] : stack1), depth0))\n    + \"\\n                        </td>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = ((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.matchNumbersBonus : stack1)) != null ? stack1.prizes : stack1)) != null ? stack1[\"1\"] : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    </tr>\\n                </table>\\n            </td>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_SUM_OF_SEVEN_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.sumOfSevenBonus : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n        </tr>\\n        <tr>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_SYMBOLS_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.screens : stack1)) != null ? stack1.symbols : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(11, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n            <td valign=\\\"top\\\" width=\\\"50%\\\" class=\\\"scratch-game-cell\\\">\\n                <h3 class=\\\"scratchh3\\\">\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"SCRATCH_MATCH_AMOUNTS_BONUS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n                <table width=\\\"100%\\\">\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.screens : stack1)) != null ? stack1.amounts : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                </table>\\n            </td>\\n        </tr>\\n    </table>\\n    <div class=\\\"details-column scratch-details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0, blockParams, depths),\"inverse\":container.program(22, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n        <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_RESULTS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n        <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeCard : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(33, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(36, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.scratchWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(40, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(44, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(46, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.limitedWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(49, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </table>\\n    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"\t    <div class=\\\"screen-scale-wrapper\\\">\\n        <div class=\\\"spin-screen-wrapper result-column\\\">\\n\t        <svg viewBox=\\\"0 0 800 1000\\\" preserveAspectRatio=\\\"xMinYMin slice\\\" width=\\\"800\\\" height=\\\"1000\\\" class=\\\"lines-overlay\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\t            <g class=\\\"lines-container\\\"></g>\\n\t        </svg>\\n\\n\t        <table class=\\\"main-screen reels\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\t            <tr class='spin-screen-0 spin-screen'>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.program(13, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"\t            </tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(27, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\t        </table>\\n\t    </div>\\n\t</div>\\n\";\n},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"6\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.program(11, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                                        <div>\\n                                            <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultiplierFeature || (depth0 && depth0.hasMultiplierFeature) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.gameId),{\"name\":\"hasMultiplierFeature\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                                        </div>\\n\";\n},\"8\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || helpers.helperMissing).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                                    <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n    return \"                                        <div>\\n                                        </div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                            <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(15, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </td>\\n\";\n},\"15\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                                    <div>\\n                                        <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultiplierFeature || (depth0 && depth0.hasMultiplierFeature) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.gameId),{\"name\":\"hasMultiplierFeature\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                        <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,((stack1 = (data && data.root)) && stack1.tiles),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                                    </div>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || helpers.helperMissing).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"17\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                                <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"19\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"20\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"22\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"23\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                        <!-- TODO TITLE -->\\n\"\n    + ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"24\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"25\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"index\":(data && data.index),\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"27\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"29\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"30\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(31, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"31\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":((stack1 = (data && data.root)) && stack1.tiles),\"aPath\":((stack1 = (data && data.root)) && stack1.assetsPath),\"gId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"33\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isDemo || (depth0 && depth0.isDemo) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isDemo\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(34, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(36, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(38, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(40, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(42, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"34\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.demoRoundNote,depth0,{\"name\":\"demoRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"36\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.freeRoundNote,depth0,{\"name\":\"freeRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"40\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_TRANSACTIONS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"42\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"\\n            <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SPIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n            <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n\t\t\t\t\t<tr>\\n                        <!-- Initial Spin -->\\n                        <td colspan=\\\"2\\\" class=\\\"group-title free-spin-details free-spin-details-0 initial-spin\\\" data-freespin-id=\\\"0\\\" data-spin-winline-set=\\\"\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                            <a>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_INITIAL_SPIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</a>\\n                        </td>\\n\t\t\t\t\t</tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(43, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                    <!-- Initial Spin Wins -->\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(45, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(65, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(70, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(73, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(80, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(82, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(88, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(92, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(94, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n            </table>\\n\\n\";\n},\"43\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"symbol-wins\\\">\\n                            <td colspan=\\\"2\\\">\\n                                <div class=\\\"item\\\">\\n                                <span class=\\\"label\\\">\\n                                    \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SYMBOL_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                </span>\\n                                <span class=\\\"value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                </div>\\n                            </td>\\n                        </tr>\\n\";\n},\"45\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                        <tbody class=\\\"lines-list-0\\\" data-freespin-id=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(46, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        </tbody>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(47, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"47\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                    <tr class=\\\"line-details fs\\\" data-freespin-id=\\\"0\\\" data-line-id=\\\"\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),\"-\",\"1\",{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias3(alias4(((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.winDetails)) && stack1.winLineSet), depth0))\n    + \"\\\">\\n                                        <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isFreeSpinsScatterWin || (depth0 && depth0.isFreeSpinsScatterWin) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.winDetails)) && stack1.freeSpins),{\"name\":\"isFreeSpinsScatterWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(48, data, 0),\"inverse\":container.program(50, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                        </td>\\n                                    </tr>\\n\";\n},\"48\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                </span>\\n\";\n},\"50\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(51, data, 0),\"inverse\":container.program(54, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"51\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                </span>\\n                                                <br>\\n                                                <span class=\\\"label\\\">\\n                                                    &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(52, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"52\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"\\n                                                    </span>\\n\";\n},\"54\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(55, data, 0),\"inverse\":container.program(62, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"55\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(56, data, 0),\"inverse\":container.program(58, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                <br>\\n                                                <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(60, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"56\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"58\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"60\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"62\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <span class=\\\"label\\\">\\n                                                    - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\n                                                </span>\\n                                                <span class=\\\"value currency-amount\\\">\\n                                                    \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(63, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            \";\n},\"63\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"65\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_NUDGE_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(66, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"66\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),\"label\":\"GH_NUDGE\"},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"67\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                        <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(68, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                        </div>\\n\";\n},\"68\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                <div class=\\\"details-row\\\">\\n                                                    <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                    <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                </div>\\n\";\n},\"70\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(71, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"71\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId),\"label\":\"GH_RESPIN\"},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"73\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_FREE_SPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(74, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"74\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_FREE_SPIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(75, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"75\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(76, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"76\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                            <tr>\\n\\n                                                <td colspan=\\\"2\\\" class=\\\"respin-in-free-spin\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_RESPIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(77, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                </td>\\n                                            </tr>\\n\";\n},\"77\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                                        <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(78, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                        </div>\\n\";\n},\"78\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                                <div class=\\\"details-row\\\">\\n                                                                    <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                                    <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                                </div>\\n\";\n},\"80\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                        <tr>\\n                            <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                        </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(71, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"82\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(83, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"83\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                            <tr class=\\\"jackpot-win\\\">\\n                                <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(84, data, 0),\"inverse\":container.program(86, data, 0),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n                            </tr>\\n\";\n},\"84\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.jackpotDetails,depth0,{\"name\":\"jackpotDetails\",\"hash\":{\"label\":\"GH_JACKPOT_WIN\",\"gameId\":((stack1 = ((stack1 = ((stack1 = (data && data.root)) && stack1.data)) && stack1.gameDetails)) && stack1.gameId)},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"86\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                        <span class=\\\"label\\\">\\n                                            \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                        </span>\\n                                        <span class=\\\"value currency-amount\\\">\\n                                            \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                        </span>\\n\";\n},\"88\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(89, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"89\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(90, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"90\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr>\\n                                <td>\\n\t\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t</td>\\n                            </tr>\\n\";\n},\"92\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr>\\n\t\t\t\t\t\t\t<td>\\n\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t</td>\\n                        </tr>\\n\";\n},\"94\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                    <tr class=\\\"totalWin\\\">\\n                        <td>\\n\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n\t\t\t\t\t\t\t</span>\\n\t\t\t\t\t\t</td>\\n                    </tr>\\n\";\n},\"96\":function(container,depth0,helpers,partials,data) {\n    return \"            <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"casino-game-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n    <div class=\\\"details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(33, data, 0, blockParams, depths),\"inverse\":container.program(96, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n    var stack1, helper;\n\n  return \"<div class=\\\"casino-game-history table \"\n    + container.escapeExpression(((helper = (helper = helpers.gameId || (depth0 != null ? depth0.gameId : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"gameId\",\"hash\":{},\"data\":data}) : helper)))\n    + \"\\\">\\n    <!-- cards for Baccarat and numbers for Roulette -->\\n\"\n    + ((stack1 = container.invokePartial(partials.outcome,depth0,{\"name\":\"outcome\",\"data\":data,\"indent\":\"    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n    <div class=\\\"row result\\\">\\n        <div class=\\\"history-info\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.info,depth0,{\"name\":\"info\",\"data\":data,\"indent\":\"            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"        </div>\\n    </div>\\n\\n</div>\\n\";\n},\"usePartial\":true,\"useData\":true});\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template({\"1\":function(container,depth0,helpers,partials,data) {\n    return \"no-result\";\n},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isDemo || (depth0 && depth0.isDemo) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isDemo\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isVoucher || (depth0 && depth0.isVoucher) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),{\"name\":\"isVoucher\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    </div>\\n\\n    <div class=\\\"game-details-section\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n        <div class=\\\"details-column spin-details\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(42, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.demoRoundNote,depth0,{\"name\":\"demoRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.freeRoundNote,depth0,{\"name\":\"freeRoundNote\",\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"compactView\":true,\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"10\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"compactView\":true,\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"12\":function(container,depth0,helpers,partials,data) {\n    return \"\";\n},\"14\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"    \t    <div class=\\\"screen-scale-wrapper\\\">\\n            <div class=\\\"spin-screen-wrapper result-column\\\">\\n                <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_GAME_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n    \t        <svg viewBox=\\\"0 0 800 1000\\\" preserveAspectRatio=\\\"xMinYMin slice\\\" width=\\\"800\\\" height=\\\"1000\\\" class=\\\"lines-overlay\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    \t            <g class=\\\"lines-container\\\"></g>\\n    \t        </svg>\\n\\n    \t        <table class=\\\"main-screen reels\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    \t            <tr class='spin-screen-0 spin-screen'>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasHorizontalReels || (depth0 && depth0.hasHorizontalReels) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"hasHorizontalReels\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0, blockParams, depths),\"inverse\":container.program(23, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"    \t            </tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(28, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(31, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(36, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(38, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"    \t        </table>\\n    \t    </div>\\n    \t</div>\\n\";\n},\"15\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(16, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"16\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                                <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(17, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n\";\n},\"17\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"if\",\"hash\":{\"includeZero\":true},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.program(21, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"18\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                                            <div>\\n                                                <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || alias2).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                                            </div>\\n\";\n},\"19\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                                  <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n    return \"                                            <div>\\n                                            </div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(24, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"24\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n  return \"                                <td class='reel-index-\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"' data-reel-index='\"\n    + alias4(((helper = (helper = helpers.index || (data && data.index)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"index\",\"hash\":{},\"data\":data}) : helper)))\n    + \"'>\\n\"\n    + ((stack1 = helpers.each.call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(25, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                </td>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing;\n\n  return \"                                        <div>\\n                                            <span>\"\n    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.hasMultipliers || (depth0 && depth0.hasMultipliers) || alias2).call(alias1,(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"hasMultipliers\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(26, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            <img class=\\\"tile-img\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getTileAsset || (depth0 && depth0.getTileAsset) || alias2).call(alias1,(depths[2] != null ? depths[2].tiles : depths[2]),depth0,{\"name\":\"getTileAsset\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n                                        </div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    return \"                                              <img style=\\\"position:absolute;\\\" src=\\\"\"\n    + container.escapeExpression((helpers.getMultipliers || (depth0 && depth0.getMultipliers) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && data.root),(container.data(data, 1) && container.data(data, 1).index),(data && data.index),{\"name\":\"getMultipliers\",\"hash\":{},\"data\":data}))\n    + \"\\\" alt=\\\"\\\">\\n\";\n},\"28\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(29, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"29\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"31\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(32, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"32\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <!-- TODO TITLE -->\\n\"\n    + ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(33, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"33\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(34, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"34\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"index\":(data && data.index),\"tiles\":(depths[2] != null ? depths[2].tiles : depths[2]),\"aPath\":(depths[2] != null ? depths[2].assetsPath : depths[2]),\"gId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                    \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"36\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(29, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"38\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(39, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"39\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(40, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"40\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.spinScreen,depth0,{\"name\":\"spinScreen\",\"hash\":{\"tiles\":(depths[1] != null ? depths[1].tiles : depths[1]),\"aPath\":(depths[1] != null ? depths[1].assetsPath : depths[1]),\"gId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"42\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"\\n\\n                <h3>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SPIN_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\\n                <table class=\\\"details\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\n    \t\t\t\t\t<tr>\\n                            <!-- Initial Spin -->\\n                            <td colspan=\\\"2\\\" class=\\\"group-title free-spin-details free-spin-details-0 initial-spin\\\" data-freespin-id=\\\"0\\\" data-spin-winline-set=\\\"\"\n    + alias3(container.lambda(((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                                <a>\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_INITIAL_SPIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</a>\\n                            </td>\\n    \t\t\t\t\t</tr>\\n\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(43, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                        <!-- Initial Spin Wins -->\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(45, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(65, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(70, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(73, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(80, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(82, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(88, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(92, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = (helpers.ifNum || (depth0 && depth0.ifNum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"ifNum\",\"hash\":{},\"fn\":container.program(94, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n                </table>\\n\\n\";\n},\"43\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr class=\\\"symbol-wins\\\">\\n                                <td colspan=\\\"2\\\">\\n                                    <div class=\\\"item\\\">\\n                                    <span class=\\\"label\\\">\\n                                        \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SYMBOL_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                    </span>\\n                                    <span class=\\\"value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.initialLinesWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                    </div>\\n                                </td>\\n                            </tr>\\n\";\n},\"45\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                            <tbody class=\\\"lines-list-0\\\" data-freespin-id=\\\"0\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.winLines : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(46, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                            </tbody>\\n\";\n},\"46\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.swapReels : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(47, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"47\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                        <tr class=\\\"line-details fs\\\" data-freespin-id=\\\"0\\\" data-line-id=\\\"\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),\"-\",\"1\",{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\\" data-line-tiles=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.tiles : depth0), depth0))\n    + \"\\\" data-line-start=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.start : depth0), depth0))\n    + \"\\\" data-line-length=\\\"\"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\\" data-spin-winline-set=\\\"\"\n    + alias3(alias4(((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.winDetails : stack1)) != null ? stack1.winLineSet : stack1), depth0))\n    + \"\\\">\\n                                            <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.isFreeSpinsScatterWin || (depth0 && depth0.isFreeSpinsScatterWin) || alias2).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"isFreeSpinsScatterWin\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(48, data, 0, blockParams, depths),\"inverse\":container.program(50, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            </td>\\n                                        </tr>\\n\";\n},\"48\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                    </span>\\n\";\n},\"50\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isWays || (depth0 && depth0.isWays) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isWays\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(51, data, 0, blockParams, depths),\"inverse\":container.program(54, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"51\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_WIN_WAYS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.ways : depth0), depth0))\n    + \"\\n                                                    </span>\\n                                                    <br>\\n                                                    <span class=\\\"label\\\">\\n                                                        &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LENGTH\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3(alias4((depth0 != null ? depth0.length : depth0), depth0))\n    + \"\\n                                                    </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(52, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"52\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"label\\\">\\n                                                            &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                        </span>\\n                                                        <span class=\\\"value currency-amount\\\">\\n                                                            \"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"\\n                                                        </span>\\n\";\n},\"54\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isCluster || (depth0 && depth0.isCluster) || helpers.helperMissing).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isCluster\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(55, data, 0, blockParams, depths),\"inverse\":container.program(62, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\");\n},\"55\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return ((stack1 = helpers[\"if\"].call(alias1,(helpers.isScatter || (depth0 && depth0.isScatter) || alias2).call(alias1,((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),{\"name\":\"isScatter\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(56, data, 0, blockParams, depths),\"inverse\":container.program(58, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                    <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <br>\\n                                                    <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_COUNT\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    <span class=\\\"line-win-amount value\\\">\"\n    + alias3(container.lambda((depth0 != null ? depth0.length : depth0), depth0))\n    + \"</span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(60, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\";\n},\"56\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                        <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_SCATTER_WIN_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"58\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                        <span class=\\\"label\\\"> - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_CLUSTER_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3((helpers.math || (depth0 && depth0.math) || alias2).call(alias1,(data && data.index),\"+\",1,{\"name\":\"math\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n\";\n},\"60\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"line-number label\\\"> &emsp;- \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"62\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <span class=\\\"label\\\">\\n                                                        - \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_LINE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \" #\"\n    + alias3(container.lambda((depth0 != null ? depth0.type : depth0), depth0))\n    + \"\\n                                                    </span>\\n                                                    <span class=\\\"value currency-amount\\\">\\n                                                        \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                                    </span>\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(helpers.compare || (depth0 && depth0.compare) || alias2).call(alias1,(depth0 != null ? depth0.multiplier : depth0),\">\",1,{\"name\":\"compare\",\"hash\":{},\"data\":data}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(63, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                \";\n},\"63\":function(container,depth0,helpers,partials,data) {\n    var alias1=container.escapeExpression;\n\n  return \"                                                        <br>\\n                                                        <span class=\\\"line-number label\\\"> \"\n    + alias1((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_MULTIPLIER\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                        <span class=\\\"line-win-amount value currency-amount\\\">\"\n    + alias1(container.lambda((depth0 != null ? depth0.multiplier : depth0), depth0))\n    + \"</span>\\n\";\n},\"65\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_NUDGE_WINS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.nudges : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(66, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"66\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),\"label\":\"GH_NUDGE\"},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"67\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                            <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(68, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                            </div>\\n\";\n},\"68\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                    <div class=\\\"details-row\\\">\\n                                                        <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                        <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                    </div>\\n\";\n},\"70\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.respins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(71, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"71\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1),\"label\":\"GH_RESPIN\"},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"73\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_FREE_SPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.freeSpins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(74, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"74\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                                <tr>\\n                                    <td colspan=\\\"2\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_FREE_SPIN\",\"gameId\":((stack1 = ((stack1 = (depths[1] != null ? depths[1].data : depths[1])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(67, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.respins : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(75, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"75\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.respins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(76, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"76\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                                <tr>\\n\\n                                                    <td colspan=\\\"2\\\" class=\\\"respin-in-free-spin\\\">\\n\\n\"\n    + ((stack1 = container.invokePartial(partials.spinDetails,depth0,{\"name\":\"spinDetails\",\"hash\":{\"index\":(data && data.index),\"label\":\"GH_RESPIN\",\"gameId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                                        \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? depth0.otherWins : depth0)) != null ? stack1.length : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(77, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                    </td>\\n                                                </tr>\\n\";\n},\"77\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return \"                                                            <div class=\\\"wins\\\">\\n\"\n    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.otherWins : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(78, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"                                                            </div>\\n\";\n},\"78\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                                                    <div class=\\\"details-row\\\">\\n                                                                        <span class=\\\"label\\\">- \"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":</span>\\n                                                                        <span class=\\\"pull-right value currency-amount\\\">\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"</span>\\n                                                                    </div>\\n\";\n},\"80\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"                            <tr>\\n                                <td colspan=\\\"2\\\" class=\\\"group-title\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_RESPINS_TITLE\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</td>\\n                            </tr>\\n\"\n    + ((stack1 = helpers.each.call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.heldRespins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(71, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"82\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.jackpotWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(83, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"83\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return \"                                <tr class=\\\"jackpot-win\\\">\\n                                    <td>\\n\"\n    + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.reels : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(84, data, 0, blockParams, depths),\"inverse\":container.program(86, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"                                    </td>\\n                                </tr>\\n\";\n},\"84\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.jackpotDetails,depth0,{\"name\":\"jackpotDetails\",\"hash\":{\"label\":\"GH_JACKPOT_WIN\",\"gameId\":((stack1 = ((stack1 = (depths[2] != null ? depths[2].data : depths[2])) != null ? stack1.gameDetails : stack1)) != null ? stack1.gameId : stack1)},\"data\":data,\"indent\":\"                                            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"86\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                            <span class=\\\"label\\\">\\n                                                \"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_JACKPOT_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n                                            </span>\\n                                            <span class=\\\"value currency-amount\\\">\\n                                                \"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n                                            </span>\\n\";\n},\"88\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.otherWins : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(89, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"89\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = (helpers.ifNot || (depth0 && depth0.ifNot) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.amount : depth0),0,{\"name\":\"ifNot\",\"hash\":{},\"fn\":container.program(90, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"90\":function(container,depth0,helpers,partials,data) {\n    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                                <tr>\\n                                    <td>\\n    \t\t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translateOtherWin || (depth0 && depth0.translateOtherWin) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{\"name\":\"translateOtherWin\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,(depth0 != null ? depth0.amount : depth0),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t</td>\\n                                </tr>\\n\";\n},\"92\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                            <tr>\\n    \t\t\t\t\t\t\t<td>\\n    \t\t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_ROUND_CORRECTION\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWinCorrection : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t</td>\\n                            </tr>\\n\";\n},\"94\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=container.escapeExpression;\n\n  return \"                        <tr class=\\\"totalWin\\\">\\n                            <td>\\n    \t\t\t\t\t\t\t<span class=\\\"label\\\">\\n    \t\t\t\t\t\t\t\t\"\n    + alias3((helpers.translate || (depth0 && depth0.translate) || alias2).call(alias1,\"GH_TOTAL_WIN\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \":\\n    \t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t\t<span class=\\\"value currency-amount\\\">\\n    \t\t\t\t\t\t\t\t\"\n    + alias3((helpers.formatSum || (depth0 && depth0.formatSum) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.winDetails : stack1)) != null ? stack1.totalWin : stack1),{\"name\":\"formatSum\",\"hash\":{},\"data\":data}))\n    + \"\\n    \t\t\t\t\t\t\t</span>\\n    \t\t\t\t\t\t</td>\\n                        </tr>\\n\";\n},\"96\":function(container,depth0,helpers,partials,data) {\n    return \"                <p class=\\\"message\\\">\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),\"GH_NO_HISTORY\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</p>\\n\";\n},\"98\":function(container,depth0,helpers,partials,data) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"        <div class=\\\"details-column\\\">\\n            <h3>\"\n    + container.escapeExpression((helpers.translate || (depth0 && depth0.translate) || helpers.helperMissing).call(alias1,\"GH_ADDITIONAL_DETAILS\",{\"name\":\"translate\",\"hash\":{},\"data\":data}))\n    + \"</h3>\\n\"\n    + ((stack1 = container.invokePartial(partials.gameDetails,depth0,{\"name\":\"gameDetails\",\"hash\":{\"regulationsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.regulations : stack1),\"detailsData\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.gameDetails : stack1)},\"data\":data,\"indent\":\"            \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\")\n    + \"\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideTransactionDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(99, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"        </div>\\n\";\n},\"99\":function(container,depth0,helpers,partials,data) {\n    var stack1;\n\n  return ((stack1 = container.invokePartial(partials.transactions,depth0,{\"name\":\"transactions\",\"hash\":{\"promo\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1),\"isBonusRound\":((stack1 = ((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.promo : stack1)) != null ? stack1.mode : stack1),\"transactionDetails\":((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.transactions : stack1)},\"data\":data,\"indent\":\"                \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {});\n\n  return \"<div class=\\\"casino-game-history tigent-history \"\n    + ((stack1 = helpers.unless.call(alias1,((stack1 = (depth0 != null ? depth0.data : depth0)) != null ? stack1.reels : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"\\\">\\n    <div class=\\\"details-column\\\">\\n\"\n    + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.data : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.program(96, data, 0, blockParams, depths),\"data\":data})) != null ? stack1 : \"\")\n    + \"        </div>\\n    </div>\\n\\n\"\n    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hideGameDetails : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(98, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n    + \"</div>\\n\";\n},\"usePartial\":true,\"useData\":true,\"useDepths\":true});\n"]}