define("fortuneCoinAssembly", ["viewBuilderApi", "componentmodelComponentApi", "translationmanagerApi", "clientkernelLoaderApi", "winMeterApi", "displayEngineApi", "reelsApi", "soundManagerApi", "displayEngineUtils", "gameLayoutApi", "money", "PIXI", "BABYLON", "componentmodelAssemblyApi", "gameProtocolApi", "clientkernelEventbusApi", "pfCommunicatorApi", "slotParserApi", "clientkernelModulesApi", "betPanelApi", "clientkernelLoggerApi", "moneyApi"],
    function(viewBuilderApi, componentmodelComponentApi, translationmanagerApi, clientkernelLoaderApi, winMeterApi, displayEngineApi, reelsApi, soundManagerApi, displayEngineUtils, gameLayoutApi, money, PIXI, BABYLON, componentmodelAssemblyApi, gameProtocolApi, clientkernelEventbusApi, pfCommunicatorApi, slotParserApi, clientkernelModulesApi, betPanelApi, clientkernelLoggerApi, moneyApi) {
        "use strict";

        function $iterator(o) {
            if (o instanceof Array) return function() {
                return {
                    cur: 0,
                    arr: o,
                    hasNext: function() {
                        return this.cur < this.arr.length;
                    },
                    next: function() {
                        return this.arr[this.cur++];
                    }
                };
            };
            return typeof(o.iterator) == 'function' ? $bind(o, o.iterator) : o.iterator;
        };;
        var $fid = 0;

        function $bind(o, m) {
            if (m == null) return null;
            if (m.__id__ == null) m.__id__ = $fid++;
            var f;
            if (o.hx__closures__ == null) o.hx__closures__ = {};
            else f = o.hx__closures__[m.__id__];
            if (f == null) {
                f = function() {
                    return f.method.apply(f.scope, arguments);
                };
                f.scope = o;
                f.method = m;
                o.hx__closures__[m.__id__] = f;
            }
            return f;
        };
        var $_;
        var $estr = function() {
            return _hcmn_.js_Boot.__string_rec(this, '');
        };
        if (typeof fortuneCoinAssembly == 'undefined') {
            var fortuneCoinAssembly = {};
        };
        fortuneCoinAssembly.Activator = function() {};
        fortuneCoinAssembly.Activator = ck_implements(fortuneCoinAssembly.Activator, clientkernelModulesApi.IModuleActivator);
        fortuneCoinAssembly.Activator.__interfaces__ = [clientkernelModulesApi.IModuleActivator];
        fortuneCoinAssembly.Activator.__name__ = ["fortuneCoinAssembly", "Activator"];
        fortuneCoinAssembly.Activator.prototype.moduleContext = null;
        fortuneCoinAssembly.Activator.prototype.start = function(context) {
            var _g = this;
            context.getServiceTracker([clientkernelLoaderApi.IAssetRegistry, viewBuilderApi.IViewBuilderFactory, displayEngineApi.IDisplayProvider, translationmanagerApi.ITranslationManager, moneyApi.IMoneyFormatter, slotParserApi.ISlotParser, gameProtocolApi.IGameProtocol]).then(function(context1) {
                _g.moduleContext = context1;
                fortuneCoinAssembly.ExternalService.initialize(context1);
                fortuneCoinAssembly.Assets.requestAll().then($bind(_g, _g.assemble));
            });
        };
        fortuneCoinAssembly.Activator.prototype.assemble = function(a) {
            this.moduleContext.registerService(new fortuneCoinAssembly.GameComponentsFactory(), fortuneCoinAssembly.GameComponentsDeclaration, null);
            new fortuneCoinAssembly.GameAssembly(this.moduleContext).start(this.moduleContext);
        };
        fortuneCoinAssembly.Activator.prototype.stop = function(context) {};
        fortuneCoinAssembly.Activator.main = function() {};
        fortuneCoinAssembly.Activator.prototype.__class__ = fortuneCoinAssembly.Activator;
        fortuneCoinAssembly.Assets = function() {};
        fortuneCoinAssembly.Assets.__name__ = ["fortuneCoinAssembly", "Assets"];
        fortuneCoinAssembly.Assets.assets = null;
        fortuneCoinAssembly.Assets.requestAll = function() {
            if (fortuneCoinAssembly.Assets.assets == null) fortuneCoinAssembly.Assets.assets = new _hcmn_.haxe_ds_StringMap();
            var assetsPromise = fortuneCoinAssembly.ExternalService.assetRegistry.getAssetsContent(fortuneCoinAssembly.Assets.assetsIDs);
            assetsPromise.then(function(assetMap) {
                fortuneCoinAssembly.Assets.assets = assetMap;
            });
            return assetsPromise;
        };
        fortuneCoinAssembly.Assets.getAsset = function(id) {
            if (!fortuneCoinAssembly.Assets.assets.exists(id)) {
                var strippedId = id.split("/")[1];
                if (fortuneCoinAssembly.Assets.assets.exists(strippedId)) return fortuneCoinAssembly.Assets.assets.get(strippedId);
            }
            return fortuneCoinAssembly.Assets.assets.get(id);
        };
        fortuneCoinAssembly.Assets.prototype.__class__ = fortuneCoinAssembly.Assets;
        fortuneCoinAssembly.ExternalService = function() {};
        fortuneCoinAssembly.ExternalService.__name__ = ["fortuneCoinAssembly", "ExternalService"];
        fortuneCoinAssembly.ExternalService.bus = null;
        fortuneCoinAssembly.ExternalService.assetRegistry = null;
        fortuneCoinAssembly.ExternalService.moneyFormatter = null;
        fortuneCoinAssembly.ExternalService.translationManager = null;
        fortuneCoinAssembly.ExternalService.variableRegistry = null;
        fortuneCoinAssembly.ExternalService.logger = null;
        fortuneCoinAssembly.ExternalService.displayProvider = null;
        fortuneCoinAssembly.ExternalService.viewBuilderFactory = null;
        fortuneCoinAssembly.ExternalService.slotParser = null;
        fortuneCoinAssembly.ExternalService.gameProtocol = null;
        fortuneCoinAssembly.ExternalService._moduleContext = null;
        fortuneCoinAssembly.ExternalService.initialize = function(context) {
            fortuneCoinAssembly.ExternalService._moduleContext = context;
            fortuneCoinAssembly.ExternalService.bus = context.getAnyService(clientkernelEventbusApi.IEventBus, null);
            fortuneCoinAssembly.ExternalService.assetRegistry = context.getAnyService(clientkernelLoaderApi.IAssetRegistry, null);
            fortuneCoinAssembly.ExternalService.moneyFormatter = context.getAnyService(moneyApi.IMoneyFormatter, null);
            fortuneCoinAssembly.ExternalService.variableRegistry = context.getAnyService(clientkernelLoaderApi.IVariableRegistry, null);
            fortuneCoinAssembly.ExternalService.displayProvider = context.getAnyService(displayEngineApi.IDisplayProvider, null);
            fortuneCoinAssembly.ExternalService.viewBuilderFactory = context.getAnyService(viewBuilderApi.IViewBuilderFactory, null);
            fortuneCoinAssembly.ExternalService.translationManager = context.getAnyService(translationmanagerApi.ITranslationManager, null);
            var loggerFactory = context.getAnyService(clientkernelLoggerApi.ILoggerFactory, null);
            fortuneCoinAssembly.ExternalService.logger = loggerFactory.getDefaultLogger();
            fortuneCoinAssembly.ExternalService.slotParser = context.getAnyService(slotParserApi.ISlotParser, null);
            fortuneCoinAssembly.ExternalService.gameProtocol = context.getAnyService(gameProtocolApi.IGameProtocol, null);
        };
        fortuneCoinAssembly.ExternalService.isMobile = function() {
            return fortuneCoinAssembly.ExternalService.variableRegistry.get("skin") == "mobile" || fortuneCoinAssembly.ExternalService.variableRegistry.get("assetPack") == "mobile" || fortuneCoinAssembly.ExternalService.variableRegistry.get("skin") == "tablet" || fortuneCoinAssembly.ExternalService.variableRegistry.get("assetPack") == "tablet";
        };
        fortuneCoinAssembly.ExternalService.isDesktop = function() {
            return fortuneCoinAssembly.ExternalService.variableRegistry.get("skin") == "dektop" || fortuneCoinAssembly.ExternalService.variableRegistry.get("assetPack") == "desktop";
        };
        fortuneCoinAssembly.ExternalService.prototype.__class__ = fortuneCoinAssembly.ExternalService;
        if (typeof assembly == 'undefined') {
            var assembly = {};
        };
        assembly.Ports = {
            __ename__: ["assembly", "Ports"],
            __constructs__: ["P_BETPANEL", "P_REELS", "P_GAMELAYOUT", "P_SOUNDPLAYER", "P_WINMETER"]
        };
        assembly.Ports.P_WINMETER = ["P_WINMETER", 4];
        assembly.Ports.P_WINMETER.toString = $estr;
        assembly.Ports.P_WINMETER.__enum__ = assembly.Ports;
        assembly.Ports.P_GAMELAYOUT = ["P_GAMELAYOUT", 2];
        assembly.Ports.P_GAMELAYOUT.toString = $estr;
        assembly.Ports.P_GAMELAYOUT.__enum__ = assembly.Ports;
        assembly.Ports.P_BETPANEL = ["P_BETPANEL", 0];
        assembly.Ports.P_BETPANEL.toString = $estr;
        assembly.Ports.P_BETPANEL.__enum__ = assembly.Ports;
        assembly.Ports.P_REELS = ["P_REELS", 1];
        assembly.Ports.P_REELS.toString = $estr;
        assembly.Ports.P_REELS.__enum__ = assembly.Ports;
        assembly.Ports.P_SOUNDPLAYER = ["P_SOUNDPLAYER", 3];
        assembly.Ports.P_SOUNDPLAYER.toString = $estr;
        assembly.Ports.P_SOUNDPLAYER.__enum__ = assembly.Ports;
        assembly.Buses = {
            __ename__: ["assembly", "Buses"],
            __constructs__: ["B_GF"]
        };
        assembly.Buses.B_GF = ["B_GF", 0];
        assembly.Buses.B_GF.toString = $estr;
        assembly.Buses.B_GF.__enum__ = assembly.Buses;
        assembly.ComponentFactories = {
            __ename__: ["assembly", "ComponentFactories"],
            __constructs__: ["CF_GAME", "CF_BETPANEL", "CF_REELS", "CF_GAMELAYOUT", "CF_SOUNDPLAYER", "CF_WINMETER"]
        };
        assembly.ComponentFactories.CF_GAME = ["CF_GAME", 0];
        assembly.ComponentFactories.CF_GAME.toString = $estr;
        assembly.ComponentFactories.CF_GAME.__enum__ = assembly.ComponentFactories;
        assembly.ComponentFactories.CF_BETPANEL = ["CF_BETPANEL", 1];
        assembly.ComponentFactories.CF_BETPANEL.toString = $estr;
        assembly.ComponentFactories.CF_BETPANEL.__enum__ = assembly.ComponentFactories;
        assembly.ComponentFactories.CF_SOUNDPLAYER = ["CF_SOUNDPLAYER", 4];
        assembly.ComponentFactories.CF_SOUNDPLAYER.toString = $estr;
        assembly.ComponentFactories.CF_SOUNDPLAYER.__enum__ = assembly.ComponentFactories;
        assembly.ComponentFactories.CF_GAMELAYOUT = ["CF_GAMELAYOUT", 3];
        assembly.ComponentFactories.CF_GAMELAYOUT.toString = $estr;
        assembly.ComponentFactories.CF_GAMELAYOUT.__enum__ = assembly.ComponentFactories;
        assembly.ComponentFactories.CF_WINMETER = ["CF_WINMETER", 5];
        assembly.ComponentFactories.CF_WINMETER.toString = $estr;
        assembly.ComponentFactories.CF_WINMETER.__enum__ = assembly.ComponentFactories;
        assembly.ComponentFactories.CF_REELS = ["CF_REELS", 2];
        assembly.ComponentFactories.CF_REELS.toString = $estr;
        assembly.ComponentFactories.CF_REELS.__enum__ = assembly.ComponentFactories;
        assembly.Components = {
            __ename__: ["assembly", "Components"],
            __constructs__: ["C_GAME", "C_WINLINES", "C_BETPANEL", "C_REELS", "C_GAMELAYOUT", "C_SOUNDPLAYER", "C_WINMETER"]
        };
        assembly.Components.C_REELS = ["C_REELS", 3];
        assembly.Components.C_REELS.toString = $estr;
        assembly.Components.C_REELS.__enum__ = assembly.Components;
        assembly.Components.C_SOUNDPLAYER = ["C_SOUNDPLAYER", 5];
        assembly.Components.C_SOUNDPLAYER.toString = $estr;
        assembly.Components.C_SOUNDPLAYER.__enum__ = assembly.Components;
        assembly.Components.C_WINMETER = ["C_WINMETER", 6];
        assembly.Components.C_WINMETER.toString = $estr;
        assembly.Components.C_WINMETER.__enum__ = assembly.Components;
        assembly.Components.C_WINLINES = ["C_WINLINES", 1];
        assembly.Components.C_WINLINES.toString = $estr;
        assembly.Components.C_WINLINES.__enum__ = assembly.Components;
        assembly.Components.C_BETPANEL = ["C_BETPANEL", 2];
        assembly.Components.C_BETPANEL.toString = $estr;
        assembly.Components.C_BETPANEL.__enum__ = assembly.Components;
        assembly.Components.C_GAME = ["C_GAME", 0];
        assembly.Components.C_GAME.toString = $estr;
        assembly.Components.C_GAME.__enum__ = assembly.Components;
        assembly.Components.C_GAMELAYOUT = ["C_GAMELAYOUT", 4];
        assembly.Components.C_GAMELAYOUT.toString = $estr;
        assembly.Components.C_GAMELAYOUT.__enum__ = assembly.Components;
        assembly.Channel = {
            __ename__: ["assembly", "Channel"],
            __constructs__: ["CH_ALL"]
        };
        assembly.Channel.CH_ALL = ["CH_ALL", 0];
        assembly.Channel.CH_ALL.toString = $estr;
        assembly.Channel.CH_ALL.__enum__ = assembly.Channel;
        fortuneCoinAssembly.GameAssembly = function(context) {};
        fortuneCoinAssembly.GameAssembly.__name__ = ["fortuneCoinAssembly", "GameAssembly"];
        fortuneCoinAssembly.GameAssembly.prototype.start = function(context) {
            return context.getServiceTracker([componentmodelAssemblyApi.IGameAssemblyFactory]).then(function(context1) {
                return (_hcmn_.js_Boot.__cast(context1.getAnyService(componentmodelAssemblyApi.IGameAssemblyFactory, null), componentmodelAssemblyApi.IGameAssemblyFactory)).create().declare().buses().bus(assembly.Buses.B_GF, "GFBus").end().ports().port(assembly.Ports.P_BETPANEL, new betPanelApi.BetPanelPortFactory()).connect(assembly.Buses.B_GF).port(assembly.Ports.P_REELS, new reelsApi.ReelsPortFactory()).connect(assembly.Buses.B_GF).port(assembly.Ports.P_SOUNDPLAYER, new soundManagerApi.SoundManagerPortFactory()).connect(assembly.Buses.B_GF).port(assembly.Ports.P_GAMELAYOUT, null, new gameLayoutApi.GameLayoutPortFactory()).connect(assembly.Buses.B_GF).port(assembly.Ports.P_WINMETER, new winMeterApi.WinMeterPortFactory()).connect(assembly.Buses.B_GF).end().componentFactiries().componentFactory(assembly.ComponentFactories.CF_GAME, fortuneCoinAssembly.GameComponentsDeclaration).componentFactory(assembly.ComponentFactories.CF_BETPANEL, betPanelApi.BetPanelDeclaration).componentFactory(assembly.ComponentFactories.CF_REELS, reelsApi.ReelsDeclaration).componentFactory(assembly.ComponentFactories.CF_GAMELAYOUT, gameLayoutApi.GameLayoutDeclaration).componentFactory(assembly.ComponentFactories.CF_SOUNDPLAYER, soundManagerApi.SoundManagerDeclaration).componentFactory(assembly.ComponentFactories.CF_WINMETER, winMeterApi.WinMeterDeclaration).end().end().implement().channel(assembly.Channel.CH_ALL).components().component(null, null, assembly.Components.C_BETPANEL, assembly.ComponentFactories.CF_BETPANEL).implement(assembly.Ports.P_BETPANEL)["use"](assembly.Ports.P_GAMELAYOUT).end().component(null, null, assembly.Components.C_REELS, assembly.ComponentFactories.CF_REELS).implement(assembly.Ports.P_REELS)["use"](assembly.Ports.P_GAMELAYOUT).end().component(null, null, assembly.Components.C_GAMELAYOUT, assembly.ComponentFactories.CF_GAMELAYOUT).implement(assembly.Ports.P_GAMELAYOUT).has().reference("layout", "game", assembly.Components.C_GAME).reference("layout", "reels", assembly.Components.C_REELS).reference("layout", "betpanel", assembly.Components.C_BETPANEL).reference("layout", "winmeter", assembly.Components.C_WINMETER).end().end().component(null, null, assembly.Components.C_GAME, assembly.ComponentFactories.CF_GAME)["use"](assembly.Ports.P_BETPANEL)["use"](assembly.Ports.P_GAMELAYOUT)["use"](assembly.Ports.P_REELS)["use"](assembly.Ports.P_WINMETER)["use"](assembly.Ports.P_SOUNDPLAYER).end().component(null, null, assembly.Components.C_WINMETER, assembly.ComponentFactories.CF_WINMETER).implement(assembly.Ports.P_WINMETER)["use"](assembly.Ports.P_GAMELAYOUT).end().component(null, null, assembly.Components.C_SOUNDPLAYER, assembly.ComponentFactories.CF_SOUNDPLAYER).implement(assembly.Ports.P_SOUNDPLAYER).end().end().end().end().run();
            });
        };
        fortuneCoinAssembly.GameAssembly.prototype.__class__ = fortuneCoinAssembly.GameAssembly;
        fortuneCoinAssembly.GameComponentsDeclaration = function() {};
        fortuneCoinAssembly.GameComponentsDeclaration = ck_implements(fortuneCoinAssembly.GameComponentsDeclaration, componentmodelComponentApi.IComponentDeclaration);
        fortuneCoinAssembly.GameComponentsDeclaration.__interfaces__ = [componentmodelComponentApi.IComponentDeclaration];
        fortuneCoinAssembly.GameComponentsDeclaration.__name__ = ["fortuneCoinAssembly", "GameComponentsDeclaration"];
        fortuneCoinAssembly.GameComponentsDeclaration.prototype.getChildComponents = function() {
            return null;
        };
        fortuneCoinAssembly.GameComponentsDeclaration.prototype.getReferredComponents = function() {
            return null;
        };
        fortuneCoinAssembly.GameComponentsDeclaration.prototype.getImplementedPorts = function() {
            return [];
        };
        fortuneCoinAssembly.GameComponentsDeclaration.prototype.getUsedPorts = function() {
            return [betPanelApi.IBetPanelPort, reelsApi.IReelsPort, gameLayoutApi.IGameLayoutPort, winMeterApi.IWinMeterPort];
        };
        fortuneCoinAssembly.GameComponentsDeclaration.prototype.__class__ = fortuneCoinAssembly.GameComponentsDeclaration;
        fortuneCoinAssembly.GameComponentsFactory = function() {};
        fortuneCoinAssembly.GameComponentsFactory = ck_implements(fortuneCoinAssembly.GameComponentsFactory, clientkernelModulesApi.IService);
        fortuneCoinAssembly.GameComponentsFactory = ck_implements(fortuneCoinAssembly.GameComponentsFactory, componentmodelComponentApi.IComponentFactory);
        fortuneCoinAssembly.GameComponentsFactory.__interfaces__ = [clientkernelModulesApi.IService, componentmodelComponentApi.IComponentFactory];
        fortuneCoinAssembly.GameComponentsFactory.__name__ = ["fortuneCoinAssembly", "GameComponentsFactory"];
        fortuneCoinAssembly.GameComponentsFactory.prototype.createComponent = function(context) {
            haxe.Log.trace("[GameComponentsFactory] [createComponent] ", {
                fileName: "GameComponentsFactory.hx",
                lineNumber: 39,
                className: "assembly.GameComponentsFactory",
                methodName: "createComponent"
            });
            new fortuneCoinAssembly.GameController(context, null);
            new fortuneCoinAssembly.Popups(context, fortuneCoinAssembly.PopupsPort.getInstance());
            new fortuneCoinAssembly.FxController(context, fortuneCoinAssembly.FxPort.getInstance());
            new fortuneCoinAssembly.LayerManager(context, fortuneCoinAssembly.LayerManagerPort.getInstance());
            new fortuneCoinAssembly.Picker(context, fortuneCoinAssembly.PickerPort.getInstance());
            new fortuneCoinAssembly.CoinBonus(context, fortuneCoinAssembly.CoinBonusPort.getInstance());
            new fortuneCoinAssembly.WinController(context, fortuneCoinAssembly.WinControllerPort.getInstance());
            new fortuneCoinAssembly.Background(context, fortuneCoinAssembly.BackgroundPort.getInstance());
            new fortuneCoinAssembly.Paytable(context);
        };
        fortuneCoinAssembly.GameComponentsFactory.prototype.getComponentDeclaration = function() {
            return fortuneCoinAssembly.GameComponentsDeclaration;
        };
        fortuneCoinAssembly.GameComponentsFactory.prototype.__class__ = fortuneCoinAssembly.GameComponentsFactory;
        fortuneCoinAssembly.Background = function(context, componentPort) {
            this.duration = 0;
            this.backgroundElements = new _hcmn_.haxe_ds_StringMap();
            haxe.Log.trace("[Background] [Background] " + ": context ", {
                fileName: "Background.hx",
                lineNumber: 25,
                className: "components.background.Background",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            this.configuration = fortuneCoinAssembly.Assets.getAsset("background-config");
            this.parseConfiguration(this.configuration);
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getHide().subscribe($bind(this, this.handleHide));
        };
        fortuneCoinAssembly.Background.__name__ = ["fortuneCoinAssembly", "Background"];
        fortuneCoinAssembly.Background.prototype.port = null;
        fortuneCoinAssembly.Background.prototype.context = null;
        fortuneCoinAssembly.Background.prototype.configuration = null;
        fortuneCoinAssembly.Background.prototype.backgroundElements = null;
        fortuneCoinAssembly.Background.prototype.duration = null;
        fortuneCoinAssembly.Background.prototype.parseConfiguration = function(config) {
            var sources = config.sources;
            if (sources != null) {
                var _g = 0;
                while (_g < sources.length) {
                    var s = sources[_g];
                    ++_g;
                    if (s.type == "img") {
                        var key = s.id;
                        var value = new fortuneCoinAssembly.BackgroundView(s);
                        this.backgroundElements.set(key, value);
                        if (s.transition_duration) this.duration = s.transition_duration;
                    }
                }
            }
        };
        fortuneCoinAssembly.Background.prototype.handleShow = function(e) {
            if (!e.getPayload().hasTransition)((function($this) {
                var $r;
                var key; {
                    var e1 = e.getPayload().content;
                    key = e1[0];
                }
                $r = $this.backgroundElements.get(key);
                return $r;
            }(this))).show();
            else((function($this) {
                var $r;
                var key1; {
                    var e2 = e.getPayload().content;
                    key1 = e2[0];
                }
                $r = $this.backgroundElements.get(key1);
                return $r;
            }(this))).startTransition(true, this.duration);
        };
        fortuneCoinAssembly.Background.prototype.handleHide = function(e) {
            ((function($this) {
                var $r;
                var key; {
                    var e1 = e.getPayload();
                    key = e1[0];
                }
                $r = $this.backgroundElements.get(key);
                return $r;
            }(this))).startTransition(false, this.duration);
        };
        fortuneCoinAssembly.Background.prototype.__class__ = fortuneCoinAssembly.Background;
        fortuneCoinAssembly.BackgroundPort = function(bus) {
            this.hide = new clientkernelEventbusApi.Topic("background:hide");
            this.show = new clientkernelEventbusApi.Topic("background:show");
            this.show.connect(bus);
            this.hide.connect(bus);
        };
        fortuneCoinAssembly.BackgroundPort.__name__ = ["fortuneCoinAssembly", "BackgroundPort"];
        fortuneCoinAssembly.BackgroundPort.prototype.show = null;
        fortuneCoinAssembly.BackgroundPort.prototype.hide = null;
        fortuneCoinAssembly.BackgroundPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.BackgroundPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.BackgroundPort.singleton = null;
        fortuneCoinAssembly.BackgroundPort.getInstance = function() {
            if (fortuneCoinAssembly.BackgroundPort.singleton == null) fortuneCoinAssembly.BackgroundPort.singleton = new fortuneCoinAssembly.BackgroundPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.BackgroundPort.singleton;
        };
        fortuneCoinAssembly.BackgroundPort.prototype.__class__ = fortuneCoinAssembly.BackgroundPort;
        fortuneCoinAssembly.BackgroundPayload = function(content, hasTransition) {
            this.content = content;
            this.hasTransition = hasTransition;
        };
        fortuneCoinAssembly.BackgroundPayload.__name__ = ["fortuneCoinAssembly", "BackgroundPayload"];
        fortuneCoinAssembly.BackgroundPayload.prototype.content = null;
        fortuneCoinAssembly.BackgroundPayload.prototype.hasTransition = null;
        fortuneCoinAssembly.BackgroundPayload.prototype.__class__ = fortuneCoinAssembly.BackgroundPayload;
        fortuneCoinAssembly.BackgroundType = {
            __ename__: ["fortuneCoinAssembly", "BackgroundType"],
            __constructs__: ["BASE_GAME_BGD", "FREE_GAME_BGD", "PICKER_GAME_BGD"]
        };
        fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD = ["PICKER_GAME_BGD", 2];
        fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD.toString = $estr;
        fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD.__enum__ = fortuneCoinAssembly.BackgroundType;
        fortuneCoinAssembly.BackgroundType.BASE_GAME_BGD = ["BASE_GAME_BGD", 0];
        fortuneCoinAssembly.BackgroundType.BASE_GAME_BGD.toString = $estr;
        fortuneCoinAssembly.BackgroundType.BASE_GAME_BGD.__enum__ = fortuneCoinAssembly.BackgroundType;
        fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD = ["FREE_GAME_BGD", 1];
        fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD.toString = $estr;
        fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD.__enum__ = fortuneCoinAssembly.BackgroundType;

        fortuneCoinAssembly.IBackgroundView = function() {}
        fortuneCoinAssembly.IBackgroundView.prototype = {

            show: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            hide: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            startTransition: function(fadeIn, duration) {
                return {
                    arguments: ["boolean", "number"],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.BackgroundView = function(data) {
            this.id = data.id;
            this.path = data.path;
            var backgroundPosition = "center";
            var _this = window.document;
            this.divCont = _this.createElement("div");
            this.divCont.id = this.id;
            window.document.body.appendChild(this.divCont);
            var imgURL = fortuneCoinAssembly.ExternalService.assetRegistry.getAsset("background").getUrl();
            var len = imgURL.lastIndexOf("/") + 1;
            imgURL = _hcmn_.HxOverrides.substr(imgURL, 0, len);
            var style = "width: 100%; height: 100%; position: fixed; padding:0; margin:0; opacity:0; left: 0px; top: 0px; overflow:hidden; background: url(" + imgURL + this.path + "); background-repeat: no-repeat; background-size: cover; background-position:" + backgroundPosition + "; background-position-x:" + backgroundPosition + "; background-position-y:" + backgroundPosition + ";";
            this.divCont.setAttribute("style", style);
            this.divCont.style.opacity = "0";
        };
        fortuneCoinAssembly.BackgroundView = ck_implements(fortuneCoinAssembly.BackgroundView, fortuneCoinAssembly.IBackgroundView);
        fortuneCoinAssembly.BackgroundView.__interfaces__ = [fortuneCoinAssembly.IBackgroundView];
        fortuneCoinAssembly.BackgroundView.__name__ = ["fortuneCoinAssembly", "BackgroundView"];
        fortuneCoinAssembly.BackgroundView.prototype.id = null;
        fortuneCoinAssembly.BackgroundView.prototype.path = null;
        fortuneCoinAssembly.BackgroundView.prototype.divCont = null;
        fortuneCoinAssembly.BackgroundView.prototype.step = null;
        fortuneCoinAssembly.BackgroundView.prototype.stepTime = null;
        fortuneCoinAssembly.BackgroundView.prototype.show = function() {
            this.divCont.style.opacity = "1";
        };
        fortuneCoinAssembly.BackgroundView.prototype.hide = function() {
            this.divCont.style.opacity = "0";
        };
        fortuneCoinAssembly.BackgroundView.prototype.startTransition = function(fadeIn, duration) {
            this.stepTime = _hcmn_.Math.round(duration / 100);
            this.step = 0.01;
            if (fadeIn) _hcmn_.haxe_Timer.delay($bind(this, this.fadeInCallback), this.stepTime);
            else _hcmn_.haxe_Timer.delay($bind(this, this.fadeOutCallback), this.stepTime);
        };
        fortuneCoinAssembly.BackgroundView.prototype.fadeInCallback = function() {
            var currentOpacity = parseFloat(this.divCont.style.opacity);
            if (currentOpacity < 1) {
                this.divCont.style.opacity = _hcmn_.Std.string(currentOpacity + this.step);
                _hcmn_.haxe_Timer.delay($bind(this, this.fadeInCallback), this.stepTime);
            } else return;
        };
        fortuneCoinAssembly.BackgroundView.prototype.fadeOutCallback = function() {
            var currentOpacity = parseFloat(this.divCont.style.opacity);
            if (currentOpacity > 0) {
                this.divCont.style.opacity = _hcmn_.Std.string(currentOpacity - this.step);
                _hcmn_.haxe_Timer.delay($bind(this, this.fadeOutCallback), this.stepTime);
            } else return;
        };
        fortuneCoinAssembly.BackgroundView.prototype.__class__ = fortuneCoinAssembly.BackgroundView;
        fortuneCoinAssembly.CoinBonus = function(context, componentPort) {
            this.updateLayoutStartedReceived = false;
            this.componentsInitialized = false;
            this.addedToStage = false;
            haxe.Log.trace("[CoinBonus] [CoinBonus] " + ": context ", {
                fileName: "CoinBonus.hx",
                lineNumber: 37,
                className: "components.coinbonus.CoinBonus",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            var animAssets = fortuneCoinAssembly.Assets.getAsset("win_symbols_3_vb");
            this.vbView = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(animAssets);
            this.components = new haxe.ds.EnumValueMap();
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getShowIdle().subscribe($bind(this, this.handleShowIdle));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
            this.port.getUpdateLayoutStarted().subscribe($bind(this, this.handleUpdateLayoutStarted));
        };
        fortuneCoinAssembly.CoinBonus.__name__ = ["fortuneCoinAssembly", "CoinBonus"];
        fortuneCoinAssembly.CoinBonus.prototype.port = null;
        fortuneCoinAssembly.CoinBonus.prototype.context = null;
        fortuneCoinAssembly.CoinBonus.prototype.view = null;
        fortuneCoinAssembly.CoinBonus.prototype.layerContainer = null;
        fortuneCoinAssembly.CoinBonus.prototype.requestEvent = null;
        fortuneCoinAssembly.CoinBonus.prototype.components = null;
        fortuneCoinAssembly.CoinBonus.prototype.addedToStage = null;
        fortuneCoinAssembly.CoinBonus.prototype.vbView = null;
        fortuneCoinAssembly.CoinBonus.prototype.componentsInitialized = null;
        fortuneCoinAssembly.CoinBonus.prototype.updateLayoutStartedReceived = null;
        fortuneCoinAssembly.CoinBonus.prototype.initView = function() {
            haxe.Log.trace("[CoinBonus] [initView] " + "vbAssetID: " + "coin_bonus_layout.viewbuilder.json", {
                fileName: "CoinBonus.hx",
                lineNumber: 55,
                className: "components.coinbonus.CoinBonus",
                methodName: "initView"
            });
            this.view = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("coin_bonus_layout.viewbuilder.json"));
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.view.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var constructorIndex;
                var _this = _hcmn_.Type.getEnumConstructs(fortuneCoinAssembly.CoinBonusType);
                constructorIndex = _hcmn_.HxOverrides.indexOf(_this, layerId, 0);
                if (constructorIndex < 0) continue;
                var componentEnum = _hcmn_.Type.createEnum(fortuneCoinAssembly.CoinBonusType, layerId, null);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.exists(componentEnum[0]);
                        return $r;
                    }(this))) this.registerComponent(componentEnum);
            }
        };
        fortuneCoinAssembly.CoinBonus.prototype.registerContainerComponent = function(componentEnum, componentClass) {
            haxe.Log.trace("[CoinBonus] [registerContainerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum) + " updateLayoutStartedReceived: " + _hcmn_.Std.string(this.updateLayoutStartedReceived), {
                fileName: "CoinBonus.hx",
                lineNumber: 72,
                className: "components.coinbonus.CoinBonus",
                methodName: "registerContainerComponent"
            });
            var container = this.view.getContainerById(componentEnum[0]);
            var value = _hcmn_.Type.createInstance(componentClass, [container, this.vbView]);
            this.components.set(componentEnum, value);
            this.componentsInitialized = true;
            if (this.updateLayoutStartedReceived && (function($this) {
                    var $r;
                    var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.CoinBonusType, "COIN_BONUS", null);
                    $r = $this.components.get(key);
                    return $r;
                }(this)) != null)((function($this) {
                var $r;
                var key1 = _hcmn_.Type.createEnum(fortuneCoinAssembly.CoinBonusType, "COIN_BONUS", null);
                $r = $this.components.get(key1);
                return $r;
            }(this))).handleLayoutUpdateStarted();
        };
        fortuneCoinAssembly.CoinBonus.prototype.handleUpdateLayout = function(e) {
            haxe.Log.trace("[CoinBonus] [handleUpdateLayout]", {
                fileName: "CoinBonus.hx",
                lineNumber: 86,
                className: "components.coinbonus.CoinBonus",
                methodName: "handleUpdateLayout"
            });
            if (this.view == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) {
                    var container;
                    container = (function($this) {
                        var $r;
                        var this3 = $this.view.getChildComponents();
                        $r = this3.get(layerId);
                        return $r;
                    }(this));
                    var containerDO = container.getDisplayObject();
                    if (!this.addedToStage) stage.addChild(containerDO);
                    containerDO.setX(layerPayload.left);
                    containerDO.setY(layerPayload.top);
                    containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
                    containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
                    containerDO.setZIndex(layerPayload.zIndex);
                }
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.CoinBonus.prototype.handleUpdateLayoutStarted = function(e) {
            haxe.Log.trace("[CoinBonus] [handleUpdateLayoutStarted] " + "componentsInitialized: " + _hcmn_.Std.string(this.componentsInitialized), {
                fileName: "CoinBonus.hx",
                lineNumber: 127,
                className: "components.coinbonus.CoinBonus",
                methodName: "handleUpdateLayoutStarted"
            });
            this.updateLayoutStartedReceived = true;
            if (this.componentsInitialized)((function($this) {
                var $r;
                var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.CoinBonusType, "COIN_BONUS", null);
                $r = $this.components.get(key);
                return $r;
            }(this))).handleLayoutUpdateStarted();
        };
        fortuneCoinAssembly.CoinBonus.prototype.registerComponent = function(componentEnum) {
            haxe.Log.trace("[CoinBonus] [registerComponent]", {
                fileName: "CoinBonus.hx",
                lineNumber: 138,
                className: "components.coinbonus.CoinBonus",
                methodName: "registerComponent",
                customParams: [componentEnum]
            });
            this.registerContainerComponent(fortuneCoinAssembly.CoinBonusType.COIN_BONUS, fortuneCoinAssembly.CoinBonusView);
        };
        fortuneCoinAssembly.CoinBonus.prototype.handleHide = function(e) {
            haxe.Log.trace("[CoinBonus] [handleHide] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "CoinBonus.hx",
                lineNumber: 149,
                className: "components.coinbonus.CoinBonus",
                methodName: "handleHide"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).hide();
        };
        fortuneCoinAssembly.CoinBonus.prototype.handleShow = function(e) {
            haxe.Log.trace("[CoinBonus] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "CoinBonus.hx",
                lineNumber: 158,
                className: "components.coinbonus.CoinBonus",
                methodName: "handleShow"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).show(e.getPayload().content);
        };
        fortuneCoinAssembly.CoinBonus.prototype.handleShowIdle = function(e) {
            haxe.Log.trace("[CoinBonus] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "CoinBonus.hx",
                lineNumber: 168,
                className: "components.coinbonus.CoinBonus",
                methodName: "handleShowIdle"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).showIdle(e.getPayload().content, e.getPayload().stateId);
        };
        fortuneCoinAssembly.CoinBonus.prototype.__class__ = fortuneCoinAssembly.CoinBonus;
        fortuneCoinAssembly.CoinBonusEvents = function() {
            this.currentCoin = new _hcmn_.msignal_Signal1();
        };
        fortuneCoinAssembly.CoinBonusEvents.__name__ = ["fortuneCoinAssembly", "CoinBonusEvents"];
        fortuneCoinAssembly.CoinBonusEvents.prototype.currentCoin = null;
        fortuneCoinAssembly.CoinBonusEvents.singleton = null;
        fortuneCoinAssembly.CoinBonusEvents.getInstance = function() {
            if (fortuneCoinAssembly.CoinBonusEvents.singleton == null) fortuneCoinAssembly.CoinBonusEvents.singleton = new fortuneCoinAssembly.CoinBonusEvents();
            return fortuneCoinAssembly.CoinBonusEvents.singleton;
        };
        fortuneCoinAssembly.CoinBonusEvents.prototype.__class__ = fortuneCoinAssembly.CoinBonusEvents;
        fortuneCoinAssembly.CoinBonusPort = function(bus) {
            this.updateLayoutStarted = new clientkernelEventbusApi.Topic("coinbonus:updateLayoutStarted");
            this.updateLayout = new clientkernelEventbusApi.Topic("coinbonus:updateLayout");
            this.action = new clientkernelEventbusApi.Topic("coinbonus:action");
            this.completed = new clientkernelEventbusApi.Topic("coinbonus:completed");
            this.hide = new clientkernelEventbusApi.Topic("coinbonus:hide");
            this.showIdle = new clientkernelEventbusApi.Topic("coinbonus:showIdle");
            this.show = new clientkernelEventbusApi.Topic("coinbonus:show");
            this.show.connect(bus);
            this.showIdle.connect(bus);
            this.hide.connect(bus);
            this.completed.connect(bus);
            this.action.connect(bus);
            this.updateLayout.connect(bus);
            this.updateLayoutStarted.connect(bus);
        };
        fortuneCoinAssembly.CoinBonusPort.__name__ = ["fortuneCoinAssembly", "CoinBonusPort"];
        fortuneCoinAssembly.CoinBonusPort.prototype.show = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.showIdle = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.hide = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.completed = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.action = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.updateLayout = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.updateLayoutStarted = null;
        fortuneCoinAssembly.CoinBonusPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getShowIdle = function() {
            return this.showIdle;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getCompleted = function() {
            return this.completed;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getUpdateLayoutStarted = function() {
            return this.updateLayoutStarted;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.getAction = function() {
            return this.action;
        };
        fortuneCoinAssembly.CoinBonusPort.singleton = null;
        fortuneCoinAssembly.CoinBonusPort.getInstance = function() {
            if (fortuneCoinAssembly.CoinBonusPort.singleton == null) fortuneCoinAssembly.CoinBonusPort.singleton = new fortuneCoinAssembly.CoinBonusPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.CoinBonusPort.singleton;
        };
        fortuneCoinAssembly.CoinBonusPort.prototype.__class__ = fortuneCoinAssembly.CoinBonusPort;
        fortuneCoinAssembly.CoinActionPayload = function(id, position, winType, value) {
            this.position = position;
            this.id = id;
            this.winType = winType;
            this.value = value;
        };
        fortuneCoinAssembly.CoinActionPayload.__name__ = ["fortuneCoinAssembly", "CoinActionPayload"];
        fortuneCoinAssembly.CoinActionPayload.prototype.id = null;
        fortuneCoinAssembly.CoinActionPayload.prototype.position = null;
        fortuneCoinAssembly.CoinActionPayload.prototype.winType = null;
        fortuneCoinAssembly.CoinActionPayload.prototype.value = null;
        fortuneCoinAssembly.CoinActionPayload.prototype.__class__ = fortuneCoinAssembly.CoinActionPayload;
        fortuneCoinAssembly.CoinBonusPayload = function(componentId, content, stateId) {
            this.stateId = stateId;
            this.content = content;
            this.componentId = componentId;
        };
        fortuneCoinAssembly.CoinBonusPayload.__name__ = ["fortuneCoinAssembly", "CoinBonusPayload"];
        fortuneCoinAssembly.CoinBonusPayload.prototype.componentId = null;
        fortuneCoinAssembly.CoinBonusPayload.prototype.content = null;
        fortuneCoinAssembly.CoinBonusPayload.prototype.stateId = null;
        fortuneCoinAssembly.CoinBonusPayload.prototype.__class__ = fortuneCoinAssembly.CoinBonusPayload;
        fortuneCoinAssembly.CoinBonusType = {
            __ename__: ["fortuneCoinAssembly", "CoinBonusType"],
            __constructs__: ["COIN_BONUS"]
        };
        fortuneCoinAssembly.CoinBonusType.COIN_BONUS = ["COIN_BONUS", 0];
        fortuneCoinAssembly.CoinBonusType.COIN_BONUS.toString = $estr;
        fortuneCoinAssembly.CoinBonusType.COIN_BONUS.__enum__ = fortuneCoinAssembly.CoinBonusType;

        fortuneCoinAssembly.ICoinBonusView = function() {}
        fortuneCoinAssembly.ICoinBonusView.prototype = {

            hide: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            show: function(content) {
                return {
                    arguments: ["array"],
                    returns: "void"
                };
            },
            showIdle: function(content, stateId) {
                return {
                    arguments: ["array", "string"],
                    returns: "void"
                };
            },
            handleLayoutUpdateStarted: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.CoinBonusView = function(container, vbView) {
            this.currentCoin = 0;
            this.bonusActive = false;
            this.margin = 14;
            this.vbView = vbView;
            this.container = container;
            this.tweens = [];
            this.symbolSize = new displayEngineApi.Point();
            this.symbolSize = new displayEngineApi.Point(200, 175);
            var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
            this.stage = this1.get("skgl_0");
        };
        fortuneCoinAssembly.CoinBonusView = ck_implements(fortuneCoinAssembly.CoinBonusView, fortuneCoinAssembly.ICoinBonusView);
        fortuneCoinAssembly.CoinBonusView.__interfaces__ = [fortuneCoinAssembly.ICoinBonusView];
        fortuneCoinAssembly.CoinBonusView.__name__ = ["fortuneCoinAssembly", "CoinBonusView"];
        fortuneCoinAssembly.CoinBonusView.prototype.container = null;
        fortuneCoinAssembly.CoinBonusView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.CoinBonusView.prototype.baseEvents = null;
        fortuneCoinAssembly.CoinBonusView.prototype.vbView = null;
        fortuneCoinAssembly.CoinBonusView.prototype.tweens = null;
        fortuneCoinAssembly.CoinBonusView.prototype.stage = null;
        fortuneCoinAssembly.CoinBonusView.prototype.symbolSize = null;
        fortuneCoinAssembly.CoinBonusView.prototype.margin = null;
        fortuneCoinAssembly.CoinBonusView.prototype.bonusActive = null;
        fortuneCoinAssembly.CoinBonusView.prototype.coins = null;
        fortuneCoinAssembly.CoinBonusView.prototype.currentCoin = null;
        fortuneCoinAssembly.CoinBonusView.prototype.content = null;
        fortuneCoinAssembly.CoinBonusView.prototype.show = function(content) {
            haxe.Log.trace("[CoinBonusView] [show] " + "content: " + _hcmn_.Std.string(content), {
                fileName: "CoinBonusView.hx",
                lineNumber: 67,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "show"
            });
            this.container.show();
            this.bonusActive = true;
            this.coins = [];
            this.currentCoin = 0;
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = content[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    if (content[i][j] != "_") {
                        var value = "";
                        var winType = "";
                        var targetId = "PLACEHOLDER_CENTER";
                        var parsedContent = content[i][j].split(",")[1];
                        if (_hcmn_.StringTools.startsWith(parsedContent, "fs")) {
                            value = parsedContent.split("fs")[1];
                            winType = "fs";
                            targetId = "PLACEHOLDER_LEFT";
                        } else if (_hcmn_.StringTools.startsWith(parsedContent, "prog")) {
                            value = "";
                            winType = "prog";
                            targetId = "PLACEHOLDER_RIGHT";
                        } else {
                            value = parsedContent;
                            winType = "value";
                        }
                        var props = {
                            row: i,
                            col: j,
                            winType: winType,
                            targetId: targetId,
                            animationId: "flying_" + winType,
                            childId: "flying_" + i + "_" + j,
                            value: value
                        };
                        this.coins.push(props);
                    }
                }
            }
            var _g11 = 0;
            var _g4 = this.coins.length;
            while (_g11 < _g4) {
                var i1 = _g11++;
                if (this.coins[i1].winType == "prog") {
                    var temp = this.coins[i1];
                    _hcmn_.HxOverrides.remove(this.coins, temp);
                    this.coins.push(temp);
                }
            }
            var _g12 = 0;
            var _g5 = this.coins.length;
            while (_g12 < _g5) {
                var i2 = _g12++;
                if (this.coins[i2].winType == "fs") {
                    var temp1 = this.coins[i2];
                    _hcmn_.HxOverrides.remove(this.coins, temp1);
                    this.coins.push(temp1);
                }
            }
            var _g13 = 0;
            var _g6 = this.coins.length;
            while (_g13 < _g6) {
                var i3 = _g13++;
                if (this.coins[i3].winType == "fs") {
                    var temp2 = this.coins[i3];
                    _hcmn_.HxOverrides.remove(this.coins, temp2);
                    this.coins.push(temp2);
                }
            }
            var _g14 = 0;
            var _g7 = this.coins.length;
            while (_g14 < _g7) {
                var i4 = _g14++;
                if (this.coins[i4].winType == "fs") {
                    var temp3 = this.coins[i4];
                    _hcmn_.HxOverrides.remove(this.coins, temp3);
                    this.coins.push(temp3);
                }
            }
            haxe.Log.trace("[CoinBonusView] [show] " + "coins: " + _hcmn_.Std.string(this.coins), {
                fileName: "CoinBonusView.hx",
                lineNumber: 143,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "show"
            });
            this.initCoinFly();
            this.container.show();
        };
        fortuneCoinAssembly.CoinBonusView.prototype.initCoinFly = function() {
            var _g = this;
            var childId = this.coins[this.currentCoin].childId;
            var animationId = this.coins[this.currentCoin].animationId;
            var row = this.coins[this.currentCoin].row;
            var col = this.coins[this.currentCoin].col;
            var winType = this.coins[this.currentCoin].winType;
            var targetId = this.coins[this.currentCoin].targetId;
            var value = this.coins[this.currentCoin].value;
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var vbAnimContainer = this.vbView.createContainerFromStoredConfig(animationId);
                var xPos = this.symbolSize.x * row + this.margin * row | 0;
                var yPos = this.symbolSize.y * col | 0;
                vbAnimContainer.setX(xPos);
                vbAnimContainer.setY(yPos);
                fortuneCoinAssembly.CoinBonusPort.getInstance().getAction().publish(new fortuneCoinAssembly.CoinActionPayload("coin_explosion", new displayEngineApi.Point(xPos + 110, yPos + 110)));
                this.presentCoinWin(new displayEngineApi.Point(row, col), winType, value);
                this.container.addChildComponent(vbAnimContainer, childId);
                var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                vbAnimContent.gotoAndPlay(false, "1");
                vbAnimContent.show();
                vbAnimContainer.show();
                var dObj = vbAnimContainer.getDisplayObject();
                var rootX = _hcmn_.Std["int"](this.container.getDisplayObject().getX() / this.container.getDisplayObject().getScaleX());
                var rootY = _hcmn_.Std["int"](this.container.getDisplayObject().getY() / this.container.getDisplayObject().getScaleY());
                var targetContainer = this.stage.getChildByID(targetId);
                var targetX = _hcmn_.Std["int"](targetContainer.getX() - rootX);
                var targetY = _hcmn_.Std["int"](targetContainer.getY() - rootY);
                var time = 1200;
                if (winType == "prog") time = 2000;
                else if (winType == "fs") time = 2000;
                this.tweens.push(displayEngineUtils.TweenX.to(dObj, {
                    x: targetX,
                    y: targetY,
                    scaleX: 0.3,
                    scaleY: 0.3
                }, time, null, null, null, null, null, null, null, {
                    fileName: "CoinBonusView.hx",
                    lineNumber: 191,
                    className: "components.coinbonus.subcomponents.CoinBonusView",
                    methodName: "initCoinFly"
                }).ease(displayEngineUtils.EaseX.backIn).onFinish(function() {
                    fortuneCoinAssembly.CoinBonusPort.getInstance().getAction().publish(new fortuneCoinAssembly.CoinActionPayload("fly"));
                    fortuneCoinAssembly.CoinBonusPort.getInstance().getAction().publish(new fortuneCoinAssembly.CoinActionPayload("coin_explosion", new displayEngineApi.Point(targetX, targetY)));
                    fortuneCoinAssembly.CoinBonusPort.getInstance().getAction().publish(new fortuneCoinAssembly.CoinActionPayload(winType));
                    vbAnimContainer.getDisplayObject().setVisible(false);
                    if (winType == "prog") _g.addCoinToBowl(new displayEngineApi.Point(targetX, targetY), "idle_prog_bowl");
                    else if (winType == "fs") _g.addCoinToBowl(new displayEngineApi.Point(targetX, targetY), "idle_fs_bowl");
                    vbAnimContent.stop();
                    _g.currentCoin++;
                    if (_g.currentCoin == _g.coins.length) {
                        _g.currentCoin = 0;
                        haxe.Log.trace("[CoinBonusView] [initCoinFly] completed: ", {
                            fileName: "CoinBonusView.hx",
                            lineNumber: 219,
                            className: "components.coinbonus.subcomponents.CoinBonusView",
                            methodName: "initCoinFly"
                        });
                        _g.bonusActive = false;
                        fortuneCoinAssembly.CoinBonusPort.getInstance().getCompleted().publish(null);
                    } else _g.initCoinFly();
                }));
            }
        };
        fortuneCoinAssembly.CoinBonusView.prototype.showIdle = function(content, stateId) {
            haxe.Log.trace("[CoinBonusView] [showIdle] " + "content: " + _hcmn_.Std.string(content), {
                fileName: "CoinBonusView.hx",
                lineNumber: 231,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "showIdle"
            });
            this.container.show();
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = content[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    if (content[i][j] != "_") {
                        var key = content[i][j].split(",")[1];
                        var labelValue = "";
                        var coinValue = "";
                        var labelName = "coin_idle_value";
                        var symbolId = stateId;
                        if (_hcmn_.StringTools.startsWith(key, "fs")) {
                            symbolId = "idle_fs";
                            labelValue = key.split("fs")[1];
                            labelName = "coin_idle_fs";
                        } else if (_hcmn_.StringTools.startsWith(key, "prog")) {
                            symbolId = "idle_prog";
                            labelName = "coin_idle_prog";
                            labelValue = fortuneCoinAssembly.ExternalService.translationManager.stringLookup("coin_idle_prog");
                        } else {
                            coinValue = new money.Money(key).mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine)).value;
                            labelValue = fortuneCoinAssembly.ExternalService.moneyFormatter.format(coinValue, false);
                        }
                        var childId = i + "_" + j + symbolId;
                        haxe.Log.trace("[CoinBonusView] [showIdle] content: values: " + symbolId, {
                            fileName: "CoinBonusView.hx",
                            lineNumber: 264,
                            className: "components.coinbonus.subcomponents.CoinBonusView",
                            methodName: "showIdle",
                            customParams: [childId, labelValue]
                        });
                        if (!(function($this) {
                                var $r;
                                var this1 = $this.container.getChildComponents();
                                $r = this1.exists(childId);
                                return $r;
                            }(this))) {
                            var vbAnimContainer = this.vbView.createContainerFromStoredConfig(symbolId);
                            var xPos = this.symbolSize.x * i + this.margin * i | 0;
                            var yPos = this.symbolSize.y * j | 0;
                            vbAnimContainer.setX(xPos);
                            vbAnimContainer.setY(yPos);
                            this.container.addChildComponent(vbAnimContainer, childId);
                            var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                            if (fortuneCoinAssembly.GameData.rgPresentation) {
                                if (!fortuneCoinAssembly.GameData.isHighWin) vbAnimContent.stop();
                                else vbAnimContent.gotoAndPlay(false, "1");
                            } else vbAnimContent.gotoAndPlay(false, "1");
                            vbAnimContent.show();
                            vbAnimContainer.show();
                            var labelContainer = vbAnimContent.getContainerById("label");
                            var label = labelContainer.getLabelById(labelName);
                            label.setText(labelValue);
                            if ((coinValue | 0) != null) {
                                if ((coinValue | 0) > 999 && (coinValue | 0) < 1500) label.updateTo("coin_idle_value_high");
                                if ((coinValue | 0) > 1499) label.updateTo("coin_idle_value_grande");
                            }
                        }
                    }
                }
            }
        };
        fortuneCoinAssembly.CoinBonusView.prototype.addCoinToBowl = function(position, animId) {
            var vbContainer = this.vbView.createContainerFromStoredConfig(animId);
            vbContainer.setX(position.x | 0);
            vbContainer.setY(position.y | 0);
            vbContainer.show();
            var vbAnimContent = vbContainer.getVBAnimationById("ANIMATION_CONTENT");
            vbAnimContent.gotoAndPlay(false, "1");
            vbAnimContent.show();
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(animId);
                    return $r;
                }(this))) this.container.addChildComponent(vbContainer, animId);
        };
        fortuneCoinAssembly.CoinBonusView.prototype.presentCoinWin = function(position, winType, labelValue) {
            var vbContainer = this.vbView.createContainerFromStoredConfig("idle_" + winType);
            vbContainer.setX(this.symbolSize.x * position.x + this.margin * position.x | 0);
            vbContainer.setY(this.symbolSize.y * position.y | 0);
            vbContainer.show();
            var childId = winType + "_" + position.x + "_" + position.y;
            var vbAnimContent = vbContainer.getVBAnimationById("ANIMATION_CONTENT");
            this.container.addChildComponent(vbContainer, childId);
            vbAnimContent.gotoAndPlay(false, "1");
            vbAnimContent.show();
            fortuneCoinAssembly.CoinBonusPort.getInstance().getAction().publish(new fortuneCoinAssembly.CoinActionPayload("turn", null, winType, _hcmn_.Std.parseInt(labelValue)));
            var labelContainer = vbAnimContent.getContainerById("label");
            var label = labelContainer.getLabelById("coin" + "_idle_" + winType);
            if (winType == "value") {
                var txt = new money.Money(labelValue).mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine)).value;
                label.setText(fortuneCoinAssembly.ExternalService.moneyFormatter.format(txt, false));
                if ((txt | 0) > 999 && (txt | 0) < 1500) label.updateTo("coin_idle_value_high");
                if ((txt | 0) > 1499) label.updateTo("coin_idle_value_grande");
            } else if (winType == "fs") label.setText(labelValue);
        };
        fortuneCoinAssembly.CoinBonusView.prototype.reset = function() {
            haxe.Log.trace("[CoinBonusView] [reset] " + "reset: ", {
                fileName: "CoinBonusView.hx",
                lineNumber: 365,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "reset"
            });
            this.bonusActive = false;
            var _g1 = 0;
            var _g = this.tweens.length;
            while (_g1 < _g) {
                var i = _g1++;
                var tween = this.tweens[i];
                tween.onFinish(null);
                tween.stop();
                var totalTime = tween.get_totalTime();
                tween["goto"](totalTime, false);
                tween.onHead($bind(tween, tween.stop));
                tween = null;
            }
            this.tweens.splice(0, this.tweens.length);
            this.disposeAll();
            haxe.Log.trace("adsoiuasdiuoasdoiu " + this.tweens.length, {
                fileName: "CoinBonusView.hx",
                lineNumber: 381,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "reset"
            });
        };
        fortuneCoinAssembly.CoinBonusView.prototype.dispose = function(id) {
            haxe.Log.trace("[CoinBonusView] [dispose] " + id, {
                fileName: "CoinBonusView.hx",
                lineNumber: 386,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "dispose"
            });
            this.container.disposeChildComponent(id);
        };
        fortuneCoinAssembly.CoinBonusView.prototype.disposeAll = function() {
            var _g = this;
            haxe.Log.trace("[CoinBonusView] [dispose] ", {
                fileName: "CoinBonusView.hx",
                lineNumber: 393,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "disposeAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                var key1 = [key];
                if (key1[0] == "idle_prog_bowl" || key1[0] == "idle_fs_bowl") displayEngineUtils.TweenX.to(this.container.getContainerById(key1[0]).getDisplayObject(), {
                    alpha: 0
                }, 1000, null, null, null, null, null, null, null, {
                    fileName: "CoinBonusView.hx",
                    lineNumber: 398,
                    className: "components.coinbonus.subcomponents.CoinBonusView",
                    methodName: "disposeAll"
                }).ease(displayEngineUtils.EaseX.linear).onFinish((function(key1) {
                    return function() {
                        haxe.Log.trace("[CoinBonusView] [dispose] id " + key1[0], {
                            fileName: "CoinBonusView.hx",
                            lineNumber: 403,
                            className: "components.coinbonus.subcomponents.CoinBonusView",
                            methodName: "disposeAll"
                        });
                        _g.container.disposeChildComponent(key1[0]);
                        _g.container.hide();
                    };
                })(key1));
                else if (key1[0] != "layer_bounds") {
                    haxe.Log.trace("[CoinBonusView] [dispose] key " + key1[0], {
                        fileName: "CoinBonusView.hx",
                        lineNumber: 412,
                        className: "components.coinbonus.subcomponents.CoinBonusView",
                        methodName: "disposeAll"
                    });
                    this.container.disposeChildComponent(key1[0]);
                }
            }
            this.coins = null;
        };
        fortuneCoinAssembly.CoinBonusView.prototype.hide = function() {
            this.reset();
            haxe.Log.trace("[CoinBonusView] [hide] ", {
                fileName: "CoinBonusView.hx",
                lineNumber: 422,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "hide"
            });
        };
        fortuneCoinAssembly.CoinBonusView.prototype.handleLayoutUpdateStarted = function() {
            haxe.Log.trace("[CoinBonusView] [handleLayoutUpdateStarted] " + _hcmn_.Std.string(this.bonusActive), {
                fileName: "CoinBonusView.hx",
                lineNumber: 427,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "handleLayoutUpdateStarted",
                customParams: [this.coins]
            });
            if (this.bonusActive) {
                var _g1 = 0;
                var _g = this.tweens.length;
                while (_g1 < _g) {
                    var i = _g1++;
                    var tween = this.tweens[i];
                    tween.onFinish(null);
                    tween.stop();
                    var totalTime = tween.get_totalTime();
                    tween["goto"](totalTime, false);
                    tween.onHead($bind(tween, tween.stop));
                    tween = null;
                }
                this.tweens.splice(0, this.tweens.length);
                var $it0 = (function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.keys();
                    return $r;
                }(this));
                while ($it0.hasNext()) {
                    var key = $it0.next();
                    if (key != "layer_bounds") this.container.disposeChildComponent(key);
                }
                var _g11 = 0;
                var _g2 = this.coins.length;
                while (_g11 < _g2) {
                    var i1 = _g11++;
                    this.presentCoinWin(new displayEngineApi.Point(this.coins[i1].row, this.coins[i1].col), this.coins[i1].winType, this.coins[i1].value);
                }
                fortuneCoinAssembly.CoinBonusPort.getInstance().getCompleted().publish(null);
                this.coins = null;
                this.bonusActive = false;
            }
            haxe.Log.trace("adsoiuasdiuoasdoiu " + this.tweens.length, {
                fileName: "CoinBonusView.hx",
                lineNumber: 460,
                className: "components.coinbonus.subcomponents.CoinBonusView",
                methodName: "handleLayoutUpdateStarted"
            });
        };
        fortuneCoinAssembly.CoinBonusView.prototype.__class__ = fortuneCoinAssembly.CoinBonusView;
        fortuneCoinAssembly.FxController = function(context, componentPort) {
            this.addedToStage = false;
            haxe.Log.trace("[FxController] [FxController] " + "context: ", {
                fileName: "FxController.hx",
                lineNumber: 34,
                className: "components.fxcontroller.FxController",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getShowTrail().subscribe($bind(this, this.handleShowTrail));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
            this.baseEvents = new fortuneCoinAssembly.FxEvents();
            this.components = new haxe.ds.EnumValueMap();
            fortuneCoinAssembly.FxEvents.getInstance().completed.add($bind(this, this.handleCompleted));
        };
        fortuneCoinAssembly.FxController.__name__ = ["fortuneCoinAssembly", "FxController"];
        fortuneCoinAssembly.FxController.prototype.port = null;
        fortuneCoinAssembly.FxController.prototype.context = null;
        fortuneCoinAssembly.FxController.prototype.view = null;
        fortuneCoinAssembly.FxController.prototype.layerContainer = null;
        fortuneCoinAssembly.FxController.prototype.components = null;
        fortuneCoinAssembly.FxController.prototype.baseEvents = null;
        fortuneCoinAssembly.FxController.prototype.addedToStage = null;
        fortuneCoinAssembly.FxController.prototype.initView = function() {
            haxe.Log.trace("[FxController] [initView] " + "\t: ", {
                fileName: "FxController.hx",
                lineNumber: 51,
                className: "components.fxcontroller.FxController",
                methodName: "initView"
            });
            this.view = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx-assets/fx_layout.viewbuilder.json"));
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.view.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var constructorIndex;
                var _this = _hcmn_.Type.getEnumConstructs(fortuneCoinAssembly.FxTypeEnum);
                constructorIndex = _hcmn_.HxOverrides.indexOf(_this, layerId, 0);
                if (constructorIndex < 0) continue;
                var componentEnum = _hcmn_.Type.createEnum(fortuneCoinAssembly.FxTypeEnum, layerId, null);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.exists(componentEnum[0]);
                        return $r;
                    }(this))) this.registerComponent(componentEnum);
            }
        };
        fortuneCoinAssembly.FxController.prototype.registerContainerComponent = function(componentEnum, componentClass) {
            haxe.Log.trace("[FxController] [registerContainerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum), {
                fileName: "FxController.hx",
                lineNumber: 68,
                className: "components.fxcontroller.FxController",
                methodName: "registerContainerComponent"
            });
            var container = this.view.getContainerById(componentEnum[0]);
            var value = _hcmn_.Type.createInstance(componentClass, [container, this.baseEvents]);
            this.components.set(componentEnum, value);
        };
        fortuneCoinAssembly.FxController.prototype.handleUpdateLayout = function(e) {
            if (this.view == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) {
                    var container;
                    container = (function($this) {
                        var $r;
                        var this3 = $this.view.getChildComponents();
                        $r = this3.get(layerId);
                        return $r;
                    }(this));
                    var containerDO = container.getDisplayObject();
                    if (!this.addedToStage) stage.addChild(containerDO);
                    containerDO.setX(layerPayload.left);
                    containerDO.setY(layerPayload.top);
                    containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
                    containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
                    containerDO.setZIndex(layerPayload.zIndex);
                    if (cfg != null)((function($this) {
                        var $r;
                        var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.FxTypeEnum, layerId, null);
                        $r = $this.components.get(key);
                        return $r;
                    }(this))).onLayoutUpdate(cfg);
                }
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.FxController.prototype.registerComponent = function(componentEnum) {
            haxe.Log.trace("[FxController] [registerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum), {
                fileName: "FxController.hx",
                lineNumber: 116,
                className: "components.fxcontroller.FxController",
                methodName: "registerComponent"
            });
            switch (componentEnum[1]) {
                case 0:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_FRONT, fortuneCoinAssembly.FxView);
                    break;
                case 4:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_TENSION, fortuneCoinAssembly.FxView);
                    break;
                case 5:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, fortuneCoinAssembly.FxExtendedView);
                    break;
                case 6:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, fortuneCoinAssembly.FxExtendedView);
                    break;
                case 1:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, fortuneCoinAssembly.FxExtendedView);
                    break;
                case 7:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, fortuneCoinAssembly.FxExtendedView);
                    break;
                case 2:
                    this.registerContainerComponent(fortuneCoinAssembly.FxTypeEnum.FX_TRAIL, fortuneCoinAssembly.FxView);
                    break;
                default:
                    haxe.Log.trace("[FxView] [registerComponent] container not registered as component", {
                        fileName: "FxController.hx",
                        lineNumber: 133,
                        className: "components.fxcontroller.FxController",
                        methodName: "registerComponent"
                    });
            }
        };
        fortuneCoinAssembly.FxController.prototype.handleHide = function(e) {
            haxe.Log.trace("[FxController] [handleHide] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "FxController.hx",
                lineNumber: 139,
                className: "components.fxcontroller.FxController",
                methodName: "handleHide"
            });
            var componentId = e.getPayload().type;
            var childId = e.getPayload().childId;
            if (this.components.exists(componentId)) this.components.get(componentId).hide(childId);
        };
        fortuneCoinAssembly.FxController.prototype.handleShow = function(e) {
            haxe.Log.trace("[FxController] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "FxController.hx",
                lineNumber: 149,
                className: "components.fxcontroller.FxController",
                methodName: "handleShow"
            });
            var fxType = e.getPayload().type;
            this.components.get(fxType).show(e.getPayload().id, e.getPayload().position, e.getPayload().state, e.getPayload().childId);
        };
        fortuneCoinAssembly.FxController.prototype.handleShowTrail = function(e) {
            haxe.Log.trace("[FxController] [handleShowTrail] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "FxController.hx",
                lineNumber: 156,
                className: "components.fxcontroller.FxController",
                methodName: "handleShowTrail"
            });
            var fxType = e.getPayload().type;
            this.components.get(fxType).showTrail(e.getPayload().animId, e.getPayload().x, e.getPayload().y, e.getPayload().rot, e.getPayload().time, e.getPayload().winValue);
        };
        fortuneCoinAssembly.FxController.prototype.handleCompleted = function(e) {
            this.port.getCompleted().publish(e);
        };
        fortuneCoinAssembly.FxController.prototype.__class__ = fortuneCoinAssembly.FxController;
        fortuneCoinAssembly.FxEvents = function() {
            this.completed = new _hcmn_.msignal_Signal1();
        };
        fortuneCoinAssembly.FxEvents.__name__ = ["fortuneCoinAssembly", "FxEvents"];
        fortuneCoinAssembly.FxEvents.prototype.completed = null;
        fortuneCoinAssembly.FxEvents.singleton = null;
        fortuneCoinAssembly.FxEvents.getInstance = function() {
            if (fortuneCoinAssembly.FxEvents.singleton == null) fortuneCoinAssembly.FxEvents.singleton = new fortuneCoinAssembly.FxEvents();
            return fortuneCoinAssembly.FxEvents.singleton;
        };
        fortuneCoinAssembly.FxEvents.prototype.__class__ = fortuneCoinAssembly.FxEvents;
        fortuneCoinAssembly.FxPort = function(bus) {
            this.updateLayout = new clientkernelEventbusApi.Topic("fx:updateLayout");
            this.hide = new clientkernelEventbusApi.Topic("fx:hide");
            this.completed = new clientkernelEventbusApi.Topic("fx:completed");
            this.showTrail = new clientkernelEventbusApi.Topic("fx:showTrail");
            this.show = new clientkernelEventbusApi.Topic("fx:show");
            this.show.connect(bus);
            this.showTrail.connect(bus);
            this.hide.connect(bus);
            this.completed.connect(bus);
            this.updateLayout.connect(bus);
        };
        fortuneCoinAssembly.FxPort.__name__ = ["fortuneCoinAssembly", "FxPort"];
        fortuneCoinAssembly.FxPort.prototype.show = null;
        fortuneCoinAssembly.FxPort.prototype.showTrail = null;
        fortuneCoinAssembly.FxPort.prototype.completed = null;
        fortuneCoinAssembly.FxPort.prototype.hide = null;
        fortuneCoinAssembly.FxPort.prototype.updateLayout = null;
        fortuneCoinAssembly.FxPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.FxPort.prototype.getShowTrail = function() {
            return this.showTrail;
        };
        fortuneCoinAssembly.FxPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.FxPort.prototype.getCompleted = function() {
            return this.completed;
        };
        fortuneCoinAssembly.FxPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.FxPort.singleton = null;
        fortuneCoinAssembly.FxPort.getInstance = function() {
            if (fortuneCoinAssembly.FxPort.singleton == null) fortuneCoinAssembly.FxPort.singleton = new fortuneCoinAssembly.FxPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.FxPort.singleton;
        };
        fortuneCoinAssembly.FxPort.prototype.__class__ = fortuneCoinAssembly.FxPort;
        fortuneCoinAssembly.FxTypeEnum = {
            __ename__: ["fortuneCoinAssembly", "FxTypeEnum"],
            __constructs__: ["FX_FRONT", "FX_EXTENDED", "FX_TRAIL", "FX_BACK", "FX_TENSION", "FX_BIG_WIN", "FX_BIG_WIN_SPARKLE", "FX_DRAGON"]
        };
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN = ["FX_BIG_WIN", 5];
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_DRAGON = ["FX_DRAGON", 7];
        fortuneCoinAssembly.FxTypeEnum.FX_DRAGON.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_DRAGON.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_TRAIL = ["FX_TRAIL", 2];
        fortuneCoinAssembly.FxTypeEnum.FX_TRAIL.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_TRAIL.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE = ["FX_BIG_WIN_SPARKLE", 6];
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_TENSION = ["FX_TENSION", 4];
        fortuneCoinAssembly.FxTypeEnum.FX_TENSION.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_TENSION.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_FRONT = ["FX_FRONT", 0];
        fortuneCoinAssembly.FxTypeEnum.FX_FRONT.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_FRONT.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED = ["FX_EXTENDED", 1];
        fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.FxTypeEnum.FX_BACK = ["FX_BACK", 3];
        fortuneCoinAssembly.FxTypeEnum.FX_BACK.toString = $estr;
        fortuneCoinAssembly.FxTypeEnum.FX_BACK.__enum__ = fortuneCoinAssembly.FxTypeEnum;
        fortuneCoinAssembly.HideFxPayload = function(type, childId) {
            this.type = type;
            this.childId = childId;
        };
        fortuneCoinAssembly.HideFxPayload.__name__ = ["fortuneCoinAssembly", "HideFxPayload"];
        fortuneCoinAssembly.HideFxPayload.prototype.type = null;
        fortuneCoinAssembly.HideFxPayload.prototype.childId = null;
        fortuneCoinAssembly.HideFxPayload.prototype.__class__ = fortuneCoinAssembly.HideFxPayload;
        fortuneCoinAssembly.ShowFxPayload = function(type, id, position, state, childId) {
            this.type = type;
            this.id = id;
            this.childId = childId;
            this.position = position;
            this.state = state;
        };
        fortuneCoinAssembly.ShowFxPayload.__name__ = ["fortuneCoinAssembly", "ShowFxPayload"];
        fortuneCoinAssembly.ShowFxPayload.prototype.type = null;
        fortuneCoinAssembly.ShowFxPayload.prototype.id = null;
        fortuneCoinAssembly.ShowFxPayload.prototype.position = null;
        fortuneCoinAssembly.ShowFxPayload.prototype.childId = null;
        fortuneCoinAssembly.ShowFxPayload.prototype.state = null;
        fortuneCoinAssembly.ShowFxPayload.prototype.__class__ = fortuneCoinAssembly.ShowFxPayload;
        fortuneCoinAssembly.ShowTrailFxPayload = function(type, animId, x, y, rot, time, winValue) {
            this.type = type;
            this.animId = animId;
            this.x = x;
            this.y = y;
            this.rot = rot;
            this.time = time;
            this.winValue = winValue;
        };
        fortuneCoinAssembly.ShowTrailFxPayload.__name__ = ["fortuneCoinAssembly", "ShowTrailFxPayload"];
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.type = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.x = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.y = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.rot = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.animId = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.time = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.winValue = null;
        fortuneCoinAssembly.ShowTrailFxPayload.prototype.__class__ = fortuneCoinAssembly.ShowTrailFxPayload;

        fortuneCoinAssembly.IFxView = function() {}
        fortuneCoinAssembly.IFxView.prototype = {

            hide: function(childId) {
                return {
                    arguments: ["string"],
                    returns: "void"
                };
            },
            show: function(id, position, state, childId) {
                return {
                    arguments: ["string", "*", "string", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            showTrail: function(id, x, y, rot, time, winValue) {
                return {
                    arguments: ["string", "array", "array", "array", "number", "string"],
                    returns: "void"
                };
            },
            onLayoutUpdate: function(layoutConfig) {
                return {
                    arguments: ["*"],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.FxExtendedView = function(container, config) {
            this.config = config;
            this.container = container;
            this.vbViews = [];
            this.vbViews[0] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_0"));
            this.vbViews[1] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_1"));
            this.vbViews[2] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_2"));
            this.vbViews[3] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_3"));
            this.vbViews[4] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_4"));
            this.vbViews[5] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_5"));
            this.offsets = new _hcmn_.haxe_ds_StringMap();
            container.show();
        };
        fortuneCoinAssembly.FxExtendedView = ck_implements(fortuneCoinAssembly.FxExtendedView, fortuneCoinAssembly.IFxView);
        fortuneCoinAssembly.FxExtendedView.__interfaces__ = [fortuneCoinAssembly.IFxView];
        fortuneCoinAssembly.FxExtendedView.__name__ = ["fortuneCoinAssembly", "FxExtendedView"];
        fortuneCoinAssembly.FxExtendedView.prototype.container = null;
        fortuneCoinAssembly.FxExtendedView.prototype.config = null;
        fortuneCoinAssembly.FxExtendedView.prototype.vbViews = null;
        fortuneCoinAssembly.FxExtendedView.prototype.offsets = null;
        fortuneCoinAssembly.FxExtendedView.prototype.show = function(id, position, state, childId) {
            haxe.Log.trace("[FxExtendedView] [show] " + "childId: " + id, {
                fileName: "FxExtendedView.hx",
                lineNumber: 41,
                className: "components.fxcontroller.subcomponents.FxExtendedView",
                methodName: "show",
                customParams: [position, state, childId]
            });
            var vbAnim = null;
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var _g1 = 0;
                var _g = this.vbViews.length;
                while (_g1 < _g) {
                    var i = _g1++;
                    if (this.vbViews[i].createContainerFromStoredConfig(id) != null) vbAnim = this.vbViews[i].createContainerFromStoredConfig(id);
                }
                var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
                vbAnim.show();
                var offset = new displayEngineApi.Point(0, 0);
                if (this.offsets.exists(id)) {
                    offset.x = this.offsets.get(id).x;
                    offset.y = this.offsets.get(id).y;
                }
                vbAnim.setX(position.x + offset.x | 0);
                vbAnim.setY(position.y + offset.y | 0);
                this.container.addChildComponent(vbAnim, childId);
                vbAnimContent.gotoAndPlay(false, state);
            }
        };
        fortuneCoinAssembly.FxExtendedView.prototype.onLayoutUpdate = function(layoutConfig) {
            if (layoutConfig != null) {
                haxe.Log.trace("[FxExtendedView] [layoutConfiglayoutConfig] " + _hcmn_.Std.string(layoutConfig), {
                    fileName: "FxExtendedView.hx",
                    lineNumber: 70,
                    className: "components.fxcontroller.subcomponents.FxExtendedView",
                    methodName: "onLayoutUpdate"
                });
                var _g = 0;
                var _g1 = _hcmn_.Reflect.fields(layoutConfig);
                while (_g < _g1.length) {
                    var element = _g1[_g];
                    ++_g;
                    var point = _hcmn_.Reflect.field(layoutConfig, element);
                    var v = new displayEngineApi.Point(point[0], point[1]);
                    this.offsets.set(element, v);
                    v;
                    if ((function($this) {
                            var $r;
                            var this1 = $this.container.getChildComponents();
                            $r = this1.exists(element);
                            return $r;
                        }(this))) {
                        this.container.getContainerById(element).setX(_hcmn_.Std["int"](this.offsets.get(element).x));
                        this.container.getContainerById(element).setY(_hcmn_.Std["int"](this.offsets.get(element).y));
                    }
                }
            }
        };
        fortuneCoinAssembly.FxExtendedView.prototype.hide = function(childId) {
            haxe.Log.trace("[FxExtendedView] [hide] " + "childId: " + childId, {
                fileName: "FxExtendedView.hx",
                lineNumber: 87,
                className: "components.fxcontroller.subcomponents.FxExtendedView",
                methodName: "hide"
            });
            if ((function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var vbAnimHolder = this.container.getContainerById(childId);
                var vbAnimContent = vbAnimHolder.getVBAnimationById("ANIMATION_CONTENT");
                vbAnimContent.stop();
                vbAnimHolder.hide();
                this.dispose(childId);
            }
        };
        fortuneCoinAssembly.FxExtendedView.prototype.showTrail = function(childId, x, y, rot, time, winValue) {};
        fortuneCoinAssembly.FxExtendedView.prototype.dispose = function(childId) {
            this.container.disposeChildComponent(childId);
        };
        fortuneCoinAssembly.FxExtendedView.prototype.__class__ = fortuneCoinAssembly.FxExtendedView;
        fortuneCoinAssembly.FxView = function(container, config) {
            this.counter = 0;
            this.config = config;
            this.container = container;
            this.vbViews = [];
            this.vbViews[0] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_0"));
            this.vbViews[1] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_1"));
            this.vbViews[2] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("fx_animations_5"));
            this.offsets = new _hcmn_.haxe_ds_StringMap();
            container.show();
        };
        fortuneCoinAssembly.FxView = ck_implements(fortuneCoinAssembly.FxView, fortuneCoinAssembly.IFxView);
        fortuneCoinAssembly.FxView.__interfaces__ = [fortuneCoinAssembly.IFxView];
        fortuneCoinAssembly.FxView.__name__ = ["fortuneCoinAssembly", "FxView"];
        fortuneCoinAssembly.FxView.prototype.container = null;
        fortuneCoinAssembly.FxView.prototype.config = null;
        fortuneCoinAssembly.FxView.prototype.vbViews = null;
        fortuneCoinAssembly.FxView.prototype.counter = null;
        fortuneCoinAssembly.FxView.prototype.offsets = null;
        fortuneCoinAssembly.FxView.prototype.show = function(id, position, state, childId) {
            var vbAnim = null;
            var _g1 = 0;
            var _g = this.vbViews.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (this.vbViews[i].createContainerFromStoredConfig(id) != null) vbAnim = this.vbViews[i].createContainerFromStoredConfig(id);
            }
            var animId = id + this.counter;
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
                vbAnim.show();
                var offset = new displayEngineApi.Point(0, 0);
                if (this.offsets.exists(id)) {
                    offset.x = this.offsets.get(id).x;
                    offset.y = this.offsets.get(id).y;
                }
                vbAnim.setX(position.x + offset.x | 0);
                vbAnim.setY(position.y + offset.y | 0);
                this.container.addChildComponent(vbAnim, animId);
                vbAnimContent.addEventListener("evtComplete", $bind(this, this.handleComplete), [animId]);
                this.counter++;
                vbAnimContent.gotoAndPlay(false, state);
            }
        };
        fortuneCoinAssembly.FxView.prototype.dispose = function(childId) {
            this.container.disposeChildComponent(childId);
        };
        fortuneCoinAssembly.FxView.prototype.handleComplete = function(evt) {
            var _g = this;
            var childId = evt[0];
            var vbAnimHolder = this.container.getContainerById(childId);
            var vbAnimContent = vbAnimHolder.getVBAnimationById("ANIMATION_CONTENT");
            vbAnimContent.stop();
            vbAnimHolder.hide();
            _hcmn_.haxe_Timer.delay(function() {
                _g.dispose(childId);
            }, 0);
        };
        fortuneCoinAssembly.FxView.prototype.showTrail = function(animId, x, y, rot, time, winValue) {
            var vbAnim = null;
            var _g1 = 0;
            var _g = this.vbViews.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (this.vbViews[i].createContainerFromStoredConfig(animId) != null) vbAnim = this.vbViews[i].createContainerFromStoredConfig(animId);
            }
            var childId = animId + this.counter;
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
                vbAnim.show();
                var offset = new displayEngineApi.Point(0, 0);
                if (this.offsets.exists(animId)) {
                    offset.x = this.offsets.get(animId).x;
                    offset.y = this.offsets.get(animId).y;
                }
                vbAnim.setX(x[0] + offset.x | 0);
                vbAnim.setY(y[0] + offset.y | 0);
                this.container.addChildComponent(vbAnim, childId);
                vbAnimContent.gotoAndPlay(false, "intro");
                this.counter++;
                this.initTween(vbAnim, x, y, rot, time, winValue);
            }
        };
        fortuneCoinAssembly.FxView.prototype.initTween = function(vbAnim, x, y, rot, time, winValue) {
            var _g = this;
            var vbAnimContent = vbAnim.getContainerById("ANIMATION_CONTENT");
            var pAnim = vbAnimContent.getParticleAnimationById("boost_trail");
            var dObj = pAnim.getParticleSystem();
            var targetX = _hcmn_.Std["int"](x[1] - vbAnim.getDisplayObject().getX());
            var targetY = _hcmn_.Std["int"](y[1] - vbAnim.getDisplayObject().getY());
            displayEngineUtils.TweenX.to(dObj.emitter.ownerPos, {
                x: targetX,
                y: targetY
            }, time, null, null, null, null, null, null, null, {
                fileName: "FxView.hx",
                lineNumber: 135,
                className: "components.fxcontroller.subcomponents.FxView",
                methodName: "initTween"
            }).ease(displayEngineUtils.EaseX.linear).onFinish(function() {
                dObj.stop();
                dObj.dispose();
                _g.container.disposeChildComponent(vbAnim.getDisplayObject().getName());
                fortuneCoinAssembly.FxEvents.getInstance().completed.dispatch(winValue);
            });
        };
        fortuneCoinAssembly.FxView.prototype.onLayoutUpdate = function(layoutConfig) {
            if (layoutConfig != null) {
                var _g = 0;
                var _g1 = _hcmn_.Reflect.fields(layoutConfig);
                while (_g < _g1.length) {
                    var element = _g1[_g];
                    ++_g;
                    var point = _hcmn_.Reflect.field(layoutConfig, element);
                    var v = new displayEngineApi.Point(point[0], point[1]);
                    this.offsets.set(element, v);
                    v;
                }
            }
        };
        fortuneCoinAssembly.FxView.prototype.hide = function(childId) {};
        fortuneCoinAssembly.FxView.prototype.__class__ = fortuneCoinAssembly.FxView;
        fortuneCoinAssembly.GameController = function(context, componentPort) {
            this.inactivityDelay = 1000;
            this.paytableOpened = false;
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] STARTED", {
                fileName: "GameController.hx",
                lineNumber: 144,
                className: "components.gamecontroller.GameController",
                methodName: "new"
            });
            this.context = context;
            this.setupPorts();
            this.setupControllers();
            this.dynamicStripes = new fortuneCoinAssembly.DynamicStripes();
            this.strategyFactory = new fortuneCoinAssembly.StrategyFactory(this);
            fortuneCoinAssembly.ExternalService.gameProtocol.registerServices(this.strategyFactory, this.consoleServiceController, fortuneCoinAssembly.ExternalService.slotParser, null);
            this.attachSubscriptions();
            context.getStarted().then(function(a) {
                _g.assemblyStarted = true;
                _g.checkGameLoaded();
            });
            var gcData = fortuneCoinAssembly.Assets.getAsset("game-config_json");
            if (gcData.gameControllerConfig != null) this.config = gcData.gameControllerConfig;
            this.consoleServiceController.setKnownConsoleOptions(gcData);
            this.initStorage();
        };
        fortuneCoinAssembly.GameController.__name__ = ["fortuneCoinAssembly", "GameController"];
        fortuneCoinAssembly.GameController.prototype.config = null;
        fortuneCoinAssembly.GameController.prototype.context = null;
        fortuneCoinAssembly.GameController.prototype.strategyFactory = null;
        fortuneCoinAssembly.GameController.prototype.consoleServiceController = null;
        fortuneCoinAssembly.GameController.prototype.cecServiceController = null;
        fortuneCoinAssembly.GameController.prototype.paytableController = null;
        fortuneCoinAssembly.GameController.prototype.assemblyStarted = null;
        fortuneCoinAssembly.GameController.prototype.layoutUpdated = null;
        fortuneCoinAssembly.GameController.prototype.paytableOpened = null;
        fortuneCoinAssembly.GameController.prototype.betPanelPort = null;
        fortuneCoinAssembly.GameController.prototype.reelsPort = null;
        fortuneCoinAssembly.GameController.prototype.paytablePort = null;
        fortuneCoinAssembly.GameController.prototype.pickerPort = null;
        fortuneCoinAssembly.GameController.prototype.gameLayoutPort = null;
        fortuneCoinAssembly.GameController.prototype.winMeterPort = null;
        fortuneCoinAssembly.GameController.prototype.soundPort = null;
        fortuneCoinAssembly.GameController.prototype.fxPort = null;
        fortuneCoinAssembly.GameController.prototype.coinBonusPort = null;
        fortuneCoinAssembly.GameController.prototype.winControllerPort = null;
        fortuneCoinAssembly.GameController.prototype.backgroundPort = null;
        fortuneCoinAssembly.GameController.prototype.popupPort = null;
        fortuneCoinAssembly.GameController.prototype.layerManagerPort = null;
        fortuneCoinAssembly.GameController.prototype.layoutUpdateController = null;
        fortuneCoinAssembly.GameController.prototype.soundController = null;
        fortuneCoinAssembly.GameController.prototype.winMeterController = null;
        fortuneCoinAssembly.GameController.prototype.stakeItemController = null;
        fortuneCoinAssembly.GameController.prototype.betPanelController = null;
        fortuneCoinAssembly.GameController.prototype.autoPlayController = null;
        fortuneCoinAssembly.GameController.prototype.winCycleController = null;
        fortuneCoinAssembly.GameController.prototype.pickerController = null;
        fortuneCoinAssembly.GameController.prototype.baseGameController = null;
        fortuneCoinAssembly.GameController.prototype.freeSpinController = null;
        fortuneCoinAssembly.GameController.prototype.layerController = null;
        fortuneCoinAssembly.GameController.prototype.dynamicStripes = null;
        fortuneCoinAssembly.GameController.prototype.inactivityTimer = null;
        fortuneCoinAssembly.GameController.prototype.inactivityDelay = null;
        fortuneCoinAssembly.GameController.prototype.storage = null;
        fortuneCoinAssembly.GameController.prototype.setupPorts = function() {
            this.betPanelPort = this.context.getUsedPort(betPanelApi.IBetPanelPort);
            this.reelsPort = this.context.getUsedPort(reelsApi.IReelsPort);
            this.gameLayoutPort = this.context.getUsedPort(gameLayoutApi.IGameLayoutPort);
            this.winMeterPort = this.context.getUsedPort(winMeterApi.IWinMeterPort);
            this.popupPort = fortuneCoinAssembly.PopupsPort.getInstance();
            this.fxPort = fortuneCoinAssembly.FxPort.getInstance();
            this.coinBonusPort = fortuneCoinAssembly.CoinBonusPort.getInstance();
            this.layerManagerPort = fortuneCoinAssembly.LayerManagerPort.getInstance();
            this.pickerPort = fortuneCoinAssembly.PickerPort.getInstance();
            this.winControllerPort = fortuneCoinAssembly.WinControllerPort.getInstance();
            this.backgroundPort = fortuneCoinAssembly.BackgroundPort.getInstance();
            this.paytablePort = fortuneCoinAssembly.PaytablePort.getInstance();
        };
        fortuneCoinAssembly.GameController.prototype.setupControllers = function() {
            this.soundController = new fortuneCoinAssembly.SoundController(this.context);
            this.winMeterController = new fortuneCoinAssembly.WinMeterController(this.winMeterPort);
            this.winCycleController = new fortuneCoinAssembly.WinCycleController(this, this.reelsPort);
            this.pickerController = new fortuneCoinAssembly.PickerController(this);
            this.baseGameController = new fortuneCoinAssembly.BaseGameController(this);
            this.freeSpinController = new fortuneCoinAssembly.FreeSpinController(this);
            this.layerController = new fortuneCoinAssembly.LayerController(this, this.popupPort, this.layerManagerPort);
            this.layoutUpdateController = new fortuneCoinAssembly.LayoutUpdateController(this.context, this.gameLayoutPort);
            this.consoleServiceController = new fortuneCoinAssembly.ConsoleServiceController(this);
            this.cecServiceController = new fortuneCoinAssembly.CecServiceController(this);
            this.stakeItemController = new fortuneCoinAssembly.StakeItemController(this);
            this.autoPlayController = new fortuneCoinAssembly.AutoPlayController(this);
            this.betPanelController = new fortuneCoinAssembly.BetPanelController(this.betPanelPort, this);
            this.paytableController = new fortuneCoinAssembly.PaytableController(this.paytablePort, this);
        };
        fortuneCoinAssembly.GameController.prototype.checkGameLoaded = function() {
            haxe.Log.trace("[GAME_CONTROLLER] checkGameLoaded: assemblyStarted = " + _hcmn_.Std.string(this.assemblyStarted) + " layoutUpdated = " + _hcmn_.Std.string(this.layoutUpdated) + " config = " + _hcmn_.Std.string(this.config), {
                fileName: "GameController.hx",
                lineNumber: 225,
                className: "components.gamecontroller.GameController",
                methodName: "checkGameLoaded"
            });
            if (!this.assemblyStarted) return;
            if (!this.layoutUpdated) return;
            if (this.config == null) return;
            fortuneCoinAssembly.ExternalService.gameProtocol.handleGameLoaded();
        };
        fortuneCoinAssembly.GameController.prototype.attachSubscriptions = function() {
            haxe.Log.trace("[GAME_CONTROLLER] GameController.subscribe()", {
                fileName: "GameController.hx",
                lineNumber: 238,
                className: "components.gamecontroller.GameController",
                methodName: "attachSubscriptions"
            });
            this.betPanelPort.onButtonPressed().subscribe($bind(this, this.handleBetPanelButtonPressed));
            this.betPanelPort.onStakeChanged().subscribe($bind(this, this.handleBetPanelStakeChanged));
            this.gameLayoutPort.getGameLayoutUpdated().subscribe($bind(this, this.handleGameLayoutUpdated));
            this.reelsPort.onReelStopped().subscribe($bind(this, this.handleReelStopped));
            this.paytablePort.onCloseButtonPressed().subscribe($bind(this, this.handlePaytableClose));
            this.pickerPort.getPick().subscribe($bind(this, this.handlePickerPick));
            this.popupPort.getPick().subscribe($bind(this, this.handlePopupButtonPressed));
            this.popupPort.getClosed().subscribe($bind(this, this.handleTutorialClosed));
            this.popupPort.getConfirmed().subscribe($bind(this, this.handleTutorialConfirmed));
            this.coinBonusPort.getCompleted().subscribe($bind(this, this.handleCoinsCompleted));
            this.coinBonusPort.getAction().subscribe($bind(this, this.handleCoinsAction));
            this.winMeterPort.onDisplayWinFinished().subscribe($bind(this, this.handleDisplayWinFinished));
            this.winMeterPort.onBigAnimationStart().subscribe($bind(this, this.handleDisplayCoinShower));
            this.fxPort.getCompleted().subscribe($bind(this, this.handleFxCompleted));
            window.addEventListener("closePaytable", $bind(this, this.onHTMLPaytableClose));
            window.addEventListener("openHelp", $bind(this, this.openHelp));
        };
        fortuneCoinAssembly.GameController.prototype.handleBetPanelButtonPressed = function(e) {
            haxe.Log.trace("[GAME_CONTROLLER] [betPanelController] GameController.handleBetPanelButtonPressed button: " + _hcmn_.Std.string(e.getPayload()), {
                fileName: "GameController.hx",
                lineNumber: 282,
                className: "components.gamecontroller.GameController",
                methodName: "handleBetPanelButtonPressed"
            });
            if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin != null) haxe.Log.trace("[GAME_CONTROLLER] [betPanelController] GameController.onBetPanelButtonPressed current: " + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current, {
                fileName: "GameController.hx",
                lineNumber: 285,
                className: "components.gamecontroller.GameController",
                methodName: "handleBetPanelButtonPressed",
                customParams: [" total ", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [betPanelController] GameController.onBetPanelButtonPressed awardCapExceeded: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded), {
                fileName: "GameController.hx",
                lineNumber: 287,
                className: "components.gamecontroller.GameController",
                methodName: "handleBetPanelButtonPressed",
                customParams: [fortuneCoinAssembly.GameData.lastSpin]
            });
            var button = e.getPayload();
            switch (button[1]) {
                case 11:
                    this.betPanelController.totalBetButtonPressed();
                    break;
                case 1:
                    this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
                    this.betPanelController.spinButtonPressed();
                    break;
                case 3:
                    haxe.Log.trace("[GameController] [betPanelController] [state] [onBetPanelButtonPressed] [setSkipState]", {
                        fileName: "GameController.hx",
                        lineNumber: 301,
                        className: "components.gamecontroller.GameController",
                        methodName: "handleBetPanelButtonPressed"
                    });
                    this.betPanelController.skipButtonPressed();
                    fortuneCoinAssembly.GameData.inactivityCounter = 0;
                    break;
                case 5:
                    this.openPaytable();
                    break;
                case 13:
                    this.autoPlayController.autoPlayStart();
                    break;
                case 14:
                    this.autoPlayController.autoPlayStop();
                    break;
                default:
                    haxe.Log.trace("[GAME_CONTROLLER] GameController.onBetPanelButtonPressed not handled for: " + _hcmn_.Std.string(button), {
                        fileName: "GameController.hx",
                        lineNumber: 317,
                        className: "components.gamecontroller.GameController",
                        methodName: "handleBetPanelButtonPressed"
                    });
            }
        };
        fortuneCoinAssembly.GameController.prototype.handleBetPanelStakeChanged = function(e) {
            var stakeItem = e.getPayload();
            this.betPanelController.stakeItemIncreaseDecrease(stakeItem);
        };
        fortuneCoinAssembly.GameController.prototype.handleGameLayoutUpdated = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [onGameLayoutUpdated] " + "layoutUpdated: " + _hcmn_.Std.string(this.layoutUpdated), {
                fileName: "GameController.hx",
                lineNumber: 331,
                className: "components.gamecontroller.GameController",
                methodName: "handleGameLayoutUpdated"
            });
            if (this.layoutUpdated) return;
            this.layoutUpdated = true;
            this.checkGameLoaded();
        };
        fortuneCoinAssembly.GameController.prototype.handleReelStopped = function(e) {
            var reelId = e.getPayload();
            if (reelId == 0) this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWinAnnouncement");
            var rp;
            var activeOutcome;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature" && fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") activeOutcome = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome;
            else activeOutcome = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome;
            rp = activeOutcome.reelPicture.reels;
            this.winCycleController.updateScatter(activeOutcome);
            this.winCycleController.showScatterWins(reelId);
            if (fortuneCoinAssembly.GameData.spinOutcome != null && fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" && reelId == fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfRows - 1) this.winMeterPort.showMessage().publish("");
            if (fortuneCoinAssembly.GameData.hasTensionOnReel(reelId + 1)) {
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.anticipation);
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_TENSION, "tension", new displayEngineApi.Point((reelId + 1) * (fortuneCoinAssembly.GameData.symbolSize.x - 13), 0), "intro");
            }
            if (reelId == 4) {
                if (fortuneCoinAssembly.GameData.hasTension) {
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.anticipation_stop);
                    if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin" && fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame") {
                        this.soundController.stopSound("basegame_music");
                        this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_bell);
                    } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin" && fortuneCoinAssembly.GameData.isRetrigger) this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_bell);
                }
            }
            var hasScatter = false;
            var _g1 = 0;
            var _g = rp[reelId].length;
            while (_g1 < _g) {
                var i = _g1++;
                if (rp[reelId][i] == fortuneCoinAssembly.GameData.scatterId) {
                    hasScatter = true;
                    break;
                }
            }
            if (hasScatter) this.soundController.activate(_hcmn_.Type.createEnum(fortuneCoinAssembly.SoundConstants, "smart_sound0" + (reelId + 1)));
            var hasCoin = false;
            var _g11 = 0;
            var _g2 = rp[reelId].length;
            while (_g11 < _g2) {
                var i1 = _g11++;
                if (rp[reelId][i1] == fortuneCoinAssembly.GameData.coinId) {
                    hasCoin = true;
                    break;
                }
            }
            if (hasCoin) {
                haxe.Log.trace("[GameController] [onReelStopped] [hasCoin]: " + (hasCoin == null ? "null" : "" + hasCoin), {
                    fileName: "GameController.hx",
                    lineNumber: 429,
                    className: "components.gamecontroller.GameController",
                    methodName: "handleReelStopped"
                });
                this.soundController.activate(_hcmn_.Type.createEnum(fortuneCoinAssembly.SoundConstants, "coin_smart0" + (reelId + 1)));
            }
            this.soundController.activate(_hcmn_.Type.createEnum(fortuneCoinAssembly.SoundConstants, "reelstop0" + (reelId + 1)));
        };
        fortuneCoinAssembly.GameController.prototype.showBigWinTension = function() {
            if (fortuneCoinAssembly.GameData.bigWinAnnouncementCounter == 0) {
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWinAnnouncement", new displayEngineApi.Point(0, 0), "loop", "bigWinAnnouncement");
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.special_coins);
            }
            fortuneCoinAssembly.GameData.bigWinAnnouncementCounter++;
            if (fortuneCoinAssembly.GameData.bigWinAnnouncementCounter == 2) fortuneCoinAssembly.GameData.bigWinAnnouncementCounter = 0;
        };
        fortuneCoinAssembly.GameController.prototype.getCoinsOnReel = function() {
            var coins = 0;
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicture.reels.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicture.reels[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    if (fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicture.reels[i][j] == "c01") coins++;
                }
            }
            return coins;
        };
        fortuneCoinAssembly.GameController.prototype.playBigWinAnnouncement = function() {
            this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWinAnnouncement", new displayEngineApi.Point(0, 0), "loop", "bigWinAnnouncement");
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.special_coins);
        };
        fortuneCoinAssembly.GameController.prototype.handleDisplayWinFinished = function(e) {
            haxe.Log.trace("[GameController] [handleDisplayWinFinished] [GameData.spinOutcome.stage]\t\t: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "GameController.hx",
                lineNumber: 473,
                className: "components.gamecontroller.GameController",
                methodName: "handleDisplayWinFinished"
            });
            haxe.Log.trace("[GameController] [handleDisplayWinFinished] [GameData.spinOutcome.nextStage]\t: " + fortuneCoinAssembly.GameData.spinOutcome.nextStage, {
                fileName: "GameController.hx",
                lineNumber: 474,
                className: "components.gamecontroller.GameController",
                methodName: "handleDisplayWinFinished"
            });
            haxe.Log.trace("[GameController] [handleDisplayWinFinished] [GameData.coinsFeatureState]\t\t: " + fortuneCoinAssembly.GameData.coinsFeatureState, {
                fileName: "GameController.hx",
                lineNumber: 475,
                className: "components.gamecontroller.GameController",
                methodName: "handleDisplayWinFinished"
            });
            haxe.Log.trace("[GameController] [handleDisplayWinFinished] [GameData.isFreeSpin]\t\t: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isFreeSpin), {
                fileName: "GameController.hx",
                lineNumber: 476,
                className: "components.gamecontroller.GameController",
                methodName: "handleDisplayWinFinished"
            });
            haxe.Log.trace("[GameController] [handleDisplayWinFinished] [GameData.countUpFinished]\t\t: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.countUpFinished), {
                fileName: "GameController.hx",
                lineNumber: 477,
                className: "components.gamecontroller.GameController",
                methodName: "handleDisplayWinFinished"
            });
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            fortuneCoinAssembly.GameData.isWinMeterActive = false;
            if (fortuneCoinAssembly.GameData.coinsFeatureState != "FreeSpin") this.winMeterController.clear();
            this.winMeterController.stop();
            if (!fortuneCoinAssembly.GameData.countUpFinished) {
                fortuneCoinAssembly.GameData.countUpFinished = true;
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            }
            if (fortuneCoinAssembly.GameData.hasShake) {
                this.layerController.getReset(fortuneCoinAssembly.TransitionConstants.REELS_SHAKE);
                fortuneCoinAssembly.GameData.hasShake = false;
            }
            if (fortuneCoinAssembly.GameData.bigWinParticles) {
                this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_2");
                fortuneCoinAssembly.GameData.bigWinParticles = false;
            }
            if (fortuneCoinAssembly.GameData.mediumWinParticles) {
                this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_1");
                fortuneCoinAssembly.GameData.mediumWinParticles = false;
            }
            if (fortuneCoinAssembly.GameData.grandeWinParticles) {
                this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_0");
                fortuneCoinAssembly.GameData.grandeWinParticles = false;
            }
            if (fortuneCoinAssembly.GameData.coinShowerActive) {
                fortuneCoinAssembly.GameData.coinShowerActive = false;
                this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWin");
            }
        };
        fortuneCoinAssembly.GameController.prototype.handleDisplayCoinShower = function(e) {
            var totalBet = _hcmn_.Std.parseFloat(this.stakeItemController.getTotalBet());
            var totalWin;
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") totalWin = parseFloat(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout);
            else totalWin = parseFloat(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
            if (totalBet * 10 < totalWin && totalBet * 30 > totalWin) {
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_1", new displayEngineApi.Point(720, 650), "intro", "big_win_sparks_1");
                fortuneCoinAssembly.GameData.mediumWinParticles = true;
            } else if (totalBet * 30 < totalWin && totalBet * 60 > totalWin) {
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_2", new displayEngineApi.Point(720, 650), "intro", "big_win_sparks_2");
                fortuneCoinAssembly.GameData.bigWinParticles = true;
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWin", new displayEngineApi.Point(0, 0), "loop", "bigWin");
                fortuneCoinAssembly.GameData.coinShowerActive = true;
            } else if (totalBet * 60 < totalWin) {
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWin", new displayEngineApi.Point(0, 0), "loop", "bigWin");
                fortuneCoinAssembly.GameData.coinShowerActive = true;
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_0", new displayEngineApi.Point(720, 650), "intro", "big_win_sparks_0");
                fortuneCoinAssembly.GameData.grandeWinParticles = true;
            }
        };
        fortuneCoinAssembly.GameController.prototype.handleFxCompleted = function(e) {
            this.pickerController.showBoostAnimation(e.getPayload());
        };
        fortuneCoinAssembly.GameController.prototype.handlePaytableClose = function(e) {
            haxe.Log.trace("[GAME_CONTROLLER] GameController.onPaytableClose", {
                fileName: "GameController.hx",
                lineNumber: 565,
                className: "components.gamecontroller.GameController",
                methodName: "handlePaytableClose"
            });
            this.paytableOpened = false;
            this.reelsPort.show().publish(null);
            fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.paytable_close);
            this.betPanelController.setIdleState();
            this.paytableController.closePaytable(null);
        };
        fortuneCoinAssembly.GameController.prototype.onHTMLPaytableClose = function(e) {
            this.handlePaytableClose(null);
        };
        fortuneCoinAssembly.GameController.prototype.openHelp = function() {
            this.soundController.playSound("paytable_open");
        };
        fortuneCoinAssembly.GameController.prototype.onPaytableChange = function(e) {
            this.soundController.playSound("click");
        };
        fortuneCoinAssembly.GameController.prototype.handlePickerPick = function(evt) {
            var _g = this;
            haxe.Log.trace("[GameController] [handlePick] " + "evt: " + _hcmn_.Std.string(evt.getPayload()), {
                fileName: "GameController.hx",
                lineNumber: 602,
                className: "components.gamecontroller.GameController",
                methodName: "handlePickerPick",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.stage, fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.picked]
            });
            fortuneCoinAssembly.GameData.currentPick = evt.getPayload();
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.pick_stop);
            if (!fortuneCoinAssembly.GameData.picked) {
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop);
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.picker_bonus_music, 0.5);
                fortuneCoinAssembly.GameData.picked = true;
            }
            haxe.Log.trace("GameData.picked " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.picked), {
                fileName: "GameController.hx",
                lineNumber: 613,
                className: "components.gamecontroller.GameController",
                methodName: "handlePickerPick"
            });
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.pick_stop);
            _hcmn_.haxe_Timer.delay(function() {
                _g.soundController.activate(fortuneCoinAssembly.SoundConstants.pick);
            }, 10);
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.GameController.prototype.handlePopupButtonPressed = function(evt) {
            haxe.Log.trace("[GameController] [handlePopupButtonPressed] " + "evt: " + _hcmn_.Std.string(evt.getPayload()), {
                fileName: "GameController.hx",
                lineNumber: 633,
                className: "components.gamecontroller.GameController",
                methodName: "handlePopupButtonPressed"
            });
            if (evt.getPayload() == "JPA") {
                this.hideCoins();
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music, 0);
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
                this.layerController.initTween(fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO);
                this.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD, true));
            }
            if (evt.getPayload() == "FS") {
                this.hideCoins();
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
                this.layerController.initTween(fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO);
                this.layerController.hideLayers("REELS_ELEMENTS");
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                this.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD, true));
            }
            if (evt.getPayload() == "FSRESUME") fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.GameController.prototype.handleGFAutoPick = function(event) {
            haxe.Log.trace("[GameController] [handleGFAutoPick] ", {
                fileName: "GameController.hx",
                lineNumber: 664,
                className: "components.gamecontroller.GameController",
                methodName: "handleGFAutoPick",
                customParams: [event.getPayload().playerChoice]
            });
            haxe.Log.trace("[GameController] [handleGFAutoPick] ", {
                fileName: "GameController.hx",
                lineNumber: 665,
                className: "components.gamecontroller.GameController",
                methodName: "handleGFAutoPick",
                customParams: [event.getPayload().instanceId]
            });
            var instanceId = event.getPayload().instanceId;
            if (instanceId == "BonusPicker") {
                this.hideCoins();
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music, 0);
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
                this.layerController.initTween(fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO);
                this.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD, true));
            } else if (instanceId == "FreeSpinStart") {
                this.hideCoins();
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
                this.layerController.initTween(fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO);
                this.layerController.hideLayers("REELS_ELEMENTS");
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                this.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD, true));
            } else if (instanceId == "FreeSpinResumeStart") fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            else {
                fortuneCoinAssembly.GameData.currentPick = event.getPayload();
                if (!fortuneCoinAssembly.GameData.picked) {
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop);
                    this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
                    this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.picker_bonus_music, 0.5);
                    fortuneCoinAssembly.GameData.picked = true;
                }
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.pick);
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            }
        };
        fortuneCoinAssembly.GameController.prototype.handleTutorialClosed = function(evt) {
            haxe.Log.trace("[GameController] [handleTutorialClosed] ", {
                fileName: "GameController.hx",
                lineNumber: 714,
                className: "components.gamecontroller.GameController",
                methodName: "handleTutorialClosed"
            });
            var tutorialPopup = evt.getPayload()[0];
            this.layerController.hidePopup(_hcmn_.Type.createEnum(fortuneCoinAssembly.PopupTypeEnum, tutorialPopup, null));
            this.betPanelController.setIdleState();
            this.inactivityTimer = new _hcmn_.haxe_Timer(this.inactivityDelay);
            this.inactivityTimer.run = $bind(this, this.checkActivity);
            fortuneCoinAssembly.GameData.tutorialClosed = true;
            this.layerController.showGameElements();
            this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL);
            this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT);
        };
        fortuneCoinAssembly.GameController.prototype.handleTutorialConfirmed = function(evt) {
            haxe.Log.trace("[GameController] [handleTutorialConfirmed] ", {
                fileName: "GameController.hx",
                lineNumber: 738,
                className: "components.gamecontroller.GameController",
                methodName: "handleTutorialConfirmed"
            });
            if (fortuneCoinAssembly.GameData.tutorialConfirmed) fortuneCoinAssembly.GameData.tutorialConfirmed = false;
            else fortuneCoinAssembly.GameData.tutorialConfirmed = true;
            if (this.storage.hasOption("tutorialConfirmed")) this.storage.writeOption("tutorialConfirmed", _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialConfirmed));
        };
        fortuneCoinAssembly.GameController.prototype.handleCoinsCompleted = function(payload) {
            haxe.Log.trace("[GameController] [handleCoinsCompleted] ", {
                fileName: "GameController.hx",
                lineNumber: 754,
                className: "components.gamecontroller.GameController",
                methodName: "handleCoinsCompleted",
                customParams: ["stage", fortuneCoinAssembly.GameData.spinOutcome.stage, "nextStage", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState, "coinsFeauture:", fortuneCoinAssembly.GameData.coinsFeatureBaseGame]
            });
            haxe.Log.trace("[LayerController] [handleCoinsCompleted] ", {
                fileName: "GameController.hx",
                lineNumber: 756,
                className: "components.gamecontroller.GameController",
                methodName: "handleCoinsCompleted"
            });
            fortuneCoinAssembly.GameData.isCoinBonusActive = false;
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.GameController.prototype.handleCoinsAction = function(payload) {
            haxe.Log.trace("[GameController] [handleCoinsAction]:  " + _hcmn_.Std.string(payload), {
                fileName: "GameController.hx",
                lineNumber: 767,
                className: "components.gamecontroller.GameController",
                methodName: "handleCoinsAction"
            });
            var payloadId = payload.getPayload().id;
            if (payloadId == "turn") {
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.coin_turn01);
                if (payload.getPayload().winType == "value") this.playCoinRevealSound(payload.getPayload().value);
            } else if (payloadId == "coin_explosion") {
                var position = payload.getPayload().position;
                this.showFx(fortuneCoinAssembly.FxTypeEnum.FX_FRONT, payloadId, position, "intro");
            } else if (payloadId == "prog") {
                this.layerController.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT, "dragon_right", "win"));
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_bell);
            } else if (payloadId == "fs") {
                this.layerController.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT, "dragon_left", "win"));
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_bell);
            } else if (payloadId == "value") {
                this.layerController.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT, "dragon_right", "win"));
                this.layerController.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT, "dragon_left", "win"));
            }
        };
        fortuneCoinAssembly.GameController.prototype.initializeComponents = function(initPayload) {
            haxe.Log.trace("[GAME_CONTROLLER] [initializeComponents]", {
                fileName: "GameController.hx",
                lineNumber: 804,
                className: "components.gamecontroller.GameController",
                methodName: "initializeComponents"
            });
            var slotDefinition = initPayload.slotDefinition;
            var riskControlSettings = initPayload.riskControlSettings;
            var stake = initPayload.stake;
            var spinOutcome = initPayload.spinOutcome;
            if (riskControlSettings.rgPresentation != null) fortuneCoinAssembly.GameData.rgPresentation = riskControlSettings.rgPresentation;
            fortuneCoinAssembly.Parser.initParser();
            fortuneCoinAssembly.GameData.createGameData(slotDefinition, riskControlSettings, spinOutcome, stake, this.stakeItemController);
            this.winCycleController.initialize();
            this.dynamicStripes.init();
            var reels1 = new _hcmn_.haxe_ds_IntMap();
            var _g1 = 0;
            var _g11 = slotDefinition.reels;
            while (_g1 < _g11.length) {
                var reel = _g11[_g1];
                ++_g1;
                reels1.h[reel.id] = reel.stripes;
            }
            var reelsPayload = new reelsApi.ReelsPayload(slotDefinition.reelPictureSizePresentation.numberOfRows, slotDefinition.reelPictureVisibilityPresentation.reelsInfo, slotDefinition.symbols, reels1);
            this.reelsPort.initializeGame().publish(reelsPayload);
            haxe.Log.trace("Assets.xxxxxxxxxxx ", {
                fileName: "GameController.hx",
                lineNumber: 846,
                className: "components.gamecontroller.GameController",
                methodName: "initializeComponents",
                customParams: [fortuneCoinAssembly.Assets.getAsset("paytable_definition_config").url]
            });
            var paytablePayloadRtp = new fortuneCoinAssembly.PaytableRtp(slotDefinition.rtp.minRTP, slotDefinition.rtp.maxRTP, slotDefinition.rtp.singleRTP, slotDefinition.rtp.minSingleRTP, slotDefinition.rtp.maxSingleRTP);
            var paytablePayload = new fortuneCoinAssembly.PaytablePayload(paytablePayloadRtp, riskControlSettings.denomination, riskControlSettings.awardCap, (function($this) {
                var $r;
                var _g = new _hcmn_.haxe_ds_StringMap();
                if (_hcmn_.__map_reserved[""] != null) _g.setReserved("", "");
                else _g.h[""] = "";
                $r = _g;
                return $r;
            }(this)), null, fortuneCoinAssembly.GameData.payLines, fortuneCoinAssembly.Assets.getAsset("paytable_definition_config").url);
            this.paytablePort.initializeGame().publish(paytablePayload);
            var betPanelStake = new betPanelApi.BetPanelStakeItems(stake.numberOfLines, stake.betPerLine, stake.totalBet, riskControlSettings.totalBetsForSelectedBetPerLine, riskControlSettings.totalBetsForSelectedLines);
            var betPanelPayload = new betPanelApi.BetPanelPayload(betPanelStake, slotDefinition.autoSpins.enabled);
            this.betPanelPort.initializeGame().publish(betPanelPayload);
            this.betPanelPort.setStake().publish(betPanelStake);
            if (fortuneCoinAssembly.ExternalService.isDesktop()) this.betPanelPort.getCoinValue().publish(fortuneCoinAssembly.ExternalService.moneyFormatter.format(this.stakeItemController.getBetPerLine()));
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.updateJackpotValues();
            this.winMeterController.clear();
            if (!fortuneCoinAssembly.GameData.isResume) {
                if (!fortuneCoinAssembly.GameData.tutorialConfirmed) this.betPanelController.setSpinState();
                else {
                    this.inactivityTimer = new _hcmn_.haxe_Timer(this.inactivityDelay);
                    this.inactivityTimer.run = $bind(this, this.checkActivity);
                }
                this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.stage);
                this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music);
            } else {
                this.inactivityTimer = new _hcmn_.haxe_Timer(this.inactivityDelay);
                this.inactivityTimer.run = $bind(this, this.checkActivity);
            }
        };
        fortuneCoinAssembly.GameController.prototype.setStripLayerIds = function() {
            if (fortuneCoinAssembly.GameData.stripLayersSectionMappings != null) {
                var sectionId = this.getSectionId(fortuneCoinAssembly.GameData.stripLayersSectionMappings);
                var stripLayerId = 0;
                if (sectionId != "") stripLayerId = fortuneCoinAssembly.GameData.slotDefinition.stripeLayersMap.get(sectionId) - 2;
                fortuneCoinAssembly.GameData.stripLayerIds = [];
                var _g1 = 0;
                var _g = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSizePresentation.numberOfCollumns;
                while (_g1 < _g) {
                    var i = _g1++;
                    fortuneCoinAssembly.GameData.stripLayerIds.push(stripLayerId);
                }
            }
        };
        fortuneCoinAssembly.GameController.prototype.setSchemaSet = function() {
            if (fortuneCoinAssembly.GameData.schemaSetSectionMappings != null) {
                var sectionId = this.getSectionId(fortuneCoinAssembly.GameData.schemaSetSectionMappings);
                fortuneCoinAssembly.GameData.schemaSet = null;
                if (sectionId != "") fortuneCoinAssembly.GameData.schemaSet = fortuneCoinAssembly.Extender.strToArray(sectionId == null ? "null" : "" + sectionId);
            }
        };
        fortuneCoinAssembly.GameController.prototype.getSectionId = function(sectionMappings) {
            var sectionId = "";
            var $it0 = sectionMappings.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.Std.parseInt(key) == this.stakeItemController.getBetPerPattern()) {
                    sectionId = _hcmn_.__map_reserved[key] != null ? sectionMappings.getReserved(key) : sectionMappings.h[key];
                    break;
                }
            }
            return sectionId;
        };
        fortuneCoinAssembly.GameController.prototype.dynamicSymbolReplacement = function() {
            var newReels = this.dynamicStripes.updateStripes(fortuneCoinAssembly.GameData.stripLayerIds);
            var reels = new _hcmn_.haxe_ds_IntMap();
            var _g = 0;
            while (_g < newReels.length) {
                var reel = newReels[_g];
                ++_g;
                reels.h[reel.id] = reel.stripes;
            }
            this.reelsPort.changeReels().publish(reels);
        };
        fortuneCoinAssembly.GameController.prototype.startSpin = function() {
            fortuneCoinAssembly.GameData.inactivityCounter = 0;
            fortuneCoinAssembly.GameData.countUpFinished = false;
            fortuneCoinAssembly.GameData.spinStarted = true;
            this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
            this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.nextStage);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_music);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.spin_button);
            this.forcePaytableClose();
            if (fortuneCoinAssembly.GameData.autoSpinStarted) {
                this.betPanelPort.setAutoPlayButtonState().publish(betPanelApi.SetAutoPlayButtonState.STOP_BUTTON_STATE);
                this.betPanelPort.setNumberOffAutoSpinsLeft().publish(fortuneCoinAssembly.GameData.autoSpinSteps + "/" + fortuneCoinAssembly.GameData.totalAutoSpins);
            }
            this.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
            this.reelsPort.startSpin().publish(new reelsApi.StartSpinPayload(fortuneCoinAssembly.GameData.stripLayerIds));
            if (fortuneCoinAssembly.GameData.isFreeSpin) {
                if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current < fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total) this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.getString("INFO_DISPLAY_0") + " " + (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current + 1) + this.getString("OF") + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total], ["INFO_DISPLAY_0"]);
            } else if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
        };
        fortuneCoinAssembly.GameController.prototype.stopReelSpin = function(time) {
            var rp;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature" && fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                rp = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels;
                fortuneCoinAssembly.GameData.setTensionReels(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome);
            } else {
                rp = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels;
                fortuneCoinAssembly.GameData.setTensionReels(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome);
            }
            var stopSpinPayload = new reelsApi.StopSpinPayload(rp, fortuneCoinAssembly.GameData.tensionReels);
            var stopSpin = this.reelsPort.stopSpin();
            var spinFinished = this.reelsPort.onSpinStopped();
            var p = new fortuneCoinAssembly.TopicToPromise(stopSpin, spinFinished);
            return p.execute(stopSpinPayload, time);
        };
        fortuneCoinAssembly.GameController.prototype.openPaytable = function() {
            haxe.Log.trace("[GAME_CONTROLLER] openPaytable", {
                fileName: "GameController.hx",
                lineNumber: 1045,
                className: "components.gamecontroller.GameController",
                methodName: "openPaytable"
            });
            if (this.paytableOpened) {
                this.cecServiceController.paytableUsed("close");
                this.handlePaytableClose();
                return;
            }
            this.cecServiceController.paytableUsed("open");
            this.paytableOpened = true;
            this.paytablePort.show().publish(new fortuneCoinAssembly.PaytableTypePayload("paytable"));
            this.betPanelController.setPaytableOpenState();
            this.soundController.playSound("paytable_open");
        };
        fortuneCoinAssembly.GameController.prototype.forcePaytableClose = function() {
            haxe.Log.trace("[GAME_CONTROLLER] forcePaytableClose", {
                fileName: "GameController.hx",
                lineNumber: 1067,
                className: "components.gamecontroller.GameController",
                methodName: "forcePaytableClose"
            });
            this.cecServiceController.paytableUsed("close");
            this.paytableOpened = false;
            this.paytablePort.hide().publish(null);
            this.reelsPort.show().publish(null);
        };
        fortuneCoinAssembly.GameController.prototype.displayWin = function(payout, bigWin, instantWin, startingAmount) {
            if (instantWin == null) instantWin = false;
            var accumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
            var accumulatedFSPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout;
            var fsOutcome = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome;
            var bgOutcome = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome;
            fortuneCoinAssembly.GameData.isWinMeterActive = true;
            if (bigWin.winGroup > 4) {
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_bell);
                this.layerController.getShake(new fortuneCoinAssembly.ShakeProperties("REELS_SHAKE", 15, 2, 10, 1800));
                fortuneCoinAssembly.GameData.hasShake = true;
            }
            var instWin = instantWin;
            if (fortuneCoinAssembly.GameData.isLowWin()) instWin = true;
            this.winMeterController.showWinCountUp(payout, bigWin, instWin, startingAmount);
            this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.stage);
            if ((function($this) {
                    var $r;
                    var a = fortuneCoinAssembly.WinMeterController.winMapping(bigWin.winGroup);
                    $r = _hcmn_.Type.enumEq(a, fortuneCoinAssembly.WinEnum.BIG);
                    return $r;
                }(this))) {
                this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_rollup);
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.basegame_music, 0);
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.freegame_music, 0);
            } else {
                if (fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature") this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.coinsFeatureState);
                if (!fortuneCoinAssembly.GameData.isLowWin()) {
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker);
                }
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.basegame_music, 0.2);
                this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.freegame_music, 0.2);
            }
        };
        fortuneCoinAssembly.GameController.prototype.playCoinRevealSound = function(value) {
            var _g = this;
            if (value < 100) {
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.coin_reveal_low);
                _hcmn_.haxe_Timer.delay(function() {
                    _g.soundController.activate(fortuneCoinAssembly.SoundConstants.coin_reveal_low);
                }, 10);
            } else if (value >= 100 && value <= 300) {
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.coin_reveal_mid);
                _hcmn_.haxe_Timer.delay(function() {
                    _g.soundController.activate(fortuneCoinAssembly.SoundConstants.coin_reveal_mid);
                }, 10);
            } else if (value > 300) {
                this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.coin_reveal_high);
                _hcmn_.haxe_Timer.delay(function() {
                    _g.soundController.activate(fortuneCoinAssembly.SoundConstants.coin_reveal_high);
                }, 10);
            }
        };
        fortuneCoinAssembly.GameController.prototype.showCoinBonus = function(state) {
            this.coinBonusPort.getShow().publish(new fortuneCoinAssembly.CoinBonusPayload(fortuneCoinAssembly.CoinBonusType.COIN_BONUS, fortuneCoinAssembly.GameData.getSortedCoins(state), "idle_value"));
            fortuneCoinAssembly.GameData.isCoinBonusActive = true;
            if (fortuneCoinAssembly.GameData.coinsFeatureState != "FreeSpin") this.winMeterController.clear();
        };
        fortuneCoinAssembly.GameController.prototype.showRetriggerScreen = function() {
            var _g = this;
            if (!fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isMaxAwarded) this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER, [this.getString("FS_RETRIGGER_0"), this.getString("FS_RETRIGGER_1"), this.getString("FS_RETRIGGER_2"), _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.awarded)]);
            else this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER, [this.getString("MAX_RETRIGGER_0"), this.getString("MAX_RETRIGGER_1")]);
            this.winCycleController.resetWinCycle();
            this.winCycleController.resetScatters();
            this.betPanelController.setSpinState();
            this.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
            _hcmn_.haxe_Timer.delay(function() {
                if (!fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isMaxAwarded) _g.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER);
                else _g.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER);
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            }, 2000);
        };
        fortuneCoinAssembly.GameController.prototype.updateJackpotValues = function(isReset) {
            if (isReset == null) isReset = false;
            if (!isReset) fortuneCoinAssembly.GameData.updateJackpots();
            var _g = 0;
            var _g1 = fortuneCoinAssembly.GameData.jackpots;
            while (_g < _g1.length) {
                var jackpot = _g1[_g];
                ++_g;
                var typeSTR;
                var constr = jackpot.name.toUpperCase();
                typeSTR = _hcmn_.Type.createEnum(fortuneCoinAssembly.PopupTypeEnum, constr, null);
                this.layerController.showPopup(typeSTR, [jackpot.value]);
                haxe.Log.trace("[GameController] [updateJackpotValues] " + "jackpot: " + _hcmn_.Std.string(jackpot), {
                    fileName: "GameController.hx",
                    lineNumber: 1201,
                    className: "components.gamecontroller.GameController",
                    methodName: "updateJackpotValues",
                    customParams: [typeSTR, jackpot.value]
                });
            }
        };
        fortuneCoinAssembly.GameController.prototype.initStorage = function() {
            this.storage = new fortuneCoinAssembly.Storage();
            if (!this.storage.hasOption("tutorialConfirmed")) this.storage.writeOption("tutorialConfirmed", "false");
            var confStorage = this.storage.readOption("tutorialConfirmed");
            if (confStorage == "true") fortuneCoinAssembly.GameData.tutorialConfirmed = true;
            else fortuneCoinAssembly.GameData.tutorialConfirmed = false;
            if (fortuneCoinAssembly.GameData.tutorialConfirmed) fortuneCoinAssembly.GameData.tutorialClosed = true;
        };
        fortuneCoinAssembly.GameController.prototype.checkActivity = function() {
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                if (fortuneCoinAssembly.GameData.inactivityCounter == 15) {
                    fortuneCoinAssembly.GameData.inactivityCounter = 0;
                    this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, false);
                    this.soundController.customFadeOut(fortuneCoinAssembly.SoundConstants.basegame_music, 0.5);
                }
                fortuneCoinAssembly.GameData.inactivityCounter += 1;
            }
        };
        fortuneCoinAssembly.GameController.prototype.showAwardCapPopup = function() {
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                if (fortuneCoinAssembly.GameData.spinOutcome.stage == "Picker") this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP, [this.getString("AWARD_CAP_0"), this.getString("AWARD_CAP_1"), fortuneCoinAssembly.ExternalService.moneyFormatter.format(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout), this.getString("AWARD_CAP_3")]);
                else this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP, [this.getString("AWARD_CAP_0"), this.getString("AWARD_CAP_1"), fortuneCoinAssembly.ExternalService.moneyFormatter.format(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout), ""]);
            } else this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP, [this.getString("AWARD_CAP_0"), this.getString("AWARD_CAP_1"), fortuneCoinAssembly.ExternalService.moneyFormatter.format(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout), this.getString("AWARD_CAP_3")]);
            this.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, true), true);
            this.winCycleController.resetWinCycle();
            this.winCycleController.resetScatters();
            this.hideCoins();
            var $it0 = this.pickerController.awardedValues.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, key);
            }
            this.pickerController.resetAwardedValues();
            fortuneCoinAssembly.GameData.isRetrigger = false;
            this.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
            this.backgroundPort.getHide().publish(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD);
            this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
            this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
            this.pickerPort.getHide().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
            this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK);
            this.backgroundPort.getHide().publish(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD);
            if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music_stop);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_music_stop);
            this.layerController.showLayers("REELS_ELEMENTS");
            this.betPanelController.setSkipState();
        };
        fortuneCoinAssembly.GameController.prototype.hideAwardCapPopup = function() {
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music);
            this.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP);
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.GameController.prototype.showIdleCoins = function(stateId, stage) {
            haxe.Log.trace("[GameController] [showIdleCoins] " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.getSortedCoins(stage)), {
                fileName: "GameController.hx",
                lineNumber: 1292,
                className: "components.gamecontroller.GameController",
                methodName: "showIdleCoins"
            });
            this.coinBonusPort.getShowIdle().publish(new fortuneCoinAssembly.CoinBonusPayload(fortuneCoinAssembly.CoinBonusType.COIN_BONUS, fortuneCoinAssembly.GameData.getSortedCoins(stage), stateId));
        };
        fortuneCoinAssembly.GameController.prototype.stopAutoSpin = function() {
            fortuneCoinAssembly.ExternalService.gameProtocol.sendAutoSpinStopped("BonusStop");
        };
        fortuneCoinAssembly.GameController.prototype.hideCoins = function() {
            haxe.Log.trace("[GameController] [hideCoins] ", {
                fileName: "GameController.hx",
                lineNumber: 1303,
                className: "components.gamecontroller.GameController",
                methodName: "hideCoins"
            });
            this.coinBonusPort.getHide().publish(fortuneCoinAssembly.CoinBonusType.COIN_BONUS);
        };
        fortuneCoinAssembly.GameController.prototype.showFx = function(type, id, position, state, childId) {
            if (childId != null) this.fxPort.getShow().publish(new fortuneCoinAssembly.ShowFxPayload(type, id, position, state, childId));
            else this.fxPort.getShow().publish(new fortuneCoinAssembly.ShowFxPayload(type, id, position, state));
        };
        fortuneCoinAssembly.GameController.prototype.hideFx = function(type, id) {
            this.fxPort.getHide().publish(new fortuneCoinAssembly.HideFxPayload(type, id));
        };
        fortuneCoinAssembly.GameController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.GameController.prototype.rand = function(min, max) {
            return _hcmn_.Std["int"](_hcmn_.Math.tan(_hcmn_.Math.random() * (max - min) + min));
        };
        fortuneCoinAssembly.GameController.prototype.__class__ = fortuneCoinAssembly.GameController;
        fortuneCoinAssembly.GameControllerConfig = function() {};
        fortuneCoinAssembly.GameControllerConfig.__name__ = ["fortuneCoinAssembly", "GameControllerConfig"];
        fortuneCoinAssembly.GameControllerConfig.prototype.winlineInterval = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.playingLinesAtBetMessageDelay = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_winlineInterval = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_IntroScreenDuration = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_FirstSpinDelay = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_WinSpinDelay = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_NoWinSpinDelay = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_RetriggerScreenDuration = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_MaxRetriggerScreenDuration = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.fs_SummaryDuration = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.maxAwardSpinEnabledDelay = null;
        fortuneCoinAssembly.GameControllerConfig.prototype.__class__ = fortuneCoinAssembly.GameControllerConfig;
        fortuneCoinAssembly.ScatterAward = function(awardBG, awardFS) {
            this.awardBG = awardBG;
            this.awardFS = awardFS;
        };
        fortuneCoinAssembly.ScatterAward.__name__ = ["fortuneCoinAssembly", "ScatterAward"];
        fortuneCoinAssembly.ScatterAward.prototype.awardBG = null;
        fortuneCoinAssembly.ScatterAward.prototype.awardFS = null;
        fortuneCoinAssembly.ScatterAward.prototype.__class__ = fortuneCoinAssembly.ScatterAward;
        fortuneCoinAssembly.GameData = function() {};
        fortuneCoinAssembly.GameData.__name__ = ["fortuneCoinAssembly", "GameData"];
        fortuneCoinAssembly.GameData.slotDefinition = null;
        fortuneCoinAssembly.GameData.riscControlSettings = null;
        fortuneCoinAssembly.GameData.spinOutcome = null;
        fortuneCoinAssembly.GameData.numberOfLines = null;
        fortuneCoinAssembly.GameData.betPerLineCredit = null;
        fortuneCoinAssembly.GameData.betPerLine = null;
        fortuneCoinAssembly.GameData.sideBet = null;
        fortuneCoinAssembly.GameData.stripLayersSectionMappings = null;
        fortuneCoinAssembly.GameData.schemaSetSectionMappings = null;
        fortuneCoinAssembly.GameData.pickerChoices = null;
        fortuneCoinAssembly.GameData.currentPick = null;
        fortuneCoinAssembly.GameData.jackpots = null;
        fortuneCoinAssembly.GameData.jackpotMulitplier = null;
        fortuneCoinAssembly.GameData.jackpotAward = null;
        fortuneCoinAssembly.GameData.fsJackpotMulitplier = null;
        fortuneCoinAssembly.GameData.fsJackpotAward = null;
        fortuneCoinAssembly.GameData.autoPlayWinTimer = null;
        fortuneCoinAssembly.GameData.tensionReels = null;
        fortuneCoinAssembly.GameData.symbolSize = null;
        fortuneCoinAssembly.GameData.payLines = null;
        fortuneCoinAssembly.GameData.coinsFeatureBaseGame = null;
        fortuneCoinAssembly.GameData.coinsFeatureFreeSpin = null;
        fortuneCoinAssembly.GameData.picksDisabled = null;
        fortuneCoinAssembly.GameData.lastAccumulatedPayout = null;
        fortuneCoinAssembly.GameData.winGroups = null;
        fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix = null;
        fortuneCoinAssembly.GameData.createGameData = function(slotDef, riscControl, spinOut, stake, stakeItemController) {
            fortuneCoinAssembly.GameData.slotDefinition = slotDef;
            fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix = [];
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfCollumns;
            while (_g1 < _g) {
                var i = _g1++;
                fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix[i] = [];
                var _g3 = 0;
                var _g2 = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfRows;
                while (_g3 < _g2) {
                    var j = _g3++;
                    fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix[i][j] = 0;
                }
            }
            fortuneCoinAssembly.GameData.riscControlSettings = riscControl;
            fortuneCoinAssembly.GameData.setSpinOutcome(spinOut);
            stakeItemController.setStakeItem(stake);
            fortuneCoinAssembly.GameData.jackpots = fortuneCoinAssembly.Parser.parseJackpots();
            if (spinOut.gameStatus == "InProgress") fortuneCoinAssembly.GameData.isResume = true;
            var reelConfig = fortuneCoinAssembly.Assets.getAsset("reel-config");
            fortuneCoinAssembly.GameData.symbolSize = new displayEngineApi.Point();
            fortuneCoinAssembly.GameData.symbolSize.x = reelConfig.defaultReelConfig.cellWidth;
            fortuneCoinAssembly.GameData.symbolSize.y = reelConfig.defaultReelConfig.cellHeight;
        };
        fortuneCoinAssembly.GameData.setSpinOutcome = function(spinOut) {
            haxe.Log.trace("[im][GameData] [setSpinOutcome] stage " + "stage:" + spinOut.stage + " | nextstage:" + spinOut.nextStage + " | gameStatus:" + spinOut.gameStatus, {
                fileName: "GameData.hx",
                lineNumber: 180,
                className: "components.gamecontroller.GameData",
                methodName: "setSpinOutcome"
            });
            haxe.Log.trace("[im][GameData] [setSpinOutcome] stage " + "BG Outcome:" + _hcmn_.Std.string(spinOut.baseGame != null) + " | FS Outcome:" + _hcmn_.Std.string(spinOut.freeSpin != null) + " | Picker Outcome:" + _hcmn_.Std.string(spinOut.pickerBonus != null), {
                fileName: "GameData.hx",
                lineNumber: 181,
                className: "components.gamecontroller.GameData",
                methodName: "setSpinOutcome"
            });
            haxe.Log.trace("[im][GameData] ----------------------------------------------------------------------------------------", {
                fileName: "GameData.hx",
                lineNumber: 182,
                className: "components.gamecontroller.GameData",
                methodName: "setSpinOutcome"
            });
            fortuneCoinAssembly.GameData.spinOutcome = spinOut;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame") fortuneCoinAssembly.GameData.isRetrigger = false;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin") fortuneCoinAssembly.GameData.isRetrigger = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature" && fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") fortuneCoinAssembly.GameData.isRetrigger = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered;
            haxe.Log.trace("[GameData] [setSpinOutcome] stage " + spinOut.stage, {
                fileName: "GameData.hx",
                lineNumber: 190,
                className: "components.gamecontroller.GameData",
                methodName: "setSpinOutcome",
                customParams: [" nextStage", spinOut.nextStage, " coinsFeatureBaseGame", fortuneCoinAssembly.GameData.coinsFeatureBaseGame, " coinsFeautureFreeSpin", fortuneCoinAssembly.GameData.coinsFeatureFreeSpin]
            });
        };
        fortuneCoinAssembly.GameData.setTensionReels = function(outcome) {
            var _g = [];
            var _g2 = 0;
            var _g1 = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSizePresentation.numberOfCollumns;
            while (_g2 < _g1) {
                var i = _g2++;
                _g.push(0);
            }
            fortuneCoinAssembly.GameData.tensionReels = _g;
            var hasReelTension = false;
            var tensionCounter = 0;
            if (outcome.reelPicture != null) {
                var _g21 = 0;
                var _g11 = outcome.reelPicture.reels.length;
                while (_g21 < _g11) {
                    var i1 = _g21++;
                    if (hasReelTension) fortuneCoinAssembly.GameData.tensionReels[i1] = 1;
                    else fortuneCoinAssembly.GameData.tensionReels[i1] = 0;
                    var _g4 = 0;
                    var _g3 = outcome.reelPicture.reels[i1].length;
                    while (_g4 < _g3) {
                        var j = _g4++;
                        if (outcome.reelPicture.reels[i1][j] == "b01") tensionCounter++;
                    }
                    if (tensionCounter == 2 && i1 < 4) hasReelTension = true;
                }
            }
            if (_hcmn_.HxOverrides.indexOf(fortuneCoinAssembly.GameData.tensionReels, 1, 0) >= 0) fortuneCoinAssembly.GameData.hasTension = true;
            else fortuneCoinAssembly.GameData.hasTension = false;
        };
        fortuneCoinAssembly.GameData.hasTensionOnReel = function(reelId) {
            if (fortuneCoinAssembly.GameData.tensionReels[reelId] == 1) return true;
            else return false;
        };
        fortuneCoinAssembly.GameData.setCoinsFeature = function(coinsFeature, name) {
            if (name == "BaseGame") fortuneCoinAssembly.GameData.coinsFeatureBaseGame = coinsFeature;
            else fortuneCoinAssembly.GameData.coinsFeatureFreeSpin = coinsFeature;
        };
        fortuneCoinAssembly.GameData.setPickerChoices = function(choices) {
            fortuneCoinAssembly.GameData.pickerChoices = choices;
        };
        fortuneCoinAssembly.GameData.updateJackpots = function() {
            if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null && fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome != null && fortuneCoinAssembly.GameData.isPicker) {
                var _g = 0;
                var _g1 = fortuneCoinAssembly.GameData.jackpots;
                while (_g < _g1.length) {
                    var jackpot = _g1[_g];
                    ++_g;
                    var seed = jackpot.seed;
                    var newValue = seed.mulInt(fortuneCoinAssembly.GameData.jackpotMulitplier).mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine));
                    jackpot.value = fortuneCoinAssembly.ExternalService.moneyFormatter.format(newValue.value);
                }
            } else {
                var _g2 = 0;
                var _g11 = fortuneCoinAssembly.GameData.jackpots;
                while (_g2 < _g11.length) {
                    var jackpot1 = _g11[_g2];
                    ++_g2;
                    var seedValue = jackpot1.seed;
                    var value = jackpot1.value;
                    var newValue1 = fortuneCoinAssembly.ExternalService.moneyFormatter.format(seedValue.mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine)).value);
                    jackpot1.value = newValue1;
                }
            }
        };
        fortuneCoinAssembly.GameData.resetJackpots = function() {
            var _g = 0;
            var _g1 = fortuneCoinAssembly.GameData.jackpots;
            while (_g < _g1.length) {
                var jackpot = _g1[_g];
                ++_g;
                var seed = jackpot.seed;
                var newValue = seed.mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine));
                jackpot.value = fortuneCoinAssembly.ExternalService.moneyFormatter.format(newValue.value);
            }
        };
        fortuneCoinAssembly.GameData.getCustomBigWin = function(stakeCredit, winCredit, awardCapExceeded) {
            var denomination = new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination);
            if (stakeCredit == null || stakeCredit == 0 || winCredit == null) return null;
            var winSegments = fortuneCoinAssembly.GameData.getWinSegments(stakeCredit, winCredit, denomination, awardCapExceeded);
            var winGroup = 0;
            if (winSegments != null && winSegments.length > 0) winGroup = winSegments[winSegments.length - 1].winGroup;
            fortuneCoinAssembly.GameData.winGroups = winGroup;
            return new slotParserApi.BigWin(winGroup, winSegments, null);
        };
        fortuneCoinAssembly.GameData.getWinSegments = function(stakeCredit, winCredit, denomination, awardCapExceeded) {
            if (fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(winCredit)) return [new slotParserApi.BigWinSegment(0, winCredit)];
            var segmentWinCredit = winCredit;
            if (awardCapExceeded) segmentWinCredit = fortuneCoinAssembly.GameData.riscControlSettings.awardCap;
            var bigWinGroupPoints = fortuneCoinAssembly.GameData.parseBigWinGroupPoints();
            if (bigWinGroupPoints == null) return [new slotParserApi.BigWinSegment(0, segmentWinCredit)];
            var winCreditInt = parseFloat(winCredit) / parseFloat(fortuneCoinAssembly.GameData.riscControlSettings.denomination);
            var stake = denomination.mulInt(stakeCredit);
            var winMultiplier = winCreditInt / stakeCredit;
            var bigWinSegments = new _hcmn_.haxe_ds_IntMap();
            var i;
            var _g1 = 0;
            var _g = bigWinGroupPoints.length;
            while (_g1 < _g) {
                var i1 = _g1++;
                var point = bigWinGroupPoints[i1];
                if (point[0] > -1 && winMultiplier > point[0]) {
                    if (point[1] == -1 || stakeCredit < point[1]) {
                        var groupWin = stake.mul(new money.Money(_hcmn_.Std.string(point[0])));
                        var key1 = _hcmn_.Std.parseInt(_hcmn_.Std.string(point[2]));
                        bigWinSegments.h[key1] = groupWin.value;
                    }
                    continue;
                }
                if (point[1] > -1 && stakeCredit >= point[1]) continue;
                var key2 = _hcmn_.Std.parseInt(_hcmn_.Std.string(point[2]));
                bigWinSegments.h[key2] = segmentWinCredit;
                break;
            }
            var result = [];
            var key;
            var $it0 = bigWinSegments.keys();
            while ($it0.hasNext()) {
                var key3 = $it0.next();
                result.push(new slotParserApi.BigWinSegment(key3, bigWinSegments.h[key3]));
            }
            return result;
        };
        fortuneCoinAssembly.GameData.parseBigWinGroupPoints = function() {
            var gameConfigJson = fortuneCoinAssembly.Assets.getAsset("game-config_json");
            var bigWinGroupPointsArray = fortuneCoinAssembly.Extender.getFieldAsArray(gameConfigJson, "bigWinGroupPoints");
            if (bigWinGroupPointsArray == null) return null;
            var bigWinGroupPoints = [];
            var _g = 0;
            while (_g < bigWinGroupPointsArray.length) {
                var bigWinGroupPointsItem = bigWinGroupPointsArray[_g];
                ++_g;
                bigWinGroupPoints.push(bigWinGroupPointsItem);
            }
            return bigWinGroupPoints;
        };
        fortuneCoinAssembly.GameData.initializeDisabledPicks = function() {
            fortuneCoinAssembly.GameData.picksDisabled = [
                [false, false, false],
                [false, false, false],
                [false, false, false],
                [false, false, false],
                [false, false, false]
            ];
        };
        fortuneCoinAssembly.GameData.getInstantBigWin = function() {
            var winSegments = [new slotParserApi.BigWinSegment(1, "0")];
            var winGroup = 1;
            return new slotParserApi.BigWin(winGroup, winSegments, null);
        };
        fortuneCoinAssembly.GameData.getSortedCoins = function(state) {
            var coins = [];
            var currentCoin = 0;
            var rp;
            if (state == "BaseGame") rp = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicture.reels;
            else rp = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicture.reels;
            var _g1 = 0;
            var _g = rp.length;
            while (_g1 < _g) {
                var i = _g1++;
                coins[i] = [];
                var _g3 = 0;
                var _g2 = rp[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    coins[i][j] = "_";
                    if (rp[i][j] == "c01") {
                        if (state == "BaseGame") {
                            if (fortuneCoinAssembly.GameData.coinsFeatureBaseGame != null) {
                                if (fortuneCoinAssembly.GameData.coinsFeatureBaseGame.choices != null) {
                                    if (fortuneCoinAssembly.GameData.coinsFeatureBaseGame.choices[currentCoin] != null) coins[i][j] = fortuneCoinAssembly.GameData.coinsFeatureBaseGame.choices[currentCoin];
                                    else coins[i][j] = "_";
                                }
                            }
                        } else if (state == "FreeSpin") {
                            if (fortuneCoinAssembly.GameData.coinsFeatureFreeSpin != null) {
                                if (fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.choices != null) {
                                    if (fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.choices[currentCoin] != null) coins[i][j] = fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.choices[currentCoin];
                                    else coins[i][j] = "_";
                                }
                            }
                        }
                        currentCoin++;
                    }
                }
            }
            haxe.Log.trace("[GameController] [getSortedCoins] coins " + _hcmn_.Std.string(coins), {
                fileName: "GameData.hx",
                lineNumber: 465,
                className: "components.gamecontroller.GameData",
                methodName: "getSortedCoins"
            });
            haxe.Log.trace("[GameController] [getSortedCoins] coinsFeatureBaseGame " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.coinsFeatureBaseGame), {
                fileName: "GameData.hx",
                lineNumber: 466,
                className: "components.gamecontroller.GameData",
                methodName: "getSortedCoins"
            });
            haxe.Log.trace("[GameController] [getSortedCoins] coinsFeatureFreeSpin " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.coinsFeatureFreeSpin), {
                fileName: "GameData.hx",
                lineNumber: 467,
                className: "components.gamecontroller.GameData",
                methodName: "getSortedCoins"
            });
            return coins;
        };
        fortuneCoinAssembly.GameData.isLowWin = function() {
            var isLow = false;
            if (fortuneCoinAssembly.GameData.rgPresentation) {
                if (!fortuneCoinAssembly.GameData.isHighWin) isLow = true;
            }
            return isLow;
        };
        fortuneCoinAssembly.GameData.prototype.__class__ = fortuneCoinAssembly.GameData;
        fortuneCoinAssembly.GameStaticFields = function() {};
        fortuneCoinAssembly.GameStaticFields.__name__ = ["fortuneCoinAssembly", "GameStaticFields"];
        fortuneCoinAssembly.GameStaticFields.prototype.__class__ = fortuneCoinAssembly.GameStaticFields;
        if (typeof components == 'undefined') {
            var components = {};
        };
        if (!components.gamecontroller) {
            components.gamecontroller = {};
        };
        if (!components.gamecontroller.constants) {
            components.gamecontroller.constants = {};
        };
        components.gamecontroller.constants.SoundFlags = {
            __ename__: ["components", "gamecontroller", "constants", "SoundFlags"],
            __constructs__: ["STAGE", "NEXT_STAGE", "MUSIC_STATE", "ACTIVITY", "BET_SIDE", "CURRENT_BPL"]
        };
        components.gamecontroller.constants.SoundFlags.CURRENT_BPL = ["CURRENT_BPL", 5];
        components.gamecontroller.constants.SoundFlags.CURRENT_BPL.toString = $estr;
        components.gamecontroller.constants.SoundFlags.CURRENT_BPL.__enum__ = components.gamecontroller.constants.SoundFlags;
        components.gamecontroller.constants.SoundFlags.STAGE = ["STAGE", 0];
        components.gamecontroller.constants.SoundFlags.STAGE.toString = $estr;
        components.gamecontroller.constants.SoundFlags.STAGE.__enum__ = components.gamecontroller.constants.SoundFlags;
        components.gamecontroller.constants.SoundFlags.ACTIVITY = ["ACTIVITY", 3];
        components.gamecontroller.constants.SoundFlags.ACTIVITY.toString = $estr;
        components.gamecontroller.constants.SoundFlags.ACTIVITY.__enum__ = components.gamecontroller.constants.SoundFlags;
        components.gamecontroller.constants.SoundFlags.BET_SIDE = ["BET_SIDE", 4];
        components.gamecontroller.constants.SoundFlags.BET_SIDE.toString = $estr;
        components.gamecontroller.constants.SoundFlags.BET_SIDE.__enum__ = components.gamecontroller.constants.SoundFlags;
        components.gamecontroller.constants.SoundFlags.MUSIC_STATE = ["MUSIC_STATE", 2];
        components.gamecontroller.constants.SoundFlags.MUSIC_STATE.toString = $estr;
        components.gamecontroller.constants.SoundFlags.MUSIC_STATE.__enum__ = components.gamecontroller.constants.SoundFlags;
        components.gamecontroller.constants.SoundFlags.NEXT_STAGE = ["NEXT_STAGE", 1];
        components.gamecontroller.constants.SoundFlags.NEXT_STAGE.toString = $estr;
        components.gamecontroller.constants.SoundFlags.NEXT_STAGE.__enum__ = components.gamecontroller.constants.SoundFlags;
        fortuneCoinAssembly.SoundConstants = {
            __ename__: ["fortuneCoinAssembly", "SoundConstants"],
            __constructs__: ["spin_button", "click", "reelstop01", "reelstop02", "reelstop03", "reelstop04", "reelstop05", "sound_on", "autoplay_on", "bet_down", "bet_up", "bet_up_support", "bet_down_support", "bet_max", "paytable_close", "paytable_open", "anticipation", "anticipation_off", "anticipation_stop", "smart_sound01", "smart_sound02", "smart_sound03", "smart_sound04", "smart_sound05", "basegame_music", "basegame_music_fade_out", "basegame_music_stop", "basegame_rollup", "basegame_rollup_picker", "basegame_rollup_picker_stop", "basegame_rollup_picker_off", "basegame_rollup_stop", "basegame_rollup_off", "basegame_rollup_off_0", "basegame_rollup_off_coin", "freegame_music", "freegame_music_fade_out", "freegame_music_stop", "freegame_music_rollup", "freegame_rollup", "freegame_rollup_stop", "freegame_rollup_off", "freegame_rollup_off_0", "pick", "pick_stop", "pre_picker_bonus_music", "pre_picker_bonus_music_stop", "picker_bonus_music", "picker_bonus_music_stop", "coin_smart01", "coin_smart02", "coin_smart03", "coin_smart04", "coin_smart05", "celebration_rollup", "celebration_rollup_stop", "celebration_rollup_off", "mini_tracer_level01", "mini_tracer_level02", "mini_tracer_win", "minor_tracer_level01", "minor_tracer_level02", "minor_tracer_win", "maxi_tracer_level01", "maxi_tracer_level02", "maxi_tracer_win", "grand_tracer_level01", "grand_tracer_level02", "grand_tracer_win", "celebration_bell", "award_all", "bonus_transition_in_out", "boost", "special_coins", "FC_progressives_increased", "FC_super_anticipation", "minors_removed", "coin_reveal_low", "coin_reveal_mid", "coin_reveal_high", "coin_turn01", "coin_turn02", "coin_turn03", "coin_turn04", "coin_turn05", "coin_fly_up01", "coin_fly_up02", "coin_fly_up03", "coin_fly_up04", "coin_fly_up05", "coin_hit01", "coin_hit02", "coin_hit03", "coin_hit04", "coin_hit05", "tracer"]
        };
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop = ["pre_picker_bonus_music_stop", 46];
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.celebration_rollup = ["celebration_rollup", 54];
        fortuneCoinAssembly.SoundConstants.celebration_rollup.toString = $estr;
        fortuneCoinAssembly.SoundConstants.celebration_rollup.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.minor_tracer_level02 = ["minor_tracer_level02", 61];
        fortuneCoinAssembly.SoundConstants.minor_tracer_level02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.minor_tracer_level02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.reelstop02 = ["reelstop02", 3];
        fortuneCoinAssembly.SoundConstants.reelstop02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.reelstop02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_fly_up05 = ["coin_fly_up05", 89];
        fortuneCoinAssembly.SoundConstants.coin_fly_up05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_fly_up05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.click = ["click", 1];
        fortuneCoinAssembly.SoundConstants.click.toString = $estr;
        fortuneCoinAssembly.SoundConstants.click.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_fly_up02 = ["coin_fly_up02", 86];
        fortuneCoinAssembly.SoundConstants.coin_fly_up02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_fly_up02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_music_fade_out = ["freegame_music_fade_out", 36];
        fortuneCoinAssembly.SoundConstants.freegame_music_fade_out.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_music_fade_out.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin = ["basegame_rollup_off_coin", 34];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_win = ["maxi_tracer_win", 65];
        fortuneCoinAssembly.SoundConstants.maxi_tracer_win.toString = $estr;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_win.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_hit05 = ["coin_hit05", 94];
        fortuneCoinAssembly.SoundConstants.coin_hit05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_hit05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.smart_sound03 = ["smart_sound03", 21];
        fortuneCoinAssembly.SoundConstants.smart_sound03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.smart_sound03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_music = ["freegame_music", 35];
        fortuneCoinAssembly.SoundConstants.freegame_music.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_music.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.minor_tracer_win = ["minor_tracer_win", 62];
        fortuneCoinAssembly.SoundConstants.minor_tracer_win.toString = $estr;
        fortuneCoinAssembly.SoundConstants.minor_tracer_win.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.paytable_open = ["paytable_open", 15];
        fortuneCoinAssembly.SoundConstants.paytable_open.toString = $estr;
        fortuneCoinAssembly.SoundConstants.paytable_open.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bet_up = ["bet_up", 10];
        fortuneCoinAssembly.SoundConstants.bet_up.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bet_up.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.smart_sound02 = ["smart_sound02", 20];
        fortuneCoinAssembly.SoundConstants.smart_sound02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.smart_sound02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.FC_progressives_increased = ["FC_progressives_increased", 74];
        fortuneCoinAssembly.SoundConstants.FC_progressives_increased.toString = $estr;
        fortuneCoinAssembly.SoundConstants.FC_progressives_increased.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.reelstop03 = ["reelstop03", 4];
        fortuneCoinAssembly.SoundConstants.reelstop03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.reelstop03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.paytable_close = ["paytable_close", 14];
        fortuneCoinAssembly.SoundConstants.paytable_close.toString = $estr;
        fortuneCoinAssembly.SoundConstants.paytable_close.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop = ["basegame_rollup_picker_stop", 29];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bet_max = ["bet_max", 13];
        fortuneCoinAssembly.SoundConstants.bet_max.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bet_max.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_fly_up03 = ["coin_fly_up03", 87];
        fortuneCoinAssembly.SoundConstants.coin_fly_up03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_fly_up03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.special_coins = ["special_coins", 73];
        fortuneCoinAssembly.SoundConstants.special_coins.toString = $estr;
        fortuneCoinAssembly.SoundConstants.special_coins.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0 = ["basegame_rollup_off_0", 33];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.boost = ["boost", 72];
        fortuneCoinAssembly.SoundConstants.boost.toString = $estr;
        fortuneCoinAssembly.SoundConstants.boost.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_fly_up04 = ["coin_fly_up04", 88];
        fortuneCoinAssembly.SoundConstants.coin_fly_up04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_fly_up04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_turn03 = ["coin_turn03", 82];
        fortuneCoinAssembly.SoundConstants.coin_turn03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_turn03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_rollup = ["freegame_rollup", 39];
        fortuneCoinAssembly.SoundConstants.freegame_rollup.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_rollup.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off = ["freegame_rollup_off", 41];
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.grand_tracer_win = ["grand_tracer_win", 68];
        fortuneCoinAssembly.SoundConstants.grand_tracer_win.toString = $estr;
        fortuneCoinAssembly.SoundConstants.grand_tracer_win.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_turn01 = ["coin_turn01", 80];
        fortuneCoinAssembly.SoundConstants.coin_turn01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_turn01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_stop = ["freegame_rollup_stop", 40];
        fortuneCoinAssembly.SoundConstants.freegame_rollup_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_music_stop = ["freegame_music_stop", 37];
        fortuneCoinAssembly.SoundConstants.freegame_music_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_music_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music = ["pre_picker_bonus_music", 45];
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music.toString = $estr;
        fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.anticipation_stop = ["anticipation_stop", 18];
        fortuneCoinAssembly.SoundConstants.anticipation_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.anticipation_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off = ["basegame_rollup_off", 32];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_off.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.celebration_rollup_stop = ["celebration_rollup_stop", 55];
        fortuneCoinAssembly.SoundConstants.celebration_rollup_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.celebration_rollup_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.pick_stop = ["pick_stop", 44];
        fortuneCoinAssembly.SoundConstants.pick_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.pick_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_hit02 = ["coin_hit02", 91];
        fortuneCoinAssembly.SoundConstants.coin_hit02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_hit02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_fly_up01 = ["coin_fly_up01", 85];
        fortuneCoinAssembly.SoundConstants.coin_fly_up01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_fly_up01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.spin_button = ["spin_button", 0];
        fortuneCoinAssembly.SoundConstants.spin_button.toString = $estr;
        fortuneCoinAssembly.SoundConstants.spin_button.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_smart02 = ["coin_smart02", 50];
        fortuneCoinAssembly.SoundConstants.coin_smart02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_smart02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.pick = ["pick", 43];
        fortuneCoinAssembly.SoundConstants.pick.toString = $estr;
        fortuneCoinAssembly.SoundConstants.pick.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.smart_sound05 = ["smart_sound05", 23];
        fortuneCoinAssembly.SoundConstants.smart_sound05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.smart_sound05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.anticipation = ["anticipation", 16];
        fortuneCoinAssembly.SoundConstants.anticipation.toString = $estr;
        fortuneCoinAssembly.SoundConstants.anticipation.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.grand_tracer_level01 = ["grand_tracer_level01", 66];
        fortuneCoinAssembly.SoundConstants.grand_tracer_level01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.grand_tracer_level01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.tracer = ["tracer", 95];
        fortuneCoinAssembly.SoundConstants.tracer.toString = $estr;
        fortuneCoinAssembly.SoundConstants.tracer.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.autoplay_on = ["autoplay_on", 8];
        fortuneCoinAssembly.SoundConstants.autoplay_on.toString = $estr;
        fortuneCoinAssembly.SoundConstants.autoplay_on.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_reveal_high = ["coin_reveal_high", 79];
        fortuneCoinAssembly.SoundConstants.coin_reveal_high.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_reveal_high.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_reveal_low = ["coin_reveal_low", 77];
        fortuneCoinAssembly.SoundConstants.coin_reveal_low.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_reveal_low.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_stop = ["basegame_rollup_stop", 31];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.celebration_bell = ["celebration_bell", 69];
        fortuneCoinAssembly.SoundConstants.celebration_bell.toString = $estr;
        fortuneCoinAssembly.SoundConstants.celebration_bell.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.reelstop01 = ["reelstop01", 2];
        fortuneCoinAssembly.SoundConstants.reelstop01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.reelstop01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.mini_tracer_level01 = ["mini_tracer_level01", 57];
        fortuneCoinAssembly.SoundConstants.mini_tracer_level01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.mini_tracer_level01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.minor_tracer_level01 = ["minor_tracer_level01", 60];
        fortuneCoinAssembly.SoundConstants.minor_tracer_level01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.minor_tracer_level01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bet_down = ["bet_down", 9];
        fortuneCoinAssembly.SoundConstants.bet_down.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bet_down.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.mini_tracer_level02 = ["mini_tracer_level02", 58];
        fortuneCoinAssembly.SoundConstants.mini_tracer_level02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.mini_tracer_level02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_smart05 = ["coin_smart05", 53];
        fortuneCoinAssembly.SoundConstants.coin_smart05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_smart05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0 = ["freegame_rollup_off_0", 42];
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.mini_tracer_win = ["mini_tracer_win", 59];
        fortuneCoinAssembly.SoundConstants.mini_tracer_win.toString = $estr;
        fortuneCoinAssembly.SoundConstants.mini_tracer_win.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_reveal_mid = ["coin_reveal_mid", 78];
        fortuneCoinAssembly.SoundConstants.coin_reveal_mid.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_reveal_mid.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off = ["basegame_rollup_picker_off", 30];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_hit03 = ["coin_hit03", 92];
        fortuneCoinAssembly.SoundConstants.coin_hit03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_hit03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_hit04 = ["coin_hit04", 93];
        fortuneCoinAssembly.SoundConstants.coin_hit04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_hit04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.reelstop04 = ["reelstop04", 5];
        fortuneCoinAssembly.SoundConstants.reelstop04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.reelstop04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker = ["basegame_rollup_picker", 28];
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup_picker.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.grand_tracer_level02 = ["grand_tracer_level02", 67];
        fortuneCoinAssembly.SoundConstants.grand_tracer_level02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.grand_tracer_level02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.award_all = ["award_all", 70];
        fortuneCoinAssembly.SoundConstants.award_all.toString = $estr;
        fortuneCoinAssembly.SoundConstants.award_all.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_rollup = ["basegame_rollup", 27];
        fortuneCoinAssembly.SoundConstants.basegame_rollup.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_rollup.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_smart03 = ["coin_smart03", 51];
        fortuneCoinAssembly.SoundConstants.coin_smart03.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_smart03.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_turn04 = ["coin_turn04", 83];
        fortuneCoinAssembly.SoundConstants.coin_turn04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_turn04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.freegame_music_rollup = ["freegame_music_rollup", 38];
        fortuneCoinAssembly.SoundConstants.freegame_music_rollup.toString = $estr;
        fortuneCoinAssembly.SoundConstants.freegame_music_rollup.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level01 = ["maxi_tracer_level01", 63];
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.FC_super_anticipation = ["FC_super_anticipation", 75];
        fortuneCoinAssembly.SoundConstants.FC_super_anticipation.toString = $estr;
        fortuneCoinAssembly.SoundConstants.FC_super_anticipation.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level02 = ["maxi_tracer_level02", 64];
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.maxi_tracer_level02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_music_stop = ["basegame_music_stop", 26];
        fortuneCoinAssembly.SoundConstants.basegame_music_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_music_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.sound_on = ["sound_on", 7];
        fortuneCoinAssembly.SoundConstants.sound_on.toString = $estr;
        fortuneCoinAssembly.SoundConstants.sound_on.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_music = ["basegame_music", 24];
        fortuneCoinAssembly.SoundConstants.basegame_music.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_music.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.smart_sound01 = ["smart_sound01", 19];
        fortuneCoinAssembly.SoundConstants.smart_sound01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.smart_sound01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.smart_sound04 = ["smart_sound04", 22];
        fortuneCoinAssembly.SoundConstants.smart_sound04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.smart_sound04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_hit01 = ["coin_hit01", 90];
        fortuneCoinAssembly.SoundConstants.coin_hit01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_hit01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_turn05 = ["coin_turn05", 84];
        fortuneCoinAssembly.SoundConstants.coin_turn05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_turn05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.basegame_music_fade_out = ["basegame_music_fade_out", 25];
        fortuneCoinAssembly.SoundConstants.basegame_music_fade_out.toString = $estr;
        fortuneCoinAssembly.SoundConstants.basegame_music_fade_out.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bet_down_support = ["bet_down_support", 12];
        fortuneCoinAssembly.SoundConstants.bet_down_support.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bet_down_support.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.celebration_rollup_off = ["celebration_rollup_off", 56];
        fortuneCoinAssembly.SoundConstants.celebration_rollup_off.toString = $estr;
        fortuneCoinAssembly.SoundConstants.celebration_rollup_off.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.anticipation_off = ["anticipation_off", 17];
        fortuneCoinAssembly.SoundConstants.anticipation_off.toString = $estr;
        fortuneCoinAssembly.SoundConstants.anticipation_off.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_smart01 = ["coin_smart01", 49];
        fortuneCoinAssembly.SoundConstants.coin_smart01.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_smart01.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_smart04 = ["coin_smart04", 52];
        fortuneCoinAssembly.SoundConstants.coin_smart04.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_smart04.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.coin_turn02 = ["coin_turn02", 81];
        fortuneCoinAssembly.SoundConstants.coin_turn02.toString = $estr;
        fortuneCoinAssembly.SoundConstants.coin_turn02.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bonus_transition_in_out = ["bonus_transition_in_out", 71];
        fortuneCoinAssembly.SoundConstants.bonus_transition_in_out.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bonus_transition_in_out.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.picker_bonus_music = ["picker_bonus_music", 47];
        fortuneCoinAssembly.SoundConstants.picker_bonus_music.toString = $estr;
        fortuneCoinAssembly.SoundConstants.picker_bonus_music.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.bet_up_support = ["bet_up_support", 11];
        fortuneCoinAssembly.SoundConstants.bet_up_support.toString = $estr;
        fortuneCoinAssembly.SoundConstants.bet_up_support.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.picker_bonus_music_stop = ["picker_bonus_music_stop", 48];
        fortuneCoinAssembly.SoundConstants.picker_bonus_music_stop.toString = $estr;
        fortuneCoinAssembly.SoundConstants.picker_bonus_music_stop.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.minors_removed = ["minors_removed", 76];
        fortuneCoinAssembly.SoundConstants.minors_removed.toString = $estr;
        fortuneCoinAssembly.SoundConstants.minors_removed.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.SoundConstants.reelstop05 = ["reelstop05", 6];
        fortuneCoinAssembly.SoundConstants.reelstop05.toString = $estr;
        fortuneCoinAssembly.SoundConstants.reelstop05.__enum__ = fortuneCoinAssembly.SoundConstants;
        fortuneCoinAssembly.TransitionConstants = {
            __ename__: ["fortuneCoinAssembly", "TransitionConstants"],
            __constructs__: ["SHOW_JPA_INTRO", "HIDE_JPA_INTRO", "INIT_JPA_OUTRO", "HIDE_JPA_OUTRO", "SHOW_JPA_OUTRO", "INIT_FS_INTRO", "SHOW_FS_INTRO", "HIDE_FS_INTRO", "INIT_FS_INTRO_NEXT", "SHOW_FS_INTRO_NEXT", "INIT_FS_OUTRO", "SHOW_FS_OUTRO", "REELS_SHAKE"]
        };
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO_NEXT = ["INIT_FS_INTRO_NEXT", 8];
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO_NEXT.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO_NEXT.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO = ["INIT_FS_OUTRO", 10];
        fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO = ["SHOW_FS_INTRO", 6];
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO = ["INIT_FS_INTRO", 5];
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_OUTRO = ["HIDE_JPA_OUTRO", 3];
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_OUTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_OUTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO_NEXT = ["SHOW_FS_INTRO_NEXT", 9];
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO_NEXT.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO_NEXT.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO = ["HIDE_FS_INTRO", 7];
        fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO = ["HIDE_JPA_INTRO", 1];
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.REELS_SHAKE = ["REELS_SHAKE", 12];
        fortuneCoinAssembly.TransitionConstants.REELS_SHAKE.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.REELS_SHAKE.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_OUTRO = ["SHOW_FS_OUTRO", 11];
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_OUTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.SHOW_FS_OUTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_INTRO = ["SHOW_JPA_INTRO", 0];
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_INTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_INTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.INIT_JPA_OUTRO = ["INIT_JPA_OUTRO", 2];
        fortuneCoinAssembly.TransitionConstants.INIT_JPA_OUTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.INIT_JPA_OUTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_OUTRO = ["SHOW_JPA_OUTRO", 4];
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_OUTRO.toString = $estr;
        fortuneCoinAssembly.TransitionConstants.SHOW_JPA_OUTRO.__enum__ = fortuneCoinAssembly.TransitionConstants;
        fortuneCoinAssembly.WinEnum = {
            __ename__: ["fortuneCoinAssembly", "WinEnum"],
            __constructs__: ["LOW", "MEDIUM", "BIG"]
        };
        fortuneCoinAssembly.WinEnum.MEDIUM = ["MEDIUM", 1];
        fortuneCoinAssembly.WinEnum.MEDIUM.toString = $estr;
        fortuneCoinAssembly.WinEnum.MEDIUM.__enum__ = fortuneCoinAssembly.WinEnum;
        fortuneCoinAssembly.WinEnum.BIG = ["BIG", 2];
        fortuneCoinAssembly.WinEnum.BIG.toString = $estr;
        fortuneCoinAssembly.WinEnum.BIG.__enum__ = fortuneCoinAssembly.WinEnum;
        fortuneCoinAssembly.WinEnum.LOW = ["LOW", 0];
        fortuneCoinAssembly.WinEnum.LOW.toString = $estr;
        fortuneCoinAssembly.WinEnum.LOW.__enum__ = fortuneCoinAssembly.WinEnum;
        fortuneCoinAssembly.AutoPlayController = function(gameController) {
            this.autoPlayStopRequested = false;
            this.gameController = gameController;
        };
        fortuneCoinAssembly.AutoPlayController.__name__ = ["fortuneCoinAssembly", "AutoPlayController"];
        fortuneCoinAssembly.AutoPlayController.prototype.gameController = null;
        fortuneCoinAssembly.AutoPlayController.prototype.autoPlayStopRequested = null;
        fortuneCoinAssembly.AutoPlayController.prototype.autoPlayStart = function() {
            var _g = this;
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.gameController.betPanelController.setAutoPlayState();
            this.gameController.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.click);
            this.autoPlayStopRequested = false;
            fortuneCoinAssembly.ExternalService.gameProtocol.getAutoSpinOption().then(function(evt) {
                if (evt.action == "play") {
                    _g.setAutoSpinData(true, 1, evt.steps);
                    fortuneCoinAssembly.ExternalService.gameProtocol.sendAutoSpinStart();
                    fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    _g.gameController.betPanelController.setAutoPlayState();
                    _g.gameController.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
                    _g.gameController.betPanelPort.setAutoPlayButtonState().publish(betPanelApi.SetAutoPlayButtonState.STOP_BUTTON_STATE);
                    _g.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.autoplay_on);
                } else {
                    fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
                    _g.gameController.betPanelController.setIdleState();
                }
                _g.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.click);
            });
        };
        fortuneCoinAssembly.AutoPlayController.prototype.requestAutoPlayStop = function() {
            this.autoPlayStopRequested = true;
        };
        fortuneCoinAssembly.AutoPlayController.prototype.autoPlayStop = function() {
            haxe.Log.trace("[AutoPlayController] autoPlayStop", {
                fileName: "AutoPlayController.hx",
                lineNumber: 60,
                className: "components.gamecontroller.controllers.AutoPlayController",
                methodName: "autoPlayStop"
            });
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.click);
            fortuneCoinAssembly.ExternalService.gameProtocol.sendAutoSpinStopped("BonusStop");
            this.setAutoSpinData(false, 0, 0);
            this.checkGameStateAndShowControls();
            if (fortuneCoinAssembly.GameData.autoPlayWinTimer != null) {
                fortuneCoinAssembly.GameData.autoPlayWinTimer.stop();
                fortuneCoinAssembly.GameData.autoPlayWinTimer = null;
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            }
            this.autoPlayStopRequested = false;
        };
        fortuneCoinAssembly.AutoPlayController.prototype.checkGameStateAndShowControls = function() {
            this.gameController.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            this.gameController.betPanelPort.hideButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            this.gameController.betPanelPort.showButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            this.gameController.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            this.gameController.betPanelPort.setAutoPlayButtonState().publish(betPanelApi.SetAutoPlayButtonState.PLAY_BUTTON_STATE);
            haxe.Log.trace("checkGameStateAndShowControls " + this.gameController.betPanelController.lastState, {
                fileName: "AutoPlayController.hx",
                lineNumber: 87,
                className: "components.gamecontroller.controllers.AutoPlayController",
                methodName: "checkGameStateAndShowControls"
            });
            var _g = this.gameController.betPanelController.lastState;
            switch (_g) {
                case "setAutoPlayIdleState":
                    if (!fortuneCoinAssembly.GameData.spinStarted) this.gameController.betPanelController.setIdleState();
                    else this.gameController.betPanelController.setSpinState();
                    break;
                case "setIdleState":
                    this.gameController.betPanelController.setIdleState();
                    break;
                case "setSpinState":
                case "setAutoPlayState":
                    this.gameController.betPanelController.setSpinState();
                    break;
                case "setSkipState":
                    this.gameController.betPanelController.setSkipState();
                    break;
                case "setFSSpinState":
                    this.gameController.betPanelController.setFSSpinState();
                    break;
                case "setFSIdleState":
                    this.gameController.betPanelController.setFSIdleState();
                    break;
                default:
                    return;
            }
        };
        fortuneCoinAssembly.AutoPlayController.prototype.setAutoSpinData = function(autoSpinStarted, autoSpinSteps, totalAutoSpins) {
            if (totalAutoSpins == null) totalAutoSpins = -1;
            fortuneCoinAssembly.GameData.autoSpinStarted = autoSpinStarted;
            fortuneCoinAssembly.GameData.autoSpinSteps = autoSpinSteps;
            if (totalAutoSpins != -1) fortuneCoinAssembly.GameData.totalAutoSpins = totalAutoSpins;
        };
        fortuneCoinAssembly.AutoPlayController.prototype.increaseAutoSpinSteps = function(step) {
            fortuneCoinAssembly.GameData.autoSpinSteps = step + 1;
            return fortuneCoinAssembly.GameData.autoSpinSteps;
        };
        fortuneCoinAssembly.AutoPlayController.prototype.__class__ = fortuneCoinAssembly.AutoPlayController;
        fortuneCoinAssembly.BaseGameController = function(gc) {
            if (fortuneCoinAssembly.BaseGameController.instance != null) throw new Error("BaseGameController instance already created!");
            this.gameController = gc;
            fortuneCoinAssembly.BaseGameController.instance = this;
        };
        fortuneCoinAssembly.BaseGameController.__name__ = ["fortuneCoinAssembly", "BaseGameController"];
        fortuneCoinAssembly.BaseGameController.prototype.gameController = null;
        fortuneCoinAssembly.BaseGameController.prototype.stage = null;
        fortuneCoinAssembly.BaseGameController.prototype.handleResolveBaseGame = function() {};
        fortuneCoinAssembly.BaseGameController.prototype.nextState = function(payload) {
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.BaseGameController.prototype.detectCoinFeatureStage = function(info) {
            if (info.choices.length != 0) fortuneCoinAssembly.GameData.coinsFeatureResume = "BaseGame";
            else fortuneCoinAssembly.GameData.coinsFeatureResume = "FreeSpin";
        };
        fortuneCoinAssembly.BaseGameController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.BaseGameController.instance = null;
        fortuneCoinAssembly.BaseGameController.getInstance = function() {
            if (fortuneCoinAssembly.BaseGameController.instance == null) throw new Error("BaseGameController singleton instance not created!");
            return fortuneCoinAssembly.BaseGameController.instance;
        };
        fortuneCoinAssembly.BaseGameController.prototype.__class__ = fortuneCoinAssembly.BaseGameController;
        fortuneCoinAssembly.BetPanelController = function(betPanelPort, gameController) {
            this.betPanelPort = betPanelPort;
            this.gameController = gameController;
        };
        fortuneCoinAssembly.BetPanelController.__name__ = ["fortuneCoinAssembly", "BetPanelController"];
        fortuneCoinAssembly.BetPanelController.prototype.gameController = null;
        fortuneCoinAssembly.BetPanelController.prototype.betPanelPort = null;
        fortuneCoinAssembly.BetPanelController.prototype.lastState = null;
        fortuneCoinAssembly.BetPanelController.prototype.setIdleState = function() {
            this.lastState = "setIdleState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setIdleState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 42,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setIdleState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            if (!fortuneCoinAssembly.GameData.autoSpinStarted) {
                this.betPanelPort.enableButton().publish(betPanelApi.EButton.TOTAL_BET);
                this.betPanelPort.enableButton().publish(betPanelApi.EButton.PAYTABLE);
            }
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            this.betPanelPort.showButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            this.betPanelPort.setAutoPlayButtonState().publish(betPanelApi.SetAutoPlayButtonState.PLAY_BUTTON_STATE);
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("SPIN_INFO_LABEL_0")], ["SPIN_INFO_LABEL_0"]);
            }
        };
        fortuneCoinAssembly.BetPanelController.prototype.setFSIdleState = function() {
            this.lastState = "setFSIdleState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setFSIdleState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 78,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setFSIdleState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setSpinState = function() {
            this.lastState = "setSpinState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setSpinState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 94,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setSpinState"
            });
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            if (fortuneCoinAssembly.GameData.autoSpinStarted) this.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            if (!fortuneCoinAssembly.GameData.isFreeSpin) {
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
            }
        };
        fortuneCoinAssembly.BetPanelController.prototype.setFSSpinState = function() {
            this.lastState = "setFSSpinState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setSkipState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 121,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setFSSpinState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setSkipState = function() {
            this.lastState = "setSkipState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setSkipState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 139,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setSkipState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            if (fortuneCoinAssembly.GameData.autoSpinStarted) this.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_STOP);
            else this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setResumeState = function() {
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setResumeState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 163,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setResumeState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setFSAbortSpinState = function() {
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setSkipState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 178,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setFSAbortSpinState"
            });
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setAutoPlayState = function() {
            this.lastState = "setAutoPlayState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setPaytableOpenState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 196,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setAutoPlayState"
            });
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setAutoPlayIdleState = function() {
            this.lastState = "setAutoPlayIdleState";
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setPaytableOpenState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 207,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setAutoPlayIdleState"
            });
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.hideButton().publish(betPanelApi.EButton.SKIP);
            this.betPanelPort.showButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
        };
        fortuneCoinAssembly.BetPanelController.prototype.setPaytableOpenState = function() {
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [setPaytableOpenState]", {
                fileName: "BetPanelController.hx",
                lineNumber: 239,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "setPaytableOpenState"
            });
            this.betPanelPort.enableButton().publish(betPanelApi.EButton.PAYTABLE);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
        };
        fortuneCoinAssembly.BetPanelController.prototype.changeStake = function(stake) {
            haxe.Log.trace("[GameController] [betPanelController] [state] [betPanel] [changeStake]", {
                fileName: "BetPanelController.hx",
                lineNumber: 248,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "changeStake"
            });
            var betPanelStake = new betPanelApi.BetPanelStakeItems(stake.numberOfLines, stake.betPerLine, stake.totalBet, fortuneCoinAssembly.GameData.riscControlSettings.totalBetsForSelectedBetPerLine, fortuneCoinAssembly.GameData.riscControlSettings.totalBetsForSelectedLines);
            this.betPanelPort.setStake().publish(betPanelStake);
            this.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
            this.gameController.hideCoins();
            this.gameController.winCycleController.resetWinCycle();
            this.gameController.winCycleController.resetScatters();
            this.gameController.winMeterController.clear();
            if (fortuneCoinAssembly.GameData.stripLayersSectionMappings != null) {
                this.gameController.setStripLayerIds();
                this.gameController.setSchemaSet();
                if (fortuneCoinAssembly.GameData.schemaSet != null) this.gameController.dynamicSymbolReplacement();
            }
        };
        fortuneCoinAssembly.BetPanelController.prototype.stakeItemIncreaseDecrease = function(stake) {
            haxe.Log.trace("[GameController] [betPanelController] [stakeItemIncreaseDecrease] GameController.onBetPanelStakeChanged button: " + _hcmn_.Std.string(stake), {
                fileName: "BetPanelController.hx",
                lineNumber: 276,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "stakeItemIncreaseDecrease"
            });
            this.gameController.stakeItemController.setNumberOfLines(stake.lineCount);
            this.gameController.stakeItemController.setBetPerLine(stake.betPerLine);
            fortuneCoinAssembly.GameData.currentBetPerLineFloat = parseFloat(stake.betPerLine);
            this.onBetPanelStakeSoundChanged();
            fortuneCoinAssembly.GameData.previousBetPerLineFloat = fortuneCoinAssembly.GameData.currentBetPerLineFloat;
        };
        fortuneCoinAssembly.BetPanelController.prototype.onBetPanelStakeSoundChanged = function() {
            var betPerLineArray = fortuneCoinAssembly.GameData.riscControlSettings.betPerLineArray;
            var maxBetPerLine = parseFloat(betPerLineArray[betPerLineArray.length - 1]);
            if (fortuneCoinAssembly.GameData.side == "left") fortuneCoinAssembly.GameData.side = "right";
            else fortuneCoinAssembly.GameData.side = "left";
            if (fortuneCoinAssembly.GameData.currentBetPerLineFloat == maxBetPerLine) {
                this.gameController.soundController.playSound("bet_max");
                return;
            }
            if (fortuneCoinAssembly.GameData.currentBetPerLineFloat > fortuneCoinAssembly.GameData.previousBetPerLineFloat) {
                if (fortuneCoinAssembly.GameData.side == "left") {
                    this.gameController.soundController.stopSound("bet_up_support");
                    this.gameController.soundController.playSound("bet_up");
                } else {
                    this.gameController.soundController.stopSound("bet_up");
                    this.gameController.soundController.playSound("bet_up_support");
                }
            } else if (fortuneCoinAssembly.GameData.currentBetPerLineFloat < fortuneCoinAssembly.GameData.previousBetPerLineFloat) {
                if (fortuneCoinAssembly.GameData.side == "left") {
                    this.gameController.soundController.stopSound("bet_down_support");
                    this.gameController.soundController.playSound("bet_down");
                } else {
                    this.gameController.soundController.stopSound("bet_down");
                    this.gameController.soundController.playSound("bet_down_support");
                }
            } else this.gameController.soundController.playSound("click");
        };
        fortuneCoinAssembly.BetPanelController.prototype.totalBetButtonPressed = function() {
            if (!fortuneCoinAssembly.GameData.betVisible) {
                fortuneCoinAssembly.GameData.betVisible = true;
                this.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.MULTIWAY);
                this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
                this.betPanelPort.disableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            } else {
                fortuneCoinAssembly.GameData.betVisible = false;
                this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.MULTIWAY, [this.gameController.getString("MULTIWAY_TXT")], ["MULTIWAY_TXT"]);
                if (fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
                else this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("SPIN_INFO_LABEL_0")], ["SPIN_INFO_LABEL_0"]);
                this.betPanelPort.enableButton().publish(betPanelApi.EButton.AUTO_PLAY_BUTTON_PLAY);
            }
        };
        fortuneCoinAssembly.BetPanelController.prototype.spinButtonPressed = function() {
            fortuneCoinAssembly.GameData.spinPressed = true;
            if (!fortuneCoinAssembly.GameData.autoSpinStarted) this.setSpinState();
            else {
                if (fortuneCoinAssembly.GameData.autoPlayWinTimer != null) {
                    fortuneCoinAssembly.GameData.autoPlayWinTimer.stop();
                    fortuneCoinAssembly.GameData.autoPlayWinTimer = null;
                }
                this.betPanelPort.disableButton().publish(betPanelApi.EButton.SPIN);
            }
            if (fortuneCoinAssembly.GameData.isRetrigger) {
                fortuneCoinAssembly.GameData.countUpFinished = false;
                if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) this.gameController.showRetriggerScreen();
                else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.BetPanelController.prototype.skipButtonPressed = function() {
            haxe.Log.trace("[GameController] [handleSkip] [handleSkip] : ", {
                fileName: "BetPanelController.hx",
                lineNumber: 425,
                className: "components.gamecontroller.controllers.BetPanelController",
                methodName: "skipButtonPressed",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.stage, fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState, fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded]
            });
            fortuneCoinAssembly.GameData.skipPressed = true;
            this.betPanelPort.disableButton().publish(betPanelApi.EButton.SKIP);
            if (fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) this.gameController.hideAwardCapPopup();
            else if (fortuneCoinAssembly.GameData.lastSpin) {
                this.setSpinState();
                this.gameController.winCycleController.resetWinCycle();
                this.gameController.winCycleController.resetScatters();
                this.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
                if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") this.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO);
                else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            } else {
                fortuneCoinAssembly.GameData.isWinMeterActive = false;
                this.gameController.winMeterController.clear();
                this.gameController.winMeterController.stop();
                this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN, "bigWin");
                if ((function($this) {
                        var $r;
                        var a = fortuneCoinAssembly.WinMeterController.winMapping(fortuneCoinAssembly.GameData.winGroups);
                        $r = _hcmn_.Type.enumEq(a, fortuneCoinAssembly.WinEnum.BIG);
                        return $r;
                    }(this))) {
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_rollup_stop);
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_rollup_off);
                } else {
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_stop);
                    if (fortuneCoinAssembly.GameData.rgPresentation) {
                        if (fortuneCoinAssembly.GameData.isHighWin) {
                            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off);
                            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_off);
                        } else {
                            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0);
                            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0);
                        }
                    } else {
                        this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off);
                        this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_off);
                    }
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop);
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off);
                    this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_stop);
                }
                if (!fortuneCoinAssembly.GameData.countUpFinished) {
                    fortuneCoinAssembly.GameData.countUpFinished = true;
                    fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                }
                this.gameController.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.basegame_music, 0.5);
                this.gameController.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.freegame_music, 0.5);
                if (fortuneCoinAssembly.GameData.hasShake) {
                    this.gameController.layerController.getReset(fortuneCoinAssembly.TransitionConstants.REELS_SHAKE);
                    fortuneCoinAssembly.GameData.hasShake = false;
                }
                this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_0");
                this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_1");
                this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_BIG_WIN_SPARKLE, "big_win_sparks_2");
            }
        };
        fortuneCoinAssembly.BetPanelController.prototype.__class__ = fortuneCoinAssembly.BetPanelController;
        fortuneCoinAssembly.CecServiceController = function(gameController) {
            haxe.Log.trace("CecServiceController", {
                fileName: "CecServiceController.hx",
                lineNumber: 12,
                className: "components.gamecontroller.controllers.CecServiceController",
                methodName: "new"
            });
            this.gameController = gameController;
        };
        fortuneCoinAssembly.CecServiceController = ck_implements(fortuneCoinAssembly.CecServiceController, gameProtocolApi.ICecService);
        fortuneCoinAssembly.CecServiceController.__interfaces__ = [gameProtocolApi.ICecService];
        fortuneCoinAssembly.CecServiceController.__name__ = ["fortuneCoinAssembly", "CecServiceController"];
        fortuneCoinAssembly.CecServiceController.prototype.gameController = null;
        fortuneCoinAssembly.CecServiceController.prototype.paytableUsed = function(state) {
            var params = {
                state: state
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Paytable", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.helpUsed = function(state) {
            var params = {
                state: state
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Help", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.tutorialUsed = function(state) {
            var params = {
                state: state
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Tutorial", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.soundUsed = function(state) {
            var params = {
                state: state
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Sound", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.bonus = function(type, win) {
            var params = {
                type: type,
                win: win
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Bonus", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.stakeSelected = function(type, name, previousValue, currentValue) {
            var params = {
                type: type,
                name: name,
                previousValue: null,
                currentValue: currentValue
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendCecEvent("Stake", params);
        };
        fortuneCoinAssembly.CecServiceController.prototype.__class__ = fortuneCoinAssembly.CecServiceController;
        fortuneCoinAssembly.ConsoleServiceController = function(gameController) {
            this.knownConsoleOptions = [];
            haxe.Log.trace("ConsoleServiceController", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 26,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "new"
            });
            this.gameController = gameController;
        };
        fortuneCoinAssembly.ConsoleServiceController = ck_implements(fortuneCoinAssembly.ConsoleServiceController, gameProtocolApi.IConsoleService);
        fortuneCoinAssembly.ConsoleServiceController.__interfaces__ = [gameProtocolApi.IConsoleService];
        fortuneCoinAssembly.ConsoleServiceController.__name__ = ["fortuneCoinAssembly", "ConsoleServiceController"];
        fortuneCoinAssembly.ConsoleServiceController.prototype.gameController = null;
        fortuneCoinAssembly.ConsoleServiceController.prototype.knownConsoleOptions = null;
        fortuneCoinAssembly.ConsoleServiceController.prototype.helpState = null;
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleAccountBalances = function(balance, promoFreeSpinCount) {
            haxe.Log.trace("ConsoleServiceController.handleAccountBalances", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 34,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleAccountBalances"
            });
            haxe.Log.trace("handleAccountBalances balance = " + balance + " promoFreeSpinCount = " + promoFreeSpinCount, {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 44,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleAccountBalances"
            });
            if (promoFreeSpinCount != null) {
                fortuneCoinAssembly.GameData.promotionalSpinsActive = true;
                fortuneCoinAssembly.GameData.promotionalSpinsCount = promoFreeSpinCount;
                this.gameController.betPanelPort.setBalance().publish(this.gameController.getString("/"));
                this.gameController.betPanelPort.disableButton().publish(betPanelApi.EButton.TOTAL_BET);
                if (!fortuneCoinAssembly.GameData.isFreeSpin) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
            } else {
                if (!fortuneCoinAssembly.GameData.doNotUpdateBalance) this.gameController.betPanelPort.setBalance().publish(balance);
                fortuneCoinAssembly.GameData.promotionalSpinsActive = false;
                fortuneCoinAssembly.GameData.promotionalSpinsCount = 0;
            }
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleStopAutospin = function(e) {
            haxe.Log.trace("ConsoleServiceController.handleStopAutospin", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 69,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleStopAutospin"
            });
            this.gameController.autoPlayController.requestAutoPlayStop();
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleHelpPageRequested = function(links) {
            haxe.Log.trace("ConsoleServiceController.handleHelpPageRequested", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 76,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleHelpPageRequested"
            });
            if (this.helpState != "open") this.helpState = "open";
            else this.helpState = "close";
            this.gameController.cecServiceController.helpUsed(this.helpState);
            var _g1 = 0;
            var _g = links.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g2 = links[i].id;
                switch (_g2) {
                    case "howToPlay":
                        this.gameController.paytablePort.show().publish(new fortuneCoinAssembly.PaytableTypePayload("help", links[i].url));
                        break;
                }
            }
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handlePaytablePageRequested = function() {
            haxe.Log.trace("ConsoleServiceController.handlePaytablePageRequested", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 90,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handlePaytablePageRequested"
            });
            this.gameController.openPaytable();
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleBetPerLineChanged = function(value) {
            haxe.Log.trace("ConsoleServiceController.handleBetPerLineChanged", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 96,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleBetPerLineChanged"
            });
            this.gameController.stakeItemController.setBetPerLine(value);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleSelectedLinesChanged = function(value) {
            haxe.Log.trace("ConsoleServiceController.handleSelectedLinesChanged", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 102,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleSelectedLinesChanged"
            });
            this.gameController.stakeItemController.setNumberOfLines(_hcmn_.Std.parseInt(value));
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.handleGameOptionChangedFromPf = function(name, value) {
            haxe.Log.trace("ConsoleServiceController.handleGameOptionChangedFromPf", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 108,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "handleGameOptionChangedFromPf"
            });
            this.gameOptionChanged(name, value);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.initializeStakeOptions = function(options) {
            haxe.Log.trace("ConsoleServiceController.initializeStakeOptions", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 114,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "initializeStakeOptions"
            });
            var initPayload = fortuneCoinAssembly.ExternalService.slotParser.getInitPayload();
            this.gameController.initializeComponents(initPayload);
            var _g1 = 0;
            var _g = options.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g2 = options[i].name;
                switch (_g2) {
                    case "betPerPattern":
                        options[i] = this.initializeOptionBetsPerLine(options[i]);
                        break;
                    case "patternsBet":
                        options[i] = this.initializeOptionSelectableLines(options[i]);
                        break;
                    case "stake":
                        options[i] = this.initializeOptionTotalStake(options[i]);
                        break;
                }
            }
            return Promise.resolve(options);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.changeStakeOptions = function() {
            haxe.Log.trace("ConsoleServiceController.changeStakeOptions", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 143,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "changeStakeOptions"
            });
            var _g1 = 0;
            var _g = this.knownConsoleOptions.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g2 = this.knownConsoleOptions[i];
                switch (_g2) {
                    case "betPerPattern":
                        this.changeOptionBetsPerLine(this.knownConsoleOptions[i]);
                        break;
                    case "patternsBet":
                        this.changeOptionSelectableLines(this.knownConsoleOptions[i]);
                        break;
                    case "stake":
                        this.changeOptionTotalStake(this.knownConsoleOptions[i]);
                        break;
                }
            }
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.setKnownConsoleOptions = function(gameConfigJson) {
            var options = gameConfigJson.options;
            var _g1 = 0;
            var _g = options.length;
            while (_g1 < _g) {
                var i = _g1++;
                this.knownConsoleOptions.push(options[i].name);
            }
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.initializeOptionBetsPerLine = function(option) {
            var selectedBetPerLine = this.gameController.stakeItemController.getBetPerLine();
            var selectableBetPerLine = fortuneCoinAssembly.GameData.riscControlSettings.betPerLineArray;
            var selectableBetPerLineFormatted = [];
            var _g1 = 0;
            var _g = selectableBetPerLine.length;
            while (_g1 < _g) {
                var i = _g1++;
                selectableBetPerLineFormatted[i] = fortuneCoinAssembly.ExternalService.moneyFormatter.format(selectableBetPerLine[i]);
            }
            return new pfCommunicatorApi.Option(option.type, option.name, option.text, 1, selectedBetPerLine, selectableBetPerLine, selectableBetPerLineFormatted);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.initializeOptionSelectableLines = function(option) {
            var selectedNumberOfLines = this.gameController.stakeItemController.getNumberOfLines();
            var selectableNumberOfLines = fortuneCoinAssembly.GameData.riscControlSettings.lineSteps;
            return new pfCommunicatorApi.Option(option.type, option.name, option.text, 1, selectedNumberOfLines, selectableNumberOfLines, selectableNumberOfLines);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.initializeOptionTotalStake = function(option) {
            var totalStake = this.gameController.stakeItemController.getTotalBet();
            var totalStakeFormatted = fortuneCoinAssembly.ExternalService.moneyFormatter.format(totalStake);
            return new pfCommunicatorApi.Option(option.type, option.name, option.text, 1, totalStake, [totalStakeFormatted], [totalStakeFormatted]);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.changeOptionBetsPerLine = function(optionName) {
            var betPerLine = this.gameController.stakeItemController.getBetPerLine();
            var betPerLineFloat = parseFloat(betPerLine);
            var betPerLineFormatted = fortuneCoinAssembly.ExternalService.moneyFormatter.format(betPerLine);
            fortuneCoinAssembly.ExternalService.gameProtocol.changeConsoleOption(optionName, [betPerLineFloat, betPerLineFormatted]);
            var prevBetPerPattern = this.gameController.stakeItemController.getPrevBetPerPattern();
            var currentBetPerPattern = this.gameController.stakeItemController.getBetPerPattern();
            this.gameController.cecServiceController.stakeSelected("BetPerLine", "BetPerline", prevBetPerPattern, currentBetPerPattern);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.changeOptionSelectableLines = function(optionName) {
            var selectedNumberOfLines = this.gameController.stakeItemController.getNumberOfLines();
            fortuneCoinAssembly.ExternalService.gameProtocol.changeConsoleOption(optionName, [selectedNumberOfLines]);
            var prevPatternsBet = this.gameController.stakeItemController.getPrevPatternsBet();
            var currentPatternsBet = this.gameController.stakeItemController.getPatternsBet();
            this.gameController.cecServiceController.stakeSelected("Lines", "PatternsBet", prevPatternsBet, currentPatternsBet);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.changeOptionTotalStake = function(optionName) {
            var totalStake = this.gameController.stakeItemController.getTotalBet();
            var totalStakeFloat = parseFloat(totalStake);
            var totalStakeFormatted = fortuneCoinAssembly.ExternalService.moneyFormatter.format(totalStake);
            fortuneCoinAssembly.ExternalService.gameProtocol.changeConsoleOption(optionName, [totalStakeFloat, totalStakeFormatted]);
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.gameOptionChanged = function(name, val) {
            haxe.Log.trace("[ConsoleServiceController.gameOptionChanged", {
                fileName: "ConsoleServiceController.hx",
                lineNumber: 235,
                className: "components.gamecontroller.controllers.ConsoleServiceController",
                methodName: "gameOptionChanged"
            });
            var value = _hcmn_.Std.parseInt(val);
            if (name == "sound") {
                if (value == 0) {
                    this.gameController.cecServiceController.soundUsed("E");
                    this.gameController.betPanelPort.enableButton().publish(betPanelApi.EButton.SOUND_ON);
                    this.gameController.soundController.setOn();
                    this.gameController.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    this.gameController.soundController.setConstant(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                } else {
                    this.gameController.cecServiceController.soundUsed("D");
                    this.gameController.betPanelPort.disableButton().publish(betPanelApi.EButton.SOUND_OFF);
                    this.gameController.soundController.setOff();
                    this.gameController.soundController.setConstant(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, false);
                }
            }
        };
        fortuneCoinAssembly.ConsoleServiceController.prototype.__class__ = fortuneCoinAssembly.ConsoleServiceController;
        fortuneCoinAssembly.FreeSpinController = function(gc) {
            if (fortuneCoinAssembly.FreeSpinController.instance != null) throw new Error("FreeSpinController instance already created!");
            this.gameController = gc;
            fortuneCoinAssembly.FreeSpinController.instance = this;
        };
        fortuneCoinAssembly.FreeSpinController.__name__ = ["fortuneCoinAssembly", "FreeSpinController"];
        fortuneCoinAssembly.FreeSpinController.prototype.gameController = null;
        fortuneCoinAssembly.FreeSpinController.prototype.stage = null;
        fortuneCoinAssembly.FreeSpinController.prototype.nextState = function(payload) {
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.FreeSpinController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.FreeSpinController.instance = null;
        fortuneCoinAssembly.FreeSpinController.getInstance = function() {
            if (fortuneCoinAssembly.FreeSpinController.instance == null) throw new Error("FreeSpinController singleton instance not created!");
            return fortuneCoinAssembly.FreeSpinController.instance;
        };
        fortuneCoinAssembly.FreeSpinController.prototype.__class__ = fortuneCoinAssembly.FreeSpinController;
        fortuneCoinAssembly.LayerController = function(gc, popupPort, layerManagerPort) {
            haxe.Log.trace("[LayerController]", {
                fileName: "LayerController.hx",
                lineNumber: 50,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "new"
            });
            if (fortuneCoinAssembly.LayerController.instance != null) throw new Error("LayerController instance already created!");
            fortuneCoinAssembly.LayerController.instance = this;
            this.gameController = gc;
            this.baseGameElementsVisibility = new _hcmn_.haxe_ds_StringMap();
            this.layerManagerPort = layerManagerPort;
            this.popupPort = popupPort;
            layerManagerPort.getTransitionCompleted().subscribe($bind(this, this.handleTransitionCompleted));
            layerManagerPort.getTransitionUpdateCompleted().subscribe($bind(this, this.handleTransitionUpdateCompleted));
            this.scenarios = new haxe.ds.EnumValueMap();
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO, $bind(this, this.FSIntroInitialized));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO, $bind(this, this.FSIntroPresented));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.HIDE_FS_INTRO, $bind(this, this.FSIntroHidden));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO_NEXT, $bind(this, this.FSIntroNextInitialized));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO_NEXT, $bind(this, this.FSIntroNextPresented));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO, $bind(this, this.FSOutroInitalized));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.SHOW_FS_OUTRO, $bind(this, this.FSOutroPresented));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.SHOW_JPA_INTRO, $bind(this, this.JPAIntroPresented));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.HIDE_JPA_INTRO, $bind(this, this.JPAIntroHidden));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.INIT_JPA_OUTRO, $bind(this, this.JPAOutroInitialized));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.SHOW_JPA_OUTRO, $bind(this, this.JPAOutroPresented));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.HIDE_JPA_OUTRO, $bind(this, this.JPAOutroHidden));
            this.scenarios.set(fortuneCoinAssembly.TransitionConstants.REELS_SHAKE, $bind(this, this.reelShakeCompleted));
        };
        fortuneCoinAssembly.LayerController.__name__ = ["fortuneCoinAssembly", "LayerController"];
        fortuneCoinAssembly.LayerController.prototype.gameController = null;
        fortuneCoinAssembly.LayerController.prototype.scenarios = null;
        fortuneCoinAssembly.LayerController.prototype.popupPort = null;
        fortuneCoinAssembly.LayerController.prototype.layerManagerPort = null;
        fortuneCoinAssembly.LayerController.prototype.baseGameElementsVisibility = null;
        fortuneCoinAssembly.LayerController.prototype.initialize = function() {
            haxe.Log.trace("[LayerController] [initialize] stage    : " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "LayerController.hx",
                lineNumber: 84,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initialize"
            });
            haxe.Log.trace("[LayerController] [initialize] nextStage: " + fortuneCoinAssembly.GameData.spinOutcome.nextStage, {
                fileName: "LayerController.hx",
                lineNumber: 85,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initialize"
            });
            haxe.Log.trace("[LayerController] [initialize] feature  : " + fortuneCoinAssembly.GameData.coinsFeatureState, {
                fileName: "LayerController.hx",
                lineNumber: 86,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initialize"
            });
            haxe.Log.trace("[LayerController] [initialize] tutorialConfirmed  : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialConfirmed), {
                fileName: "LayerController.hx",
                lineNumber: 87,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initialize"
            });
            haxe.Log.trace("[LayerController] [initialize] isResume  : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isResume), {
                fileName: "LayerController.hx",
                lineNumber: 88,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initialize"
            });
        };
        fortuneCoinAssembly.LayerController.prototype.updateVisibility = function() {
            haxe.Log.trace("[LayerController] [updateVisibility]", {
                fileName: "LayerController.hx",
                lineNumber: 95,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "updateVisibility"
            });
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.GAME_LOGO_HORISONTAL);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.MULTIWAY, [this.getString("MULTIWAY_TXT")], ["MULTIWAY_TXT"]);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.BOWL, ["bowl"]);
            this.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.BOWL, "bowl", "idle"));
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT, ["dragon_left"]);
            this.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT, "dragon_left", "idle"));
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT, ["dragon_right"]);
            this.getUpdateState(new fortuneCoinAssembly.PopupStatePayload(fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT, "dragon_right", "idle"));
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
                else this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME);
                } else {
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME);
                }
            } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin" || fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
                this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME);
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                    this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
                    this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                }
            }
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameData.tutorialInitxialized : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isPortrait), {
                fileName: "LayerController.hx",
                lineNumber: 142,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "updateVisibility",
                customParams: [fortuneCoinAssembly.GameData.tutorialConfirmed, fortuneCoinAssembly.GameData.isResume]
            });
            if (!fortuneCoinAssembly.GameData.tutorialConfirmed) {
                if (!fortuneCoinAssembly.GameData.isResume) {
                    fortuneCoinAssembly.GameData.tutorialClosed = false;
                    this.setGameElementsVisibility();
                    this.hideGameElements();
                }
            }
        };
        fortuneCoinAssembly.LayerController.prototype.updateBackground = function() {
            haxe.Log.trace("[LayerController] [updateBackground] ", {
                fileName: "LayerController.hx",
                lineNumber: 162,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "updateBackground",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.stage, fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD));
                else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker") this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD));
                else this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.BASE_GAME_BGD));
            } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin" || fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker") this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD));
                else this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD));
            } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "Picker") this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD));
        };
        fortuneCoinAssembly.LayerController.prototype.FSIntroInitialized = function() {
            haxe.Log.trace("[LayerController] [FSIntroInitialized] ", {
                fileName: "LayerController.hx",
                lineNumber: 186,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSIntroInitialized"
            });
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music_stop);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO, [_hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total), this.getString("FS_INTRO_1"), this.getString("FS_INTRO_2")]);
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
            this.initTween(fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO);
        };
        fortuneCoinAssembly.LayerController.prototype.FSIntroPresented = function() {
            haxe.Log.trace("[LayerController] [FSIntroPresented] ", {
                fileName: "LayerController.hx",
                lineNumber: 197,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSIntroPresented"
            });
            this.gameController.hideCoins();
            this.gameController.winCycleController.resetWinCycle();
            this.gameController.winCycleController.resetScatters();
            this.gameController.reelsPort.hide().publish(null);
            this.enablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO);
            fortuneCoinAssembly.ExternalService.bus.getChannel("TBus").publish("testable:availablePicks", {
                instanceId: "FreeSpinStart",
                pickerChoices: {
                    'Start': "Start"
                }
            });
            this.gameController.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.nextStage);
        };
        fortuneCoinAssembly.LayerController.prototype.FSIntroHidden = function() {
            var _g = this;
            haxe.Log.trace("[LayerController] [FSIntroHidden] ", {
                fileName: "LayerController.hx",
                lineNumber: 216,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSIntroHidden"
            });
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.bonus_transition_in_out);
            _hcmn_.haxe_Timer.delay(function() {
                _g.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO);
                _g.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO_NEXT);
            }, 2000);
        };
        fortuneCoinAssembly.LayerController.prototype.FSOutroInitalized = function() {
            haxe.Log.trace("[LayerController] [initFSOutro]", {
                fileName: "LayerController.hx",
                lineNumber: 228,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSOutroInitalized"
            });
            var totalWinFS = new money.Money(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout).sub(new money.Money(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.totalPayout)).value;
            this.initTween(fortuneCoinAssembly.TransitionConstants.SHOW_FS_OUTRO);
            this.gameController.winCycleController.resetWinCycle();
            this.gameController.winCycleController.resetScatters();
            fortuneCoinAssembly.GameData.countUpFinished = false;
            if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout)) this.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO, [this.getString("FS_OUTRO_0"), this.getString("FS_OUTRO_1"), fortuneCoinAssembly.ExternalService.moneyFormatter.format(totalWinFS), ""]);
            else if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.scatterWin.awardBG)) this.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO, [this.getString("FS_OUTRO_0"), this.getString("FS_OUTRO_1"), fortuneCoinAssembly.ExternalService.moneyFormatter.format(fortuneCoinAssembly.GameData.scatterWin.awardBG), ""]);
            else this.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO, ["", "", "", this.getString("FS_OUTRO_3")]);
        };
        fortuneCoinAssembly.LayerController.prototype.FSIntroNextInitialized = function() {
            haxe.Log.trace("[LayerController] [initFS]", {
                fileName: "LayerController.hx",
                lineNumber: 254,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSIntroNextInitialized"
            });
            this.initTween(fortuneCoinAssembly.TransitionConstants.SHOW_FS_INTRO_NEXT);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT);
        };
        fortuneCoinAssembly.LayerController.prototype.FSIntroNextPresented = function() {
            var _g = this;
            haxe.Log.trace("[LayerController] [showFSIntroNext]", {
                fileName: "LayerController.hx",
                lineNumber: 261,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSIntroNextPresented"
            });
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon");
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.minors_removed);
            this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels);
            _hcmn_.haxe_Timer.delay(function() {
                _g.showLayers("REELS_ELEMENTS");
                _g.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
                _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
                _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                _g.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT);
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) _g.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, true), true);
                _hcmn_.haxe_Timer.delay(function() {
                    fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [_g.getString("INFO_DISPLAY_0") + " " + (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current + 1) + _g.getString("OF") + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total], ["INFO_DISPLAY_0"]);
                }, 1000);
            }, 4000);
        };
        fortuneCoinAssembly.LayerController.prototype.FSOutroPresented = function() {
            var _g = this;
            haxe.Log.trace("[LayerController] [showFSOutro] " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isFreeSpin), {
                fileName: "LayerController.hx",
                lineNumber: 299,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "FSOutroPresented"
            });
            this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
            this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
            this.hideLayers("REELS_ELEMENTS");
            this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
            this.gameController.reelsPort.show().publish(null);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
            this.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
            this.showLayers("REELS_ELEMENTS");
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music);
            this.gameController.hideCoins();
            this.gameController.showIdleCoins("idle_value_loop", "BaseGame");
            this.gameController.backgroundPort.getHide().publish(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD);
            _hcmn_.haxe_Timer.delay(function() {
                _g.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
                _g.gameController.soundController.stopSound("freegame_music");
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [""]);
                else _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [_g.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
                _g.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.bonus_transition_in_out);
                _g.gameController.hideCoins();
                _hcmn_.haxe_Timer.delay(function() {
                    _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon");
                    fortuneCoinAssembly.GameData.isFreeSpin = false;
                    fortuneCoinAssembly.GameData.lastSpin = false;
                    if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                        _g.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                        if (fortuneCoinAssembly.GameData.isHighWin) {
                            _g.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false));
                            _g.gameController.betPanelController.setSkipState();
                        } else {
                            var totalPay = new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination).mulInt(fortuneCoinAssembly.GameData.coinsFeatureBaseGame.totalPayout).value;
                            _g.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, totalPay, false), true);
                            _g.gameController.betPanelController.setSpinState();
                            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                        }
                        _g.gameController.winCycleController.updateScatter(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome);
                        _g.gameController.winCycleController.showScatterWins();
                    } else {
                        _g.gameController.betPanelController.setIdleState();
                        fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    }
                    _g.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO);
                }, 3000);
            }, 1500);
        };
        fortuneCoinAssembly.LayerController.prototype.JPAIntroPresented = function() {
            haxe.Log.trace("[LayerController] [showJPAIntro]", {
                fileName: "LayerController.hx",
                lineNumber: 376,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "JPAIntroPresented"
            });
            this.hideLayers("REELS_ELEMENTS");
            if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) this.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, true), true);
            this.gameController.hideCoins();
            this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
            this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
            this.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
            this.enablePopup(fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO);
        };
        fortuneCoinAssembly.LayerController.prototype.JPAIntroHidden = function() {
            haxe.Log.trace("[LayerController] [JPAIntroHidden]", {
                fileName: "LayerController.hx",
                lineNumber: 394,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "JPAIntroHidden"
            });
            this.initTween(fortuneCoinAssembly.TransitionConstants.INIT_JPA_OUTRO);
        };
        fortuneCoinAssembly.LayerController.prototype.JPAOutroInitialized = function() {
            var _g = this;
            haxe.Log.trace("[LayerController] [JPAOutroInitialized]", {
                fileName: "LayerController.hx",
                lineNumber: 400,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "JPAOutroInitialized"
            });
            this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.bonus_transition_in_out);
            _hcmn_.haxe_Timer.delay(function() {
                _g.initTween(fortuneCoinAssembly.TransitionConstants.SHOW_JPA_OUTRO);
                _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.JPA_OUTRO, [_g.getString("JPA_OUTRO_0"), _g.getString("JPA_OUTRO_1"), _g.getString("JPA_OUTRO_2")]);
            }, 2000);
        };
        fortuneCoinAssembly.LayerController.prototype.JPAOutroPresented = function() {
            var _g = this;
            haxe.Log.trace("[LayerController] [JPAOutroPresented]", {
                fileName: "LayerController.hx",
                lineNumber: 416,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "JPAOutroPresented"
            });
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon");
            _hcmn_.haxe_Timer.delay(function() {
                _g.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music_stop);
                _g.initTween(fortuneCoinAssembly.TransitionConstants.HIDE_JPA_OUTRO);
                fortuneCoinAssembly.GameData.picked = false;
                _g.showPopup(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK);
                _g.gameController.pickerController.showPicker();
                _g.gameController.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music, 0.5);
            }, 2000);
        };
        fortuneCoinAssembly.LayerController.prototype.JPAOutroHidden = function() {};
        fortuneCoinAssembly.LayerController.prototype.reelShakeCompleted = function() {
            this.getReset(fortuneCoinAssembly.TransitionConstants.REELS_SHAKE);
        };
        fortuneCoinAssembly.LayerController.prototype.handleTransitionCompleted = function(payload) {
            var scenarioId = payload.getPayload();
            ((function($this) {
                var $r;
                var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.TransitionConstants, scenarioId);
                $r = $this.scenarios.get(key);
                return $r;
            }(this)))();
        };
        fortuneCoinAssembly.LayerController.prototype.handleTransitionUpdateCompleted = function(payload) {
            var scenarioId = payload.getPayload();
            ((function($this) {
                var $r;
                var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.TransitionConstants, scenarioId);
                $r = $this.scenarios.get(key);
                return $r;
            }(this)))();
        };
        fortuneCoinAssembly.LayerController.prototype.getReset = function(id) {
            this.layerManagerPort.getReset().publish(id[0]);
        };
        fortuneCoinAssembly.LayerController.prototype.disablePopup = function(popupId) {
            this.popupPort.getDisable().publish(popupId);
        };
        fortuneCoinAssembly.LayerController.prototype.enablePopup = function(popupId) {
            this.popupPort.getEnable().publish(popupId);
        };
        fortuneCoinAssembly.LayerController.prototype.getShake = function(payload) {
            this.layerManagerPort.getShake().publish(payload);
        };
        fortuneCoinAssembly.LayerController.prototype.initTween = function(id) {
            haxe.Log.trace("[LayerController] [initTween] " + _hcmn_.Std.string(id), {
                fileName: "LayerController.hx",
                lineNumber: 481,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "initTween"
            });
            this.layerManagerPort.getTween().publish(id[0]);
        };
        fortuneCoinAssembly.LayerController.prototype.showPopup = function(popupType, content, styles) {
            haxe.Log.trace("[LayerController] [showPopup] " + _hcmn_.Std.string(popupType), {
                fileName: "LayerController.hx",
                lineNumber: 487,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "showPopup"
            });
            if (content != null) this.popupPort.getShow().publish(new fortuneCoinAssembly.PopupPayload(popupType, content, styles));
            else this.popupPort.getShow().publish(new fortuneCoinAssembly.PopupPayload(popupType, [""], styles));
        };
        fortuneCoinAssembly.LayerController.prototype.getUpdateState = function(payload) {
            this.popupPort.getUpdateState().publish(payload);
        };
        fortuneCoinAssembly.LayerController.prototype.showLayers = function(id) {
            haxe.Log.trace("[LayerController] [showLayers] " + id, {
                fileName: "LayerController.hx",
                lineNumber: 505,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "showLayers"
            });
            this.layerManagerPort.getShow().publish(id);
        };
        fortuneCoinAssembly.LayerController.prototype.hidePopup = function(popupType) {
            haxe.Log.trace("[LayerController] [hidePopup] " + _hcmn_.Std.string(popupType), {
                fileName: "LayerController.hx",
                lineNumber: 511,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "hidePopup"
            });
            this.popupPort.getHide().publish(popupType);
        };
        fortuneCoinAssembly.LayerController.prototype.hideLayers = function(id) {
            haxe.Log.trace("[LayerController] [hideLayers] " + id, {
                fileName: "LayerController.hx",
                lineNumber: 518,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "hideLayers"
            });
            this.layerManagerPort.getHide().publish(id);
        };
        fortuneCoinAssembly.LayerController.prototype.hideGameElements = function() {
            var st = fortuneCoinAssembly.ExternalService.displayProvider.getDefaultStage();
            var $it0 = this.baseGameElementsVisibility.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (key != "TUTORIAL" && key != "TUTORIAL_PORTRAIT") st.getChildByID(key).setVisible(false);
            }
            haxe.Log.trace("[GameController] [hideGameElements] ", {
                fileName: "LayerController.hx",
                lineNumber: 534,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "hideGameElements"
            });
        };
        fortuneCoinAssembly.LayerController.prototype.showGameElements = function() {
            var st = fortuneCoinAssembly.ExternalService.displayProvider.getDefaultStage();
            var $it0 = this.baseGameElementsVisibility.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                var visible = this.baseGameElementsVisibility.get(key);
                if (visible) st.getChildByID(key).setVisible(true);
            }
        };
        fortuneCoinAssembly.LayerController.prototype.setGameElementsVisibility = function() {
            var st = fortuneCoinAssembly.ExternalService.displayProvider.getDefaultStage();
            var _g1 = 0;
            var _g = st.getNumChildren();
            while (_g1 < _g) {
                var i = _g1++;
                var id = st.getChildAt(i).id;
                var visible = st.getChildAt(i).getVisible();
                this.baseGameElementsVisibility.set(id, visible);
            }
        };
        fortuneCoinAssembly.LayerController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.LayerController.instance = null;
        fortuneCoinAssembly.LayerController.getInstance = function() {
            if (fortuneCoinAssembly.LayerController.instance == null) throw new Error("LayerController singleton instance not created!");
            haxe.Log.trace("[LayerController] [getInstance]", {
                fileName: "LayerController.hx",
                lineNumber: 44,
                className: "components.gamecontroller.controllers.LayerController",
                methodName: "getInstance"
            });
            return fortuneCoinAssembly.LayerController.instance;
        };
        fortuneCoinAssembly.LayerController.prototype.__class__ = fortuneCoinAssembly.LayerController;
        fortuneCoinAssembly.LayoutUpdateController = function(context, glPort) {
            this.glPort = glPort;
            this.context = context;
            this.glPort.getUpdateComponentLayout().subscribe($bind(this, this.handleLayoutUpdate));
            this.glPort.getGameLayoutUpdateStarted().subscribe($bind(this, this.handleLayoutUpdateStarted));
            this.glPort.getGameLayoutUpdated().subscribe($bind(this, this.handleGameLayoutUpdated));
        };
        fortuneCoinAssembly.LayoutUpdateController.__name__ = ["fortuneCoinAssembly", "LayoutUpdateController"];
        fortuneCoinAssembly.LayoutUpdateController.prototype.glPort = null;
        fortuneCoinAssembly.LayoutUpdateController.prototype.context = null;
        fortuneCoinAssembly.LayoutUpdateController.prototype.handleLayoutUpdate = function(e) {
            haxe.Log.trace("[LayoutUpdateController] [handleLayoutUpdate]", {
                fileName: "LayoutUpdateController.hx",
                lineNumber: 33,
                className: "components.gamecontroller.controllers.LayoutUpdateController",
                methodName: "handleLayoutUpdate"
            });
            fortuneCoinAssembly.LayerManagerPort.getInstance().getUpdateLayout().publish(e.getPayload());
            fortuneCoinAssembly.FxPort.getInstance().getUpdateLayout().publish(e.getPayload());
            fortuneCoinAssembly.PopupsPort.getInstance().getUpdateLayout().publish(e.getPayload());
            fortuneCoinAssembly.PickerPort.getInstance().getUpdateLayout().publish(e.getPayload());
            fortuneCoinAssembly.CoinBonusPort.getInstance().getUpdateLayout().publish(e.getPayload());
            fortuneCoinAssembly.WinControllerPort.getInstance().getUpdateLayout().publish(e.getPayload());
            this.glPort.getComponentLayoutUpdated().publish(this.context.getInstance());
        };
        fortuneCoinAssembly.LayoutUpdateController.prototype.handleLayoutUpdateStarted = function(e) {
            haxe.Log.trace("[LayoutUpdateController] [handleLayoutUpdateStarted]", {
                fileName: "LayoutUpdateController.hx",
                lineNumber: 54,
                className: "components.gamecontroller.controllers.LayoutUpdateController",
                methodName: "handleLayoutUpdateStarted"
            });
            fortuneCoinAssembly.CoinBonusPort.getInstance().getUpdateLayoutStarted().publish(e.getPayload());
            fortuneCoinAssembly.LayerManagerPort.getInstance().getUpdateLayoutStarted().publish(e.getPayload());
        };
        fortuneCoinAssembly.LayoutUpdateController.prototype.handleGameLayoutUpdated = function(e) {
            haxe.Log.trace("[LayoutUpdateController] [handleGameLayoutUpdated]", {
                fileName: "LayoutUpdateController.hx",
                lineNumber: 65,
                className: "components.gamecontroller.controllers.LayoutUpdateController",
                methodName: "handleGameLayoutUpdated"
            });
            fortuneCoinAssembly.LayerManagerPort.getInstance().getUpdateLayoutCompleted().publish(null);
        };
        fortuneCoinAssembly.LayoutUpdateController.prototype.__class__ = fortuneCoinAssembly.LayoutUpdateController;
        fortuneCoinAssembly.PaytableController = function(paytablePort, gameController) {
            haxe.Log.trace("[PAYTABLE_CONTROLLER] STARTED", {
                fileName: "PaytableController.hx",
                lineNumber: 21,
                className: "components.gamecontroller.controllers.PaytableController",
                methodName: "new"
            });
            this.paytablePort = paytablePort;
            this.gameController = gameController;
            this.paytablePort.onCloseButtonPressed().subscribe($bind(this, this.closePaytable));
        };
        fortuneCoinAssembly.PaytableController.__name__ = ["fortuneCoinAssembly", "PaytableController"];
        fortuneCoinAssembly.PaytableController.prototype.gameController = null;
        fortuneCoinAssembly.PaytableController.prototype.paytablePort = null;
        fortuneCoinAssembly.PaytableController.prototype.openPaytable = function() {
            haxe.Log.trace("[PAYTABLE_CONTROLLER] openPaytable", {
                fileName: "PaytableController.hx",
                lineNumber: 29,
                className: "components.gamecontroller.controllers.PaytableController",
                methodName: "openPaytable"
            });
            this.paytablePort.show().publish(new fortuneCoinAssembly.PaytableTypePayload("paytable"));
        };
        fortuneCoinAssembly.PaytableController.prototype.forcePaytableClose = function() {
            haxe.Log.trace("[PAYTABLE_CONTROLLER] forcePaytableClose", {
                fileName: "PaytableController.hx",
                lineNumber: 43,
                className: "components.gamecontroller.controllers.PaytableController",
                methodName: "forcePaytableClose"
            });
            this.paytablePort.hide().publish(null);
        };
        fortuneCoinAssembly.PaytableController.prototype.closePaytable = function(e) {
            haxe.Log.trace("[PAYTABLE_CONTROLLER] closePaytable", {
                fileName: "PaytableController.hx",
                lineNumber: 51,
                className: "components.gamecontroller.controllers.PaytableController",
                methodName: "closePaytable"
            });
            this.gameController.cecServiceController.paytableUsed("close");
            this.paytablePort.hide().publish(null);
        };
        fortuneCoinAssembly.PaytableController.prototype.__class__ = fortuneCoinAssembly.PaytableController;
        fortuneCoinAssembly.PickerController = function(gc) {
            this.jpName = "";
            this.lastPickedSound = null;
            if (fortuneCoinAssembly.PickerController.instance != null) throw new Error("PickerController instance already created!");
            this.gameController = gc;
            fortuneCoinAssembly.PickerController.instance = this;
            this.soundController = fortuneCoinAssembly.SoundController.getInstance();
            this.pickerPort = fortuneCoinAssembly.PickerPort.getInstance();
            this.awardedValues = new _hcmn_.haxe_ds_StringMap();
        };
        fortuneCoinAssembly.PickerController.__name__ = ["fortuneCoinAssembly", "PickerController"];
        fortuneCoinAssembly.PickerController.prototype.soundController = null;
        fortuneCoinAssembly.PickerController.prototype.gameController = null;
        fortuneCoinAssembly.PickerController.prototype.lastPickedSound = null;
        fortuneCoinAssembly.PickerController.prototype.jpName = null;
        fortuneCoinAssembly.PickerController.prototype.awardedValues = null;
        fortuneCoinAssembly.PickerController.prototype.stage = null;
        fortuneCoinAssembly.PickerController.prototype.pickerPort = null;
        fortuneCoinAssembly.PickerController.prototype.initPickerEntry = function() {
            var _g = this;
            haxe.Log.trace("[GameController] [initPicker] " + "GameData.stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerController.hx",
                lineNumber: 61,
                className: "components.gamecontroller.controllers.PickerController",
                methodName: "initPickerEntry",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
            this.stage = this1.get("skgl_0");
            _hcmn_.haxe_Timer.delay(function() {
                _g.soundController.stopSound("basegame_music");
                _g.soundController.stopSound("freegame_music");
                _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO, [_g.gameController.getString("JPA_INTRO_0"), _g.gameController.getString("JPA_INTRO_1"), _g.gameController.getString("JPA_INTRO_2")]);
                _g.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.SHOW_JPA_INTRO);
                _g.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO);
                _g.playPickerSound();
                _g.displayFSCounter();
            }, 1000);
        };
        fortuneCoinAssembly.PickerController.prototype.initPickerInstantly = function() {
            var _g = this;
            var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
            this.stage = this1.get("skgl_0");
            this.soundController.stopSound("basegame_music");
            this.soundController.stopSound("freegame_music");
            this.gameController.layerController.hideLayers("REELS_ELEMENTS");
            this.gameController.hideCoins();
            fortuneCoinAssembly.GameData.picked = false;
            this.playPickerSound();
            this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.picker_bonus_music, 0.5);
            this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music, 0);
            if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) this.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), true);
            this.showPicker();
            this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK);
            if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome != null) {
                var _g1 = 0;
                var _g2 = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks.length;
                while (_g1 < _g2) {
                    var i = _g1++;
                    var pickName = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].name;
                    var pickIndex = _hcmn_.Std.parseInt(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].name.split("R0")[0].split("C")[1]);
                    var pickValue = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].value;
                    this.pickerPort.getShowCurrentPick().publish(new fortuneCoinAssembly.CurrentPickPayload(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP, pickValue, this.getPickPosition(pickIndex)));
                }
            }
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") _hcmn_.haxe_Timer.delay(function() {
                _g.displayFSCounter();
            }, 1000);
        };
        fortuneCoinAssembly.PickerController.prototype.showPicker = function() {
            fortuneCoinAssembly.GameData.setPickerChoices(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo.choices);
            this.pickerPort.getShow().publish(new fortuneCoinAssembly.PickerPayload(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP, fortuneCoinAssembly.GameData.pickerChoices));
            fortuneCoinAssembly.ExternalService.bus.getChannel("TBus").publish("testable:availablePicks", {
                instanceId: "BonusPicker",
                pickerChoices: fortuneCoinAssembly.GameData.pickerChoices
            });
        };
        fortuneCoinAssembly.PickerController.prototype.showLastPick = function() {
            var pickIndex = _hcmn_.Std.parseInt(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.name.split("R0")[0].split("C")[1]);
            var lastPick = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.name;
            var value = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.value;
            this.pickerPort.getShowCurrentPick().publish(new fortuneCoinAssembly.CurrentPickPayload(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP, value, this.getPickPosition(pickIndex)));
            fortuneCoinAssembly.GameData.pickerChoices.set(lastPick, value);
            fortuneCoinAssembly.ExternalService.bus.getChannel("TBus").publish("testable:availablePicks", {
                instanceId: "BonusPicker",
                pickerChoices: fortuneCoinAssembly.GameData.pickerChoices
            });
        };
        fortuneCoinAssembly.PickerController.prototype.presentAllAwarded = function() {
            var _g = this;
            var jackpotAwardParsed;
            jackpotAwardParsed = fortuneCoinAssembly.GameData.fsJackpotAward;
            var jpAwards = [];
            jpAwards[0] = this.gameController.getString("JACKPOT_AWARDED_OUTRO_0");
            jpAwards[1] = this.gameController.getString("JACKPOT_AWARDED_OUTRO_1");
            jpAwards[2] = this.gameController.getString("JACKPOT_AWARDED_OUTRO_2");
            jpAwards[3] = this.gameController.getString("JACKPOT_AWARDED_OUTRO_3");
            jpAwards[4] = this.gameController.getString("JACKPOT_AWARDED_OUTRO_4");
            this.updateAwardValues("D");
            this.updateAwardValues("C");
            this.updateAwardValues("B");
            this.updateAwardValues("A");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "D");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "C");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "B");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "A");
            var $it0 = this.awardedValues.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, key, new displayEngineApi.Point(0, 0), "2", key);
            }
            var $it1 = jackpotAwardParsed.payout.keys();
            while ($it1.hasNext()) {
                var key1 = $it1.next();
                jpAwards.push(jackpotAwardParsed.payout.get(key1));
            }
            _hcmn_.haxe_Timer.delay(function() {
                _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO, jpAwards);
                _g.gameController.backgroundPort.getHide().publish(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD);
                _g.pickerPort.getHide().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK);
                var $it2 = _g.awardedValues.keys();
                while ($it2.hasNext()) {
                    var key2 = $it2.next();
                    _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, key2);
                }
                _hcmn_.haxe_Timer.delay(function() {
                    _g.hideJPAOutro();
                }, 2000);
            }, 3000);
        };
        fortuneCoinAssembly.PickerController.prototype.presentSingleAward = function() {
            var _g = this;
            var jackpotAwardParsed;
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") jackpotAwardParsed = fortuneCoinAssembly.GameData.jackpotAward;
            else jackpotAwardParsed = fortuneCoinAssembly.GameData.fsJackpotAward;
            _hcmn_.haxe_Timer.delay(function() {
                _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO, [_g.jpName, _g.gameController.getString("ALL_AWARDS_OUTRO_1"), jackpotAwardParsed.totalPayout]);
                _g.gameController.backgroundPort.getHide().publish(fortuneCoinAssembly.BackgroundType.PICKER_GAME_BGD);
                _g.pickerPort.getHide().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK);
                _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "D");
                _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "C");
                _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "B");
                _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "A");
                var $it0 = _g.awardedValues.keys();
                while ($it0.hasNext()) {
                    var key = $it0.next();
                    _g.awardedValues.remove(key);
                }
                _hcmn_.haxe_Timer.delay(function() {
                    _g.hideJPAOutro();
                }, 2000);
            }, 3000);
        };
        fortuneCoinAssembly.PickerController.prototype.resetAwardedValues = function() {
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "D");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "C");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "B");
            this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, "A");
            var $it0 = this.awardedValues.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.awardedValues.remove(key);
            }
        };
        fortuneCoinAssembly.PickerController.prototype.presentAwardedBoosts = function() {
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks.length;
            while (_g1 < _g) {
                var i = _g1++;
                var value = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].value;
                if (value == "A" || value == "B" || value == "C" || value == "D") {
                    this.updateAwardValues(value);
                    this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, value);
                    this.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, value, new displayEngineApi.Point(0, 0), _hcmn_.Std.string(this.awardedValues.get(value)), value);
                }
            }
        };
        fortuneCoinAssembly.PickerController.prototype.presentAwardedBoost = function() {
            var value = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.value;
            if (value == "A" || value == "B" || value == "C" || value == "D") {
                this.updateAwardValues(value);
                this.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, value);
                this.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_EXTENDED, value, new displayEngineApi.Point(0, 0), _hcmn_.Std.string(this.awardedValues.get(value)), value);
            }
        };
        fortuneCoinAssembly.PickerController.prototype.hideJPAOutro = function() {
            var _g = this;
            this.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon", new displayEngineApi.Point(0, 0), "intro", "Dragon");
            this.stopPickerSound();
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.bonus_transition_in_out);
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") this.gameController.backgroundPort.getShow().publish(new fortuneCoinAssembly.BackgroundPayload(fortuneCoinAssembly.BackgroundType.FREE_GAME_BGD));
            _hcmn_.haxe_Timer.delay(function() {
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
                _g.presentReels();
                _g.gameController.hideFx(fortuneCoinAssembly.FxTypeEnum.FX_DRAGON, "Dragon");
            }, 3000);
        };
        fortuneCoinAssembly.PickerController.prototype.presentReels = function() {
            this.gameController.layerController.showLayers("REELS_ELEMENTS");
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS);
            else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG);
            this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND);
            this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.nextStage);
            this.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_music);
            fortuneCoinAssembly.GameData.resetJackpots();
            this.gameController.updateJackpotValues(true);
            this.resetAwardedValues();
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.PickerController.prototype.showBoostAnimation = function(winValue) {
            var targetContainer = this.stage.getChildByID("TRAIL_TARGET");
            var targetX = _hcmn_.Std["int"](targetContainer.getX()) - 100;
            var targetY = _hcmn_.Std["int"](targetContainer.getY()) - 100;
            this.gameController.showFx(fortuneCoinAssembly.FxTypeEnum.FX_FRONT, "bowl_boost_" + winValue, new displayEngineApi.Point(targetX, targetY), "intro");
        };
        fortuneCoinAssembly.PickerController.prototype.initTrail = function() {
            var value = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.value;
            if (value == "1x" || value == "2x" || value == "3x") {
                this.playBoostSound();
                var pickIndex = _hcmn_.Std.parseInt(fortuneCoinAssembly.GameData.currentPick.split("R0")[0].split("C")[1]);
                var pos = this.getPickPosition(pickIndex);
                var offsetX = 40 + (40 * pos.x | 0);
                var offsetY = 40 + (40 * pos.y | 0);
                var x = pos.x * fortuneCoinAssembly.GameData.symbolSize.x + offsetX | 0;
                var y = pos.y * fortuneCoinAssembly.GameData.symbolSize.y + offsetY | 0;
                var targetContainer = this.stage.getChildByID("TRAIL_TARGET");
                var targetX = _hcmn_.Std["int"](targetContainer.getX());
                var targetY = _hcmn_.Std["int"](targetContainer.getY());
                var angle = _hcmn_.Std["int"](_hcmn_.Math.atan2(targetY - y, targetX - x) * 180 / _hcmn_.Math.PI);
                this.gameController.fxPort.getShowTrail().publish(new fortuneCoinAssembly.ShowTrailFxPayload(fortuneCoinAssembly.FxTypeEnum.FX_TRAIL, "boost_trail", [x, targetX], [y, targetY], [angle, angle], 1000, value));
            }
        };
        fortuneCoinAssembly.PickerController.prototype.getPickPosition = function(pickIndex) {
            var currentIndex = 0;
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfCollumns;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfRows;
                while (_g3 < _g2) {
                    var j = _g3++;
                    if (currentIndex == pickIndex) {
                        return new displayEngineApi.Point(i, j);
                        break;
                    }
                    currentIndex++;
                }
            }
            return new displayEngineApi.Point(-1, -1);
        };
        fortuneCoinAssembly.PickerController.prototype.presentAwardCap = function() {
            var _g = this;
            _hcmn_.haxe_Timer.delay(function() {
                fortuneCoinAssembly.GameData.resetJackpots();
                _g.gameController.updateJackpotValues(true);
                _g.stopPickerSound();
                _g.soundController.setConstant(components.gamecontroller.constants.SoundFlags.STAGE, fortuneCoinAssembly.GameData.spinOutcome.nextStage);
                _g.soundController.setConstant(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            }, 1500);
        };
        fortuneCoinAssembly.PickerController.prototype.stopPickerSound = function() {
            this.soundController.stopSound(this.lastPickedSound);
            this.lastPickedSound = null;
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.picker_bonus_music_stop);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.maxi_tracer_level01);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.maxi_tracer_level02);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.maxi_tracer_win);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.grand_tracer_level01);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.grand_tracer_level02);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.grand_tracer_win);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.minor_tracer_level01);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.minor_tracer_level02);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.minor_tracer_win);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.mini_tracer_level01);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.mini_tracer_level02);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.mini_tracer_win);
            this.soundController.stopSoundScenario(fortuneCoinAssembly.SoundConstants.boost);
        };
        fortuneCoinAssembly.PickerController.prototype.playPickerSound = function() {
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.picker_bonus_music);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.maxi_tracer_level01);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.maxi_tracer_level02);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.maxi_tracer_win);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.grand_tracer_level01);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.grand_tracer_level02);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.grand_tracer_win);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.minor_tracer_level01);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.minor_tracer_level02);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.minor_tracer_win);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.mini_tracer_level01);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.mini_tracer_level02);
            this.soundController.activate(fortuneCoinAssembly.SoundConstants.mini_tracer_win);
        };
        fortuneCoinAssembly.PickerController.prototype.getSoundPickerLevel = function() {
            var value = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].lastPicked.value;
            if (this.lastPickedSound != null) this.soundController.increaseVolume(this.lastPickedSound, 0);
            var arr = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks;
            var counter = 0;
            var _g1 = 0;
            var _g = arr.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (value == arr[i].value) counter++;
            }
            this.soundController.increaseVolume(this.determinePickerScenario(value, counter), 1);
            this.lastPickedSound = this.determinePickerScenario(value, counter);
        };
        fortuneCoinAssembly.PickerController.prototype.waitForContinue = function() {};
        fortuneCoinAssembly.PickerController.prototype.presentWin = function() {
            if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                    this.gameController.hideCoins();
                    if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                        this.gameController.betPanelController.setSkipState();
                        this.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                        fortuneCoinAssembly.GameData.betPerLineCredit = this.gameController.stakeItemController.getBetPerPattern();
                        this.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false));
                        fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                        fortuneCoinAssembly.GameData.countUpFinished = false;
                    } else _hcmn_.haxe_Timer.delay(function() {
                        fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    }, 1000);
                } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.PickerController.prototype.determinePickerScenario = function(value, counter) {
            switch (value) {
                case "A":
                    if (counter == 1) return fortuneCoinAssembly.SoundConstants.maxi_tracer_level01;
                    if (counter == 2) return fortuneCoinAssembly.SoundConstants.maxi_tracer_level02;
                    else {
                        this.jpName = this.getString("MAXI" + "_1");
                        return fortuneCoinAssembly.SoundConstants.maxi_tracer_win;
                    }
                    break;
                case "B":
                    if (counter == 1) return fortuneCoinAssembly.SoundConstants.grand_tracer_level01;
                    if (counter == 2) return fortuneCoinAssembly.SoundConstants.grand_tracer_level02;
                    else {
                        this.jpName = this.getString("MAJOR" + "_1");
                        return fortuneCoinAssembly.SoundConstants.grand_tracer_win;
                    }
                    break;
                case "C":
                    if (counter == 1) return fortuneCoinAssembly.SoundConstants.minor_tracer_level01;
                    if (counter == 2) return fortuneCoinAssembly.SoundConstants.minor_tracer_level02;
                    else {
                        this.jpName = this.getString("MINOR" + "_1");
                        return fortuneCoinAssembly.SoundConstants.minor_tracer_win;
                    }
                    break;
                case "D":
                    if (counter == 1) return fortuneCoinAssembly.SoundConstants.mini_tracer_level01;
                    if (counter == 2) return fortuneCoinAssembly.SoundConstants.mini_tracer_level02;
                    else {
                        this.jpName = this.getString("MINI" + "_1");
                        return fortuneCoinAssembly.SoundConstants.mini_tracer_win;
                    }
                    break;
                default:
                    return fortuneCoinAssembly.SoundConstants.award_all;
            }
        };
        fortuneCoinAssembly.PickerController.prototype.nextState = function(payload) {
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.PickerController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.PickerController.prototype.playBoostSound = function() {
            var _g = this;
            this.soundController.stopSound("boost");
            _hcmn_.haxe_Timer.delay(function() {
                _g.soundController.playSound("boost");
            }, 10);
        };
        fortuneCoinAssembly.PickerController.prototype.displayFSCounter = function() {
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current < fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total) {
                    if (fortuneCoinAssembly.GameData.isRetrigger) {
                        var totalAwarded = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total - fortuneCoinAssembly.GameData.spinOutcome.freeSpin.awarded;
                        if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.getString("INFO_DISPLAY_0") + " " + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current + this.getString("OF") + (totalAwarded == null ? "null" : "" + totalAwarded)], ["INFO_DISPLAY_0"]);
                        else this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
                    } else if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.getString("INFO_DISPLAY_0") + " " + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current + this.getString("OF") + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total], ["INFO_DISPLAY_0"]);
                    else this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.gameController.getString("PROMO_FREE_SPINS") + " " + fortuneCoinAssembly.GameData.promotionalSpinsCount], ["PROMO_FREE_SPINS"]);
                }
            }
        };
        fortuneCoinAssembly.PickerController.prototype.updateAwardValues = function(value) {
            if (this.awardedValues.exists(value)) {
                var _g = value;
                var v = this.awardedValues.get(_g) + 1;
                this.awardedValues.set(_g, v);
                v;
                if (this.awardedValues.get(value) >= 2) {
                    this.awardedValues.set(value, 2);
                    2;
                }
            } else this.awardedValues.set(value, 0);
        };
        fortuneCoinAssembly.PickerController.instance = null;
        fortuneCoinAssembly.PickerController.getInstance = function() {
            if (fortuneCoinAssembly.PickerController.instance == null) throw new Error("PickerController singleton instance not created!");
            return fortuneCoinAssembly.PickerController.instance;
        };
        fortuneCoinAssembly.PickerController.prototype.__class__ = fortuneCoinAssembly.PickerController;
        if (!components.gamecontroller.controllers) {
            components.gamecontroller.controllers = {};
        };
        components.gamecontroller.controllers.SoundAction = {
            __ename__: ["components", "gamecontroller", "controllers", "SoundAction"],
            __constructs__: ["PLAY", "STOP", "FADE_IN", "FADE_OUT", "LOOP"]
        };
        components.gamecontroller.controllers.SoundAction.STOP = ["STOP", 1];
        components.gamecontroller.controllers.SoundAction.STOP.toString = $estr;
        components.gamecontroller.controllers.SoundAction.STOP.__enum__ = components.gamecontroller.controllers.SoundAction;
        components.gamecontroller.controllers.SoundAction.FADE_IN = ["FADE_IN", 2];
        components.gamecontroller.controllers.SoundAction.FADE_IN.toString = $estr;
        components.gamecontroller.controllers.SoundAction.FADE_IN.__enum__ = components.gamecontroller.controllers.SoundAction;
        components.gamecontroller.controllers.SoundAction.LOOP = ["LOOP", 4];
        components.gamecontroller.controllers.SoundAction.LOOP.toString = $estr;
        components.gamecontroller.controllers.SoundAction.LOOP.__enum__ = components.gamecontroller.controllers.SoundAction;
        components.gamecontroller.controllers.SoundAction.PLAY = ["PLAY", 0];
        components.gamecontroller.controllers.SoundAction.PLAY.toString = $estr;
        components.gamecontroller.controllers.SoundAction.PLAY.__enum__ = components.gamecontroller.controllers.SoundAction;
        components.gamecontroller.controllers.SoundAction.FADE_OUT = ["FADE_OUT", 3];
        components.gamecontroller.controllers.SoundAction.FADE_OUT.toString = $estr;
        components.gamecontroller.controllers.SoundAction.FADE_OUT.__enum__ = components.gamecontroller.controllers.SoundAction;
        fortuneCoinAssembly.SoundController = function(context) {
            if (fortuneCoinAssembly.SoundController.instance != null) throw new Error("SoundController instance already created!");
            fortuneCoinAssembly.SoundController.instance = this;
            this.soundPort = context.getUsedPort(soundManagerApi.ISoundManagerPort);
            this.soundPort.muteAll().publish(null);
            this.soundPort.unmuteAll().publish(null);
            this.soundPort.onFinish().subscribe($bind(this, this.onSoundCompleted));
            this.soundScenarios = new haxe.ds.EnumValueMap();
            this.gameConstants = new haxe.ds.EnumValueMap();
            var value = {
                soundId: fortuneCoinAssembly.SoundConstants.sound_on,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g = new haxe.ds.EnumValueMap();
                    _g.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.sound_on, value);
            var value1 = {
                soundId: fortuneCoinAssembly.SoundConstants.anticipation,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g1 = new haxe.ds.EnumValueMap();
                    _g1.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g1;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.anticipation_stop, value1);
            var value2 = {
                soundId: fortuneCoinAssembly.SoundConstants.celebration_bell,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g2 = new haxe.ds.EnumValueMap();
                    _g2.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g2;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.celebration_bell, value2);
            var value3 = {
                soundId: fortuneCoinAssembly.SoundConstants.spin_button,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g3 = new haxe.ds.EnumValueMap();
                    _g3.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g3;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.spin_button, value3);
            var value4 = {
                soundId: fortuneCoinAssembly.SoundConstants.click,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g4 = new haxe.ds.EnumValueMap();
                    _g4.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g4;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.click, value4);
            var value5 = {
                soundId: fortuneCoinAssembly.SoundConstants.reelstop01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g5 = new haxe.ds.EnumValueMap();
                    _g5.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g5;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.reelstop01, value5);
            var value6 = {
                soundId: fortuneCoinAssembly.SoundConstants.reelstop02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g6 = new haxe.ds.EnumValueMap();
                    _g6.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g6;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.reelstop02, value6);
            var value7 = {
                soundId: fortuneCoinAssembly.SoundConstants.reelstop03,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g7 = new haxe.ds.EnumValueMap();
                    _g7.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g7;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.reelstop03, value7);
            var value8 = {
                soundId: fortuneCoinAssembly.SoundConstants.reelstop04,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g8 = new haxe.ds.EnumValueMap();
                    _g8.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g8;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.reelstop04, value8);
            var value9 = {
                soundId: fortuneCoinAssembly.SoundConstants.reelstop05,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g9 = new haxe.ds.EnumValueMap();
                    _g9.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g9;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.reelstop05, value9);
            var value10 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_smart01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g10 = new haxe.ds.EnumValueMap();
                    _g10.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g10;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_smart01, value10);
            var value11 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_smart02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g11 = new haxe.ds.EnumValueMap();
                    _g11.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g11;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_smart02, value11);
            var value12 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_smart03,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g12 = new haxe.ds.EnumValueMap();
                    _g12.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g12;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_smart03, value12);
            var value13 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_smart04,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g13 = new haxe.ds.EnumValueMap();
                    _g13.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g13;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_smart04, value13);
            var value14 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_smart05,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g14 = new haxe.ds.EnumValueMap();
                    _g14.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g14;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_smart05, value14);
            var value15 = {
                soundId: fortuneCoinAssembly.SoundConstants.smart_sound01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g15 = new haxe.ds.EnumValueMap();
                    _g15.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g15.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g15;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.smart_sound01, value15);
            var value16 = {
                soundId: fortuneCoinAssembly.SoundConstants.smart_sound02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g16 = new haxe.ds.EnumValueMap();
                    _g16.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g16.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g16;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.smart_sound02, value16);
            var value17 = {
                soundId: fortuneCoinAssembly.SoundConstants.smart_sound03,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g17 = new haxe.ds.EnumValueMap();
                    _g17.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g17.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g17;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.smart_sound03, value17);
            var value18 = {
                soundId: fortuneCoinAssembly.SoundConstants.smart_sound04,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g18 = new haxe.ds.EnumValueMap();
                    _g18.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g18.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g18;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.smart_sound04, value18);
            var value19 = {
                soundId: fortuneCoinAssembly.SoundConstants.smart_sound05,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g19 = new haxe.ds.EnumValueMap();
                    _g19.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g19.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g19;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.smart_sound05, value19);
            var value20 = {
                soundId: fortuneCoinAssembly.SoundConstants.anticipation_off,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g20 = new haxe.ds.EnumValueMap();
                    _g20.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g20;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.anticipation_off, value20);
            var value21 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_music,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g21 = new haxe.ds.EnumValueMap();
                    _g21.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g21.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g21.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g21;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_music, value21);
            var value22 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_music,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g22 = new haxe.ds.EnumValueMap();
                    _g22.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g22.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g22.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g22;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_music_stop, value22);
            var value23 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_music,
                action: components.gamecontroller.controllers.SoundAction.FADE_OUT,
                constants: (function($this) {
                    var $r;
                    var _g23 = new haxe.ds.EnumValueMap();
                    _g23.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g23.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g23.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g23;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_music_fade_out, value23);
            var value24 = {
                soundId: fortuneCoinAssembly.SoundConstants.anticipation,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g24 = new haxe.ds.EnumValueMap();
                    _g24.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g24;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.anticipation, value24);
            var value25 = {
                soundId: fortuneCoinAssembly.SoundConstants.pick,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g25 = new haxe.ds.EnumValueMap();
                    _g25.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g25;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.pick, value25);
            var value26 = {
                soundId: fortuneCoinAssembly.SoundConstants.pick,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g26 = new haxe.ds.EnumValueMap();
                    _g26.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g26;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.pick_stop, value26);
            var value27 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g27 = new haxe.ds.EnumValueMap();
                    _g27.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g27.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g27;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup, value27);
            var value28 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g28 = new haxe.ds.EnumValueMap();
                    _g28.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g28.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g28;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_stop, value28);
            var value29 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup_off,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g29 = new haxe.ds.EnumValueMap();
                    _g29.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g29.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g29;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_off, value29);
            var value30 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g30 = new haxe.ds.EnumValueMap();
                    _g30.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g30.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    $r = _g30;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0, value30);
            var value31 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g31 = new haxe.ds.EnumValueMap();
                    _g31.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g31;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin, value31);
            var value32 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g32 = new haxe.ds.EnumValueMap();
                    _g32.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g32.set(components.gamecontroller.constants.SoundFlags.STAGE, "Picker");
                    $r = _g32;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker, value32);
            var value33 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g33 = new haxe.ds.EnumValueMap();
                    _g33.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g33.set(components.gamecontroller.constants.SoundFlags.STAGE, "Picker");
                    $r = _g33;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop, value33);
            var value34 = {
                soundId: fortuneCoinAssembly.SoundConstants.basegame_rollup_off,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g34 = new haxe.ds.EnumValueMap();
                    _g34.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g34.set(components.gamecontroller.constants.SoundFlags.STAGE, "Picker");
                    $r = _g34;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off, value34);
            var value35 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g35 = new haxe.ds.EnumValueMap();
                    _g35.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g35.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g35;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_rollup, value35);
            var value36 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_rollup,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g36 = new haxe.ds.EnumValueMap();
                    _g36.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g36.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g36;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_rollup_stop, value36);
            var value37 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_rollup_off,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g37 = new haxe.ds.EnumValueMap();
                    _g37.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g37.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g37;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_rollup_off, value37);
            var value38 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g38 = new haxe.ds.EnumValueMap();
                    _g38.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g38.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g38;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_rollup_off_0, value38);
            var value39 = {
                soundId: fortuneCoinAssembly.SoundConstants.celebration_rollup,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g39 = new haxe.ds.EnumValueMap();
                    _g39.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g39;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.celebration_rollup, value39);
            var value40 = {
                soundId: fortuneCoinAssembly.SoundConstants.celebration_rollup,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g40 = new haxe.ds.EnumValueMap();
                    _g40.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g40;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.celebration_rollup_stop, value40);
            var value41 = {
                soundId: fortuneCoinAssembly.SoundConstants.celebration_rollup_off,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g41 = new haxe.ds.EnumValueMap();
                    _g41.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g41;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.celebration_rollup_off, value41);
            var value42 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_music,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g42 = new haxe.ds.EnumValueMap();
                    _g42.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g42.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g42.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g42;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_music, value42);
            var value43 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_music,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g43 = new haxe.ds.EnumValueMap();
                    _g43.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g43.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g43.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g43;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_music_stop, value43);
            var value44 = {
                soundId: fortuneCoinAssembly.SoundConstants.freegame_music,
                action: components.gamecontroller.controllers.SoundAction.FADE_OUT,
                constants: (function($this) {
                    var $r;
                    var _g44 = new haxe.ds.EnumValueMap();
                    _g44.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g44.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    _g44.set(components.gamecontroller.constants.SoundFlags.STAGE, "FreeSpin");
                    $r = _g44;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.freegame_music_fade_out, value44);
            var value45 = {
                soundId: fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g45 = new haxe.ds.EnumValueMap();
                    _g45.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g45.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    $r = _g45;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music, value45);
            var value46 = {
                soundId: fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g46 = new haxe.ds.EnumValueMap();
                    _g46.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g46.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    $r = _g46;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.pre_picker_bonus_music_stop, value46);
            var value47 = {
                soundId: fortuneCoinAssembly.SoundConstants.picker_bonus_music,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g47 = new haxe.ds.EnumValueMap();
                    _g47.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g47.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    $r = _g47;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false,
                onComplete: fortuneCoinAssembly.SoundConstants.picker_bonus_music
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.picker_bonus_music, value47);
            var value48 = {
                soundId: fortuneCoinAssembly.SoundConstants.picker_bonus_music,
                action: components.gamecontroller.controllers.SoundAction.STOP,
                constants: (function($this) {
                    var $r;
                    var _g48 = new haxe.ds.EnumValueMap();
                    _g48.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    _g48.set(components.gamecontroller.constants.SoundFlags.ACTIVITY, true);
                    $r = _g48;
                    return $r;
                }(this)),
                volume: 0.5,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.picker_bonus_music_stop, value48);
            var value49 = {
                soundId: fortuneCoinAssembly.SoundConstants.paytable_open,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g49 = new haxe.ds.EnumValueMap();
                    _g49.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g49.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g49;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.paytable_open, value49);
            var value50 = {
                soundId: fortuneCoinAssembly.SoundConstants.paytable_close,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g50 = new haxe.ds.EnumValueMap();
                    _g50.set(components.gamecontroller.constants.SoundFlags.STAGE, "BaseGame");
                    _g50.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g50;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.paytable_close, value50);
            var value51 = {
                soundId: fortuneCoinAssembly.SoundConstants.maxi_tracer_level01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g51 = new haxe.ds.EnumValueMap();
                    _g51.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g51;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.maxi_tracer_level01, value51);
            var value52 = {
                soundId: fortuneCoinAssembly.SoundConstants.maxi_tracer_level02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g52 = new haxe.ds.EnumValueMap();
                    _g52.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g52;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.maxi_tracer_level02, value52);
            var value53 = {
                soundId: fortuneCoinAssembly.SoundConstants.maxi_tracer_win,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g53 = new haxe.ds.EnumValueMap();
                    _g53.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g53;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.maxi_tracer_win, value53);
            var value54 = {
                soundId: fortuneCoinAssembly.SoundConstants.grand_tracer_level01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g54 = new haxe.ds.EnumValueMap();
                    _g54.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g54;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.grand_tracer_level01, value54);
            var value55 = {
                soundId: fortuneCoinAssembly.SoundConstants.grand_tracer_level02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g55 = new haxe.ds.EnumValueMap();
                    _g55.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g55;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.grand_tracer_level02, value55);
            var value56 = {
                soundId: fortuneCoinAssembly.SoundConstants.grand_tracer_win,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g56 = new haxe.ds.EnumValueMap();
                    _g56.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g56;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.grand_tracer_win, value56);
            var value57 = {
                soundId: fortuneCoinAssembly.SoundConstants.minor_tracer_level01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g57 = new haxe.ds.EnumValueMap();
                    _g57.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g57;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.minor_tracer_level01, value57);
            var value58 = {
                soundId: fortuneCoinAssembly.SoundConstants.minor_tracer_level02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g58 = new haxe.ds.EnumValueMap();
                    _g58.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g58;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.minor_tracer_level02, value58);
            var value59 = {
                soundId: fortuneCoinAssembly.SoundConstants.minor_tracer_win,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g59 = new haxe.ds.EnumValueMap();
                    _g59.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g59;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.minor_tracer_win, value59);
            var value60 = {
                soundId: fortuneCoinAssembly.SoundConstants.mini_tracer_level01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g60 = new haxe.ds.EnumValueMap();
                    _g60.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g60;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.mini_tracer_level01, value60);
            var value61 = {
                soundId: fortuneCoinAssembly.SoundConstants.mini_tracer_level02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g61 = new haxe.ds.EnumValueMap();
                    _g61.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g61;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.mini_tracer_level02, value61);
            var value62 = {
                soundId: fortuneCoinAssembly.SoundConstants.mini_tracer_win,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g62 = new haxe.ds.EnumValueMap();
                    _g62.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g62;
                    return $r;
                }(this)),
                volume: 0,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.mini_tracer_win, value62);
            var value63 = {
                soundId: fortuneCoinAssembly.SoundConstants.bet_up,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g63 = new haxe.ds.EnumValueMap();
                    _g63.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g63;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.bet_up, value63);
            var value64 = {
                soundId: fortuneCoinAssembly.SoundConstants.bet_down,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g64 = new haxe.ds.EnumValueMap();
                    _g64.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g64;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.bet_down, value64);
            var value65 = {
                soundId: fortuneCoinAssembly.SoundConstants.bet_max,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g65 = new haxe.ds.EnumValueMap();
                    _g65.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g65;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.bet_max, value65);
            var value66 = {
                soundId: fortuneCoinAssembly.SoundConstants.award_all,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g66 = new haxe.ds.EnumValueMap();
                    _g66.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g66;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.award_all, value66);
            var value67 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_turn01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g67 = new haxe.ds.EnumValueMap();
                    _g67.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g67;
                    return $r;
                }(this)),
                isPlaying: false,
                onComplete: fortuneCoinAssembly.SoundConstants.coin_fly_up01
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_turn01, value67);
            var value68 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_fly_up01,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g68 = new haxe.ds.EnumValueMap();
                    _g68.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g68;
                    return $r;
                }(this)),
                isPlaying: false,
                onComplete: fortuneCoinAssembly.SoundConstants.coin_hit02
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_fly_up01, value68);
            var value69 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_hit02,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g69 = new haxe.ds.EnumValueMap();
                    _g69.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g69;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_hit02, value69);
            var value70 = {
                soundId: fortuneCoinAssembly.SoundConstants.bonus_transition_in_out,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g70 = new haxe.ds.EnumValueMap();
                    _g70.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g70;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.bonus_transition_in_out, value70);
            var value71 = {
                soundId: fortuneCoinAssembly.SoundConstants.boost,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g71 = new haxe.ds.EnumValueMap();
                    _g71.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g71;
                    return $r;
                }(this)),
                volume: 1,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.boost, value71);
            var value72 = {
                soundId: fortuneCoinAssembly.SoundConstants.special_coins,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g72 = new haxe.ds.EnumValueMap();
                    _g72.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g72;
                    return $r;
                }(this)),
                volume: 1,
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.special_coins, value72);
            var value73 = {
                soundId: fortuneCoinAssembly.SoundConstants.minors_removed,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g73 = new haxe.ds.EnumValueMap();
                    _g73.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g73;
                    return $r;
                }(this)),
                volume: 1,
                isPlaying: false,
                onComplete: fortuneCoinAssembly.SoundConstants.freegame_music
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.minors_removed, value73);
            var value74 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_reveal_low,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g74 = new haxe.ds.EnumValueMap();
                    _g74.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g74;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_reveal_low, value74);
            var value75 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_reveal_mid,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g75 = new haxe.ds.EnumValueMap();
                    _g75.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g75;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_reveal_mid, value75);
            var value76 = {
                soundId: fortuneCoinAssembly.SoundConstants.coin_reveal_high,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g76 = new haxe.ds.EnumValueMap();
                    _g76.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g76;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.coin_reveal_high, value76);
            var value77 = {
                soundId: fortuneCoinAssembly.SoundConstants.autoplay_on,
                action: components.gamecontroller.controllers.SoundAction.PLAY,
                constants: (function($this) {
                    var $r;
                    var _g77 = new haxe.ds.EnumValueMap();
                    _g77.set(components.gamecontroller.constants.SoundFlags.MUSIC_STATE, true);
                    $r = _g77;
                    return $r;
                }(this)),
                isPlaying: false
            };
            this.soundScenarios.set(fortuneCoinAssembly.SoundConstants.autoplay_on, value77);
        };
        fortuneCoinAssembly.SoundController.__name__ = ["fortuneCoinAssembly", "SoundController"];
        fortuneCoinAssembly.SoundController.prototype.soundScenarios = null;
        fortuneCoinAssembly.SoundController.prototype.gameConstants = null;
        fortuneCoinAssembly.SoundController.prototype.soundPort = null;
        fortuneCoinAssembly.SoundController.prototype.stepTime = null;
        fortuneCoinAssembly.SoundController.prototype.currentVolume = null;
        fortuneCoinAssembly.SoundController.prototype.volStep = null;
        fortuneCoinAssembly.SoundController.prototype.activate = function(scenarioId) {
            haxe.Log.trace("[SoundController] [activate] " + "soundId: " + _hcmn_.Std.string(scenarioId), {
                fileName: "SoundController.hx",
                lineNumber: 151,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "activate"
            });
            var action = this.soundScenarios.get(scenarioId).action;
            var soundId;
            var e = this.soundScenarios.get(scenarioId).soundId;
            soundId = e[0];
            var volume = this.soundScenarios.get(scenarioId).volume;
            haxe.Log.trace("[SoundController] [activate] " + "gameConstants: " + this.gameConstants.toString(), {
                fileName: "SoundController.hx",
                lineNumber: 156,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "activate",
                customParams: [" scenarios: ", this.soundScenarios.get(scenarioId).constants]
            });
            var enabled = true;
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.soundScenarios.get(scenarioId).constants;
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (this.gameConstants.exists(key)) {
                    if (this.gameConstants.get(key) != (function($this) {
                            var $r;
                            var this2 = $this.soundScenarios.get(scenarioId).constants;
                            $r = this2.get(key);
                            return $r;
                        }(this))) {
                        enabled = false;
                        break;
                    }
                }
            }
            if (enabled) {
                if (action == components.gamecontroller.controllers.SoundAction.PLAY) {
                    haxe.Log.trace("[SoundController] [activate] " + "scenarioId: PLAY " + _hcmn_.Std.string(scenarioId), {
                        fileName: "SoundController.hx",
                        lineNumber: 174,
                        className: "components.gamecontroller.controllers.SoundController",
                        methodName: "activate",
                        customParams: [this.soundScenarios.get(scenarioId).isPlaying]
                    });
                    if (!this.soundScenarios.get(scenarioId).isPlaying) {
                        this.soundScenarios.get(scenarioId).isPlaying = true;
                        this.stopSound(soundId);
                        this.soundPort.play().publish(soundId);
                        this.setVolume(soundId, volume, 0);
                    }
                } else if (action == components.gamecontroller.controllers.SoundAction.STOP) {
                    haxe.Log.trace("[SoundController] [activate] " + "scenarioId: STOP " + _hcmn_.Std.string(scenarioId), {
                        fileName: "SoundController.hx",
                        lineNumber: 185,
                        className: "components.gamecontroller.controllers.SoundController",
                        methodName: "activate"
                    });
                    this.stopSound(soundId);
                } else if (action == components.gamecontroller.controllers.SoundAction.FADE_OUT) {
                    this.stopSound(soundId);
                    if (this.soundScenarios.get(scenarioId).isPlaying) {
                        haxe.Log.trace("[SoundController] [activate] " + "scenarioId: FADEOUT " + _hcmn_.Std.string(scenarioId), {
                            fileName: "SoundController.hx",
                            lineNumber: 195,
                            className: "components.gamecontroller.controllers.SoundController",
                            methodName: "activate"
                        });
                        this.soundPort.fadeOut().publish(new soundManagerApi.SoundActionProperties(soundId, 1000));
                    }
                } else if (action == components.gamecontroller.controllers.SoundAction.FADE_IN) {
                    this.stopSound(soundId);
                    if (this.soundScenarios.get(scenarioId).isPlaying) {
                        haxe.Log.trace("[SoundController] [activate] " + "scenarioId: FADEIN " + _hcmn_.Std.string(scenarioId), {
                            fileName: "SoundController.hx",
                            lineNumber: 206,
                            className: "components.gamecontroller.controllers.SoundController",
                            methodName: "activate"
                        });
                        this.soundPort.fadeIn().publish(new soundManagerApi.SoundActionProperties(soundId, 1000));
                    }
                }
            }
        };
        fortuneCoinAssembly.SoundController.prototype.onSoundCompleted = function(e) {
            var soundId = e.getPayload();
            var scenarioId = _hcmn_.Type.createEnum(fortuneCoinAssembly.SoundConstants, soundId);
            haxe.Log.trace("[SoundController] [onSoundCompleted] " + "soundId: " + e.getPayload(), {
                fileName: "SoundController.hx",
                lineNumber: 219,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "onSoundCompleted"
            });
            this.stopSound(soundId);
            if (this.soundScenarios.exists(scenarioId)) {
                if (this.soundScenarios.get(scenarioId).onComplete != null) {
                    var onCompleteScenario = this.soundScenarios.get(scenarioId).onComplete;
                    if (!this.soundScenarios.get(scenarioId).isPlaying) {
                        this.soundScenarios.get(scenarioId).isPlaying = true;
                        this.activate(onCompleteScenario);
                    }
                }
                this.soundScenarios.get(scenarioId).isPlaying = false;
            }
        };
        fortuneCoinAssembly.SoundController.prototype.setConstant = function(key, value) {
            haxe.Log.trace("[SoundController] [setConstant] ", {
                fileName: "SoundController.hx",
                lineNumber: 240,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "setConstant",
                customParams: [key, value]
            });
            var value1 = value;
            this.gameConstants.set(key, value1);
        };
        fortuneCoinAssembly.SoundController.prototype.updateCondition = function(scenarioId, flag, value) {
            haxe.Log.trace("[SoundController] [updateCondition] ", {
                fileName: "SoundController.hx",
                lineNumber: 246,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "updateCondition",
                customParams: [scenarioId, flag, value]
            });
            var this1 = this.soundScenarios.get(scenarioId).constants;
            var value1 = value;
            this1.set(flag, value1);
        };
        fortuneCoinAssembly.SoundController.prototype.decreaseVolume = function(x, y) {
            haxe.Log.trace("[SoundController] [decreaseVolume] ", {
                fileName: "SoundController.hx",
                lineNumber: 252,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "decreaseVolume"
            });
            this.soundPort.volume().publish(new soundManagerApi.SoundVolumeData(x, y));
        };
        fortuneCoinAssembly.SoundController.prototype.increaseVolume = function(x, y) {
            haxe.Log.trace("[SoundController] [increaseVolume] ", {
                fileName: "SoundController.hx",
                lineNumber: 258,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "increaseVolume"
            });
            var soundId;
            var e = this.soundScenarios.get(x).soundId;
            soundId = e[0];
            this.soundPort.volume().publish(new soundManagerApi.SoundVolumeData(soundId, y));
        };
        fortuneCoinAssembly.SoundController.prototype.setOn = function() {
            haxe.Log.trace("[SoundController] [setOn] ", {
                fileName: "SoundController.hx",
                lineNumber: 265,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "setOn"
            });
            this.soundPort.unmuteAll().publish(null);
        };
        fortuneCoinAssembly.SoundController.prototype.setOff = function() {
            haxe.Log.trace("[SoundController] [setOff] ", {
                fileName: "SoundController.hx",
                lineNumber: 271,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "setOff"
            });
            this.soundPort.muteAll().publish(null);
        };
        fortuneCoinAssembly.SoundController.prototype.muteSound = function(sound) {
            haxe.Log.trace("[SoundController] [muteSound] " + sound, {
                fileName: "SoundController.hx",
                lineNumber: 277,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "muteSound"
            });
            this.soundPort.mute().publish(sound);
        };
        fortuneCoinAssembly.SoundController.prototype.stopSound = function(sound) {
            haxe.Log.trace("[SoundController] [stopSound] " + "sound: " + sound, {
                fileName: "SoundController.hx",
                lineNumber: 283,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "stopSound"
            });
            this.soundPort.stop().publish(sound);
        };
        fortuneCoinAssembly.SoundController.prototype.stopSoundScenario = function(sound) {
            haxe.Log.trace("[SoundController] [stopSound2] " + "sound: " + _hcmn_.Std.string(sound), {
                fileName: "SoundController.hx",
                lineNumber: 289,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "stopSoundScenario"
            });
            var soundId;
            var e = this.soundScenarios.get(sound).soundId;
            soundId = e[0];
            this.soundPort.stop().publish(soundId);
        };
        fortuneCoinAssembly.SoundController.prototype.playSound = function(sound) {
            haxe.Log.trace("[SoundController] [playSound] " + "sound: " + sound, {
                fileName: "SoundController.hx",
                lineNumber: 296,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "playSound"
            });
            this.soundPort.play().publish(sound);
        };
        fortuneCoinAssembly.SoundController.prototype.setVolume = function(sound, volume, time) {
            haxe.Log.trace("[SoundController] [setVolume] " + "sound: " + sound, {
                fileName: "SoundController.hx",
                lineNumber: 302,
                className: "components.gamecontroller.controllers.SoundController",
                methodName: "setVolume",
                customParams: [volume, time]
            });
            this.soundPort.volume().publish(new soundManagerApi.SoundVolumeData(sound, volume));
        };
        fortuneCoinAssembly.SoundController.prototype.setFadeOut = function(soundId) {
            this.soundPort.fadeOut().publish(new soundManagerApi.SoundActionProperties(soundId, 1000));
        };
        fortuneCoinAssembly.SoundController.prototype.customFadeOut = function(sound, currentVol) {
            var soundId;
            var e = this.soundScenarios.get(sound).soundId;
            soundId = e[0];
            this.stepTime = 350;
            this.currentVolume = currentVol;
            this.volStep = 0.1;
            this.fadeOut(soundId, currentVol);
        };
        fortuneCoinAssembly.SoundController.prototype.fadeOut = function(sound, currVol) {
            var _g = this;
            if (this.currentVolume > 0) _hcmn_.haxe_Timer.delay(function() {
                _g.currentVolume -= _g.volStep;
                _g.soundPort.volume().publish(new soundManagerApi.SoundVolumeData(sound, _g.currentVolume));
                _g.fadeOut(sound, currVol);
            }, this.stepTime);
            else {
                this.soundPort.stop().publish(sound);
                this.soundPort.volume().publish(new soundManagerApi.SoundVolumeData(sound, currVol));
            }
        };
        fortuneCoinAssembly.SoundController.getInstance = function() {
            if (fortuneCoinAssembly.SoundController.instance == null) throw new Error("SoundController singleton instance not created!");
            return fortuneCoinAssembly.SoundController.instance;
        };
        fortuneCoinAssembly.SoundController.prototype.__class__ = fortuneCoinAssembly.SoundController;
        fortuneCoinAssembly.StakeItemController = function(gameController) {
            haxe.Log.trace("ConsoleServiceController", {
                fileName: "StakeItemController.hx",
                lineNumber: 56,
                className: "components.gamecontroller.controllers.StakeItemController",
                methodName: "new"
            });
            this.gameController = gameController;
        };
        fortuneCoinAssembly.StakeItemController.__name__ = ["fortuneCoinAssembly", "StakeItemController"];
        fortuneCoinAssembly.StakeItemController.prototype.gameController = null;
        fortuneCoinAssembly.StakeItemController.prototype.numberOfLines = null;
        fortuneCoinAssembly.StakeItemController.prototype.betPerLine = null;
        fortuneCoinAssembly.StakeItemController.prototype.sideBet = null;
        fortuneCoinAssembly.StakeItemController.prototype.totalBet = null;
        fortuneCoinAssembly.StakeItemController.prototype.prevNumberOfLines = null;
        fortuneCoinAssembly.StakeItemController.prototype.prevBetPerLine = null;
        fortuneCoinAssembly.StakeItemController.prototype.prevSideBet = null;
        fortuneCoinAssembly.StakeItemController.prototype.prevTotalBet = null;
        fortuneCoinAssembly.StakeItemController.prototype.betMultiplierSteps = null;
        fortuneCoinAssembly.StakeItemController.prototype.betPerLineArray = null;
        fortuneCoinAssembly.StakeItemController.prototype.betPerLineMap = null;
        fortuneCoinAssembly.StakeItemController.prototype.lineSteps = null;
        fortuneCoinAssembly.StakeItemController.prototype.sideBetSteps = null;
        fortuneCoinAssembly.StakeItemController.prototype.totalBetsForSelectedLines = null;
        fortuneCoinAssembly.StakeItemController.prototype.totalBetsForSelectedBetPerLine = null;
        fortuneCoinAssembly.StakeItemController.prototype.getNumberOfLines = function() {
            return this.numberOfLines;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getBetPerLine = function() {
            return this.betPerLine;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getPatternsBet = function() {
            return this.numberOfLines + this.sideBet;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getPrevPatternsBet = function() {
            return this.prevNumberOfLines + this.prevSideBet;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getBetPerPattern = function() {
            return this.betPerLineMap.get(this.betPerLine);
        };
        fortuneCoinAssembly.StakeItemController.prototype.getPrevBetPerPattern = function() {
            return this.betPerLineMap.get(this.prevBetPerLine);
        };
        fortuneCoinAssembly.StakeItemController.prototype.getTotalBet = function() {
            return this.totalBet;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getPrevTotalBet = function() {
            return this.prevTotalBet;
        };
        fortuneCoinAssembly.StakeItemController.prototype.getStakeItem = function() {
            return new slotParserApi.StakeItem(this.numberOfLines, this.betPerLine, this.totalBet, this.sideBet);
        };
        fortuneCoinAssembly.StakeItemController.prototype.setStakeItem = function(stake) {
            this.numberOfLines = stake.numberOfLines;
            this.betPerLine = stake.betPerLine;
            this.sideBet = stake.sideBet;
            this.totalBet = stake.totalBet;
            this.prevNumberOfLines = stake.numberOfLines;
            this.prevBetPerLine = stake.betPerLine;
            this.prevSideBet = stake.sideBet;
            this.prevTotalBet = stake.totalBet;
            this.betMultiplierSteps = fortuneCoinAssembly.GameData.riscControlSettings.betMultiplierSteps;
            this.betPerLineArray = fortuneCoinAssembly.GameData.riscControlSettings.betPerLineArray;
            this.betPerLineMap = fortuneCoinAssembly.GameData.riscControlSettings.betPerLineMap;
            this.lineSteps = fortuneCoinAssembly.GameData.riscControlSettings.lineSteps;
            this.sideBetSteps = fortuneCoinAssembly.GameData.riscControlSettings.sideBetSteps;
            this.totalBetsForSelectedLines = fortuneCoinAssembly.GameData.riscControlSettings.totalBetsForSelectedLines;
            this.totalBetsForSelectedBetPerLine = fortuneCoinAssembly.GameData.riscControlSettings.totalBetsForSelectedBetPerLine;
            fortuneCoinAssembly.GameData.betPerLine = this.betPerLine;
            fortuneCoinAssembly.GameData.numberOfLines = this.numberOfLines;
            fortuneCoinAssembly.GameData.sideBet = this.sideBet;
        };
        fortuneCoinAssembly.StakeItemController.prototype.setNumberOfLines = function(value) {
            haxe.Log.trace("StakeItemController.setNumberOfLines numberOfLines: " + value, {
                fileName: "StakeItemController.hx",
                lineNumber: 137,
                className: "components.gamecontroller.controllers.StakeItemController",
                methodName: "setNumberOfLines"
            });
            this.prevNumberOfLines = this.numberOfLines;
            this.numberOfLines = value;
            fortuneCoinAssembly.GameData.numberOfLines = value;
            this.gameController.updateJackpotValues();
            var _g1 = 0;
            var _g = this.totalBetsForSelectedBetPerLine.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (this.totalBetsForSelectedBetPerLine[i][1] == value) this.setTotalBet(this.totalBetsForSelectedBetPerLine[i][0]);
            }
        };
        fortuneCoinAssembly.StakeItemController.prototype.setBetPerLine = function(value) {
            haxe.Log.trace("StakeItemController.setBetPerLine betPerLine: " + value, {
                fileName: "StakeItemController.hx",
                lineNumber: 156,
                className: "components.gamecontroller.controllers.StakeItemController",
                methodName: "setBetPerLine"
            });
            this.prevBetPerLine = this.betPerLine;
            this.betPerLine = value;
            fortuneCoinAssembly.GameData.betPerLine = value;
            this.gameController.updateJackpotValues();
            var _g1 = 0;
            var _g = this.totalBetsForSelectedLines.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (this.totalBetsForSelectedLines[i][1] == value) this.setTotalBet(this.totalBetsForSelectedLines[i][0]);
            }
        };
        fortuneCoinAssembly.StakeItemController.prototype.setSideBet = function(value) {
            this.prevSideBet = this.sideBet;
            this.sideBet = value;
            fortuneCoinAssembly.GameData.sideBet = value;
        };
        fortuneCoinAssembly.StakeItemController.prototype.setTotalBet = function(value) {
            haxe.Log.trace("StakeItemController.setTotalBet totalBet: " + value, {
                fileName: "StakeItemController.hx",
                lineNumber: 183,
                className: "components.gamecontroller.controllers.StakeItemController",
                methodName: "setTotalBet"
            });
            this.prevTotalBet = this.totalBet;
            this.totalBet = value;
            this.gameController.betPanelController.changeStake(this.getStakeItem());
            if (fortuneCoinAssembly.ExternalService.isDesktop()) this.gameController.betPanelPort.getCoinValue().publish(fortuneCoinAssembly.ExternalService.moneyFormatter.format(fortuneCoinAssembly.GameData.betPerLine));
            this.gameController.consoleServiceController.changeStakeOptions();
        };
        fortuneCoinAssembly.StakeItemController.prototype.__class__ = fortuneCoinAssembly.StakeItemController;
        fortuneCoinAssembly.WinCycleController = function(gameController, reelsPort) {
            this.additionalLines = 0;
            this.totalLines = 0;
            this.currentLine = 0;
            this.winControllerPort = fortuneCoinAssembly.WinControllerPort.getInstance();
            this.gameController = gameController;
            if (fortuneCoinAssembly.WinCycleController.instance != null) throw new Error("WinCycleController instance already created!");
            this.reelsPort = reelsPort;
            fortuneCoinAssembly.WinCycleController.instance = this;
        };
        fortuneCoinAssembly.WinCycleController.__name__ = ["fortuneCoinAssembly", "WinCycleController"];
        fortuneCoinAssembly.WinCycleController.prototype.winControllerTimer = null;
        fortuneCoinAssembly.WinCycleController.prototype.winControllerPort = null;
        fortuneCoinAssembly.WinCycleController.prototype.reelsPort = null;
        fortuneCoinAssembly.WinCycleController.prototype.gameController = null;
        fortuneCoinAssembly.WinCycleController.prototype.activeWinCycleOutcome = null;
        fortuneCoinAssembly.WinCycleController.prototype.activeStage = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentLine = null;
        fortuneCoinAssembly.WinCycleController.prototype.totalLines = null;
        fortuneCoinAssembly.WinCycleController.prototype.additionalLines = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentWin = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentReelsInfo = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentReelsVisibility = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentWilds = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentScatters = null;
        fortuneCoinAssembly.WinCycleController.prototype.currentPayoutValues = null;
        fortuneCoinAssembly.WinCycleController.prototype.winCycleEndCallback = null;
        fortuneCoinAssembly.WinCycleController.prototype.initialize = function() {
            this.currentWin = [];
            this.currentReelsInfo = [];
            this.currentReelsVisibility = [];
            this.currentPayoutValues = [];
            this.currentWilds = [];
            this.currentScatters = [];
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfCollumns;
            while (_g1 < _g) {
                var i = _g1++;
                this.currentWin[i] = [];
                this.currentReelsInfo[i] = [];
                this.currentReelsVisibility[i] = [];
                this.currentPayoutValues[i] = [];
                this.currentScatters[i] = [];
                this.currentWilds[i] = [];
                var _g3 = 0;
                var _g2 = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfRows;
                while (_g3 < _g2) {
                    var j = _g3++;
                    this.currentWin[i][j] = "_";
                    this.currentReelsInfo[i][j] = "0";
                    this.currentReelsVisibility[i][j] = 0;
                    this.currentPayoutValues[i][j] = "_";
                    this.currentScatters[i][j] = "_";
                    this.currentWilds[i][j] = "_";
                }
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.startWinCycle = function(stage, payout, endCallback) {
            this.activeStage = stage;
            this.winCycleEndCallback = endCallback;
            switch (stage) {
                case "BaseGame":
                    this.activeWinCycleOutcome = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome;
                    break;
                case "FreeSpin":
                    this.activeWinCycleOutcome = fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome;
                    break;
            }
            this.setHighWinData(payout);
            this.resetReelsVisibility();
            this.totalLines = 0;
            this.currentLine = 0;
            this.additionalLines = 0;
            this.calculateAdditionalLines();
            if (this.activeWinCycleOutcome.lineWins != null) this.totalLines = this.activeWinCycleOutcome.lineWins.length;
            this.updateScatter(this.activeWinCycleOutcome);
            this.updateCurrentWin();
            this.showLineWin();
            this.winControllerTimer = new _hcmn_.haxe_Timer(1500);
            this.winControllerTimer.run = $bind(this, this.showLineWin);
        };
        fortuneCoinAssembly.WinCycleController.prototype.resetWinCycle = function() {
            if (this.winControllerTimer != null) {
                this.winControllerTimer.stop();
                this.winControllerTimer = null;
            }
            this.totalLines = 0;
            this.currentLine = 0;
            this.additionalLines = 0;
            this.resetReelsVisibility();
            this.winControllerPort.getHide().publish(fortuneCoinAssembly.WinControllerType.SYMBOLS);
            this.winControllerPort.getHide().publish(fortuneCoinAssembly.WinControllerType.FRAMES);
            this.winControllerPort.getHide().publish(fortuneCoinAssembly.WinControllerType.WIN_VALUE);
            this.winControllerPort.getHide().publish(fortuneCoinAssembly.WinControllerType.WILDS);
        };
        fortuneCoinAssembly.WinCycleController.prototype.resetScatters = function() {
            this.winControllerPort.getHide().publish(fortuneCoinAssembly.WinControllerType.SCATTERS);
        };
        fortuneCoinAssembly.WinCycleController.prototype.showLineWin = function() {
            this.resetReelsVisibility();
            if (this.currentLine >= this.totalLines + this.additionalLines) {
                if (this.winCycleEndCallback != null) {
                    this.winCycleEndCallback();
                    return;
                }
                this.currentLine = 0;
            }
            this.updateCurrentWin();
            this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.SYMBOLS, this.currentWin));
            this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.FRAMES, this.currentReelsInfo));
            this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.WIN_VALUE, this.currentPayoutValues));
            this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.WILDS, this.currentWilds));
            this.reelsPort.setReelCellsVisibility().publish(this.currentReelsVisibility);
            this.currentLine++;
        };
        fortuneCoinAssembly.WinCycleController.prototype.showScatterWins = function(reelId) {
            if (reelId == null) reelId = -1;
            haxe.Log.trace("[GameController] [showScatterWins] " + "GameData.currentScatters: " + _hcmn_.Std.string(this.currentScatters), {
                fileName: "WinCycleController.hx",
                lineNumber: 188,
                className: "components.gamecontroller.controllers.WinCycleController",
                methodName: "showScatterWins"
            });
            if (reelId < 0) {
                var _g1 = 0;
                var _g = this.currentScatters.length;
                while (_g1 < _g) {
                    var i = _g1++;
                    this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.SCATTERS, this.currentScatters, i));
                }
            } else this.winControllerPort.getShow().publish(new fortuneCoinAssembly.WinPayload(fortuneCoinAssembly.WinControllerType.SCATTERS, this.currentScatters, reelId));
        };
        fortuneCoinAssembly.WinCycleController.prototype.updateScatter = function(outcome) {
            if (outcome == null) return;
            if (outcome.reelPicture == null) return;
            if (outcome.reelPicture.reels == null) return;
            var reelsInfo = outcome.reelPicture.reels;
            var _g1 = 0;
            var _g = reelsInfo.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = reelsInfo[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    this.currentScatters[i][j] = "_";
                    if (reelsInfo[i][j] == fortuneCoinAssembly.GameData.scatterId) {
                        this.currentReelsVisibility[i][j] = 1;
                        this.currentScatters[i][j] = fortuneCoinAssembly.GameData.scatterId;
                    }
                }
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.calculateAdditionalLines = function() {
            haxe.Log.trace("[im] calculateLineCount: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.jackpotAward) + ", " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout, {
                fileName: "WinCycleController.hx",
                lineNumber: 230,
                className: "components.gamecontroller.controllers.WinCycleController",
                methodName: "calculateAdditionalLines"
            });
            if (this.activeStage == "BaseGame") {
                if (fortuneCoinAssembly.GameData.jackpotAward != null && fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout)) {
                    this.additionalLines += 1;
                    haxe.Log.trace("[im] calculateLineCount (BG): +1 additional line for jackpotAward", {
                        fileName: "WinCycleController.hx",
                        lineNumber: 236,
                        className: "components.gamecontroller.controllers.WinCycleController",
                        methodName: "calculateAdditionalLines",
                        customParams: [this.additionalLines]
                    });
                }
                if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin != null && (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout) || !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.scatterWin.awardBG))) {
                    this.additionalLines += 1;
                    haxe.Log.trace("[im] calculateLineCount (BG): +1 additional line for freeSpin", {
                        fileName: "WinCycleController.hx",
                        lineNumber: 241,
                        className: "components.gamecontroller.controllers.WinCycleController",
                        methodName: "calculateAdditionalLines",
                        customParams: [this.additionalLines]
                    });
                }
            } else if (this.activeStage == "FreeSpin") {
                if (fortuneCoinAssembly.GameData.fsJackpotAward != null && fortuneCoinAssembly.GameData.fsJackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.fsJackpotAward.strippedTotalPayout)) {
                    this.additionalLines += 1;
                    haxe.Log.trace("[im] calculateLineCount (FS): +1 additional line for jackpotAward", {
                        fileName: "WinCycleController.hx",
                        lineNumber: 249,
                        className: "components.gamecontroller.controllers.WinCycleController",
                        methodName: "calculateAdditionalLines",
                        customParams: [this.additionalLines]
                    });
                }
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.scatterWin.awardFS) && fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered) {
                    this.additionalLines += 1;
                    haxe.Log.trace("[im] calculateLineCount (FS): +1 additional line for freeSpin", {
                        fileName: "WinCycleController.hx",
                        lineNumber: 254,
                        className: "components.gamecontroller.controllers.WinCycleController",
                        methodName: "calculateAdditionalLines",
                        customParams: [this.additionalLines]
                    });
                }
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.updateCurrentWin = function() {
            this.resetCurrentWinData();
            this.updateScatter(this.activeWinCycleOutcome);
            var reelPicture = this.activeWinCycleOutcome.reelPicture.reels;
            var pickerWinLine = -1;
            var fsWinLine = -1;
            var selectedJackpotAward = fortuneCoinAssembly.GameData.jackpotAward;
            if (this.additionalLines == 2) {
                if (fortuneCoinAssembly.GameData.jackpotAward != null && fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout)) pickerWinLine = this.totalLines;
                if (this.activeStage == "BaseGame" && fortuneCoinAssembly.GameData.spinOutcome.freeSpin != null && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout)) fsWinLine = this.totalLines + 1;
            } else if (this.additionalLines == 1) {
                if (this.activeStage == "BaseGame" && fortuneCoinAssembly.GameData.jackpotAward != null && fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.jackpotAward.strippedTotalPayout)) pickerWinLine = this.totalLines;
                else if (this.activeStage == "FreeSpin" && fortuneCoinAssembly.GameData.fsJackpotAward != null && fortuneCoinAssembly.GameData.fsJackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.fsJackpotAward.strippedTotalPayout)) {
                    pickerWinLine = this.totalLines;
                    selectedJackpotAward = fortuneCoinAssembly.GameData.fsJackpotAward;
                }
                if (this.activeStage == "BaseGame" && fortuneCoinAssembly.GameData.spinOutcome.freeSpin != null && (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout) || !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.scatterWin.awardBG))) fsWinLine = this.totalLines;
                if (this.activeStage == "FreeSpin" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.scatterWin.awardFS)) fsWinLine = this.totalLines;
            }
            var _g1 = 0;
            var _g = reelPicture.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = reelPicture[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    this.currentPayoutValues[i][j] = "_";
                }
            }
            if (pickerWinLine == this.currentLine) this.populateCoinBonusWinLine(selectedJackpotAward.strippedTotalPayout, "prog");
            if (fsWinLine == this.currentLine) {
                if (this.activeStage == "BaseGame") this.populateScatterBonusWinLine(new money.Money(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout).add(new money.Money(fortuneCoinAssembly.GameData.scatterWin.awardBG)).value);
                else this.populateScatterBonusWinLine(fortuneCoinAssembly.GameData.scatterWin.awardFS);
                this.populateCoinBonusWinLine(fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout, "fs");
            }
            if (this.activeWinCycleOutcome.lineWins != null) {
                if (this.activeWinCycleOutcome.lineWins.length >= 1 && this.currentLine < this.activeWinCycleOutcome.lineWins.length) {
                    var reelsInfo = this.activeWinCycleOutcome.lineWins[this.currentLine].winPath.reelsInfo;
                    var _g11 = 0;
                    var _g4 = reelPicture.length;
                    while (_g11 < _g4) {
                        var i1 = _g11++;
                        var _g31 = 0;
                        var _g21 = reelPicture[i1].length;
                        while (_g31 < _g21) {
                            var j1 = _g31++;
                            this.currentPayoutValues[i1][j1] = "_";
                            this.currentReelsInfo[i1][j1] = _hcmn_.Std.string(reelsInfo[i1][j1]);
                            if (this.activeWinCycleOutcome.lineWins[this.currentLine].payout != null) {
                                if (reelsInfo[i1][j1] == 1) {
                                    this.currentPayoutValues[i1][j1] = this.activeWinCycleOutcome.lineWins[this.currentLine].payout;
                                    this.currentReelsVisibility[i1][j1] = 1;
                                    if (reelPicture[i1][j1] == fortuneCoinAssembly.GameData.wildId) {
                                        this.currentWilds[i1][j1] = fortuneCoinAssembly.GameData.wildId;
                                        this.currentWin[i1][j1] = "_";
                                    } else this.currentWin[i1][j1] = reelPicture[i1][j1];
                                } else {
                                    this.currentWin[i1][j1] = "_";
                                    this.currentReelsVisibility[i1][j1] = 0;
                                    if (reelPicture[i1][j1] == fortuneCoinAssembly.GameData.wildId) {
                                        this.currentWilds[i1][j1] = "_";
                                        this.currentReelsVisibility[i1][j1] = 0;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            var _g12 = 0;
            var _g5 = this.activeWinCycleOutcome.reelPicture.reels.length;
            while (_g12 < _g5) {
                var i2 = _g12++;
                var _g32 = 0;
                var _g22 = this.activeWinCycleOutcome.reelPicture.reels[i2].length;
                while (_g32 < _g22) {
                    var j2 = _g32++;
                    if (this.activeWinCycleOutcome.reelPicture.reels[i2][j2] == "c01") this.currentReelsVisibility[i2][j2] = 1;
                    if (reelPicture[i2][j2] == fortuneCoinAssembly.GameData.scatterId) {
                        this.currentWin[i2][j2] = "_";
                        this.currentReelsVisibility[i2][j2] = 0;
                    }
                }
            }
            haxe.Log.trace("[GameData] [updateCurrentWin] " + "currentWin: " + _hcmn_.Std.string(this.currentWin), {
                fileName: "WinCycleController.hx",
                lineNumber: 409,
                className: "components.gamecontroller.controllers.WinCycleController",
                methodName: "updateCurrentWin",
                customParams: ["currentReelsInfo: " + _hcmn_.Std.string(this.currentReelsInfo), "currentPayoutValues: " + _hcmn_.Std.string(this.currentPayoutValues), "currentScatters: " + _hcmn_.Std.string(this.currentScatters), "currentWilds: " + _hcmn_.Std.string(this.currentWilds), "outcome.reelPicture.currentReelsVisibility: " + _hcmn_.Std.string(this.currentReelsVisibility)]
            });
        };
        fortuneCoinAssembly.WinCycleController.prototype.populateScatterBonusWinLine = function(payout) {
            var reelPicture = this.activeWinCycleOutcome.reelPicture.reels;
            if (this.currentScatters != null) {
                var nearestCenterPosition_x = 5;
                var nearestCenterPosition_y = 5;
                var _g1 = 0;
                var _g = this.currentScatters.length;
                while (_g1 < _g) {
                    var m = _g1++;
                    var _g3 = 0;
                    var _g2 = this.currentScatters[m].length;
                    while (_g3 < _g2) {
                        var n = _g3++;
                        if (this.currentScatters[m][n] != "_") {
                            if (_hcmn_.Math.abs(2 - nearestCenterPosition_x) > _hcmn_.Math.abs(2 - m)) {
                                nearestCenterPosition_x = m;
                                nearestCenterPosition_y = n;
                            }
                            this.currentReelsInfo[m][n] = "1";
                            this.currentWin[m][n] = fortuneCoinAssembly.GameData.scatterId;
                        }
                    }
                }
                if (nearestCenterPosition_x < 5) this.currentPayoutValues[nearestCenterPosition_x][nearestCenterPosition_y] = payout;
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.populateCoinBonusWinLine = function(payout, type) {
            var reelPicture = this.activeWinCycleOutcome.reelPicture.reels;
            var coinsFeature;
            if (this.activeStage == "BaseGame") coinsFeature = fortuneCoinAssembly.GameData.coinsFeatureBaseGame;
            else coinsFeature = fortuneCoinAssembly.GameData.coinsFeatureFreeSpin;
            if (coinsFeature != null) {
                var nearestCenterPosition_x = 5;
                var nearestCenterPosition_y = 5;
                var _g = 0;
                var _g1 = coinsFeature.choices;
                while (_g < _g1.length) {
                    var c = _g1[_g];
                    ++_g;
                    if (_hcmn_.StringTools.startsWith(c, "trigger") && _hcmn_.StringTools.startsWith(c.split(",")[1], type)) {
                        var positionString = c.split(",")[2];
                        var targetPosition = positionString.substring(positionString.indexOf("C") + 1, positionString.indexOf("R"));
                        var currentPosition = 0;
                        var _g3 = 0;
                        var _g2 = reelPicture.length;
                        while (_g3 < _g2) {
                            var m = _g3++;
                            var _g5 = 0;
                            var _g4 = reelPicture[m].length;
                            while (_g5 < _g4) {
                                var n = _g5++;
                                if (reelPicture[m][n] == "c01") {
                                    if (currentPosition == targetPosition) {
                                        if (_hcmn_.Math.abs(2 - nearestCenterPosition_x) > _hcmn_.Math.abs(2 - m)) {
                                            nearestCenterPosition_x = m;
                                            nearestCenterPosition_y = n;
                                        }
                                        this.currentReelsInfo[m][n] = "1";
                                    }
                                    currentPosition++;
                                }
                            }
                        }
                    }
                }
                if (nearestCenterPosition_x < 5) this.currentPayoutValues[nearestCenterPosition_x][nearestCenterPosition_y] = payout;
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.resetCurrentWinData = function() {
            haxe.Log.trace("[GameData] [resetCurrentWinData] resetCurrentWinData: ", {
                fileName: "WinCycleController.hx",
                lineNumber: 501,
                className: "components.gamecontroller.controllers.WinCycleController",
                methodName: "resetCurrentWinData"
            });
            var _g1 = 0;
            var _g = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfCollumns;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = fortuneCoinAssembly.GameData.slotDefinition.reelPictureSize.numberOfRows;
                while (_g3 < _g2) {
                    var j = _g3++;
                    this.currentWin[i][j] = "_";
                    this.currentReelsInfo[i][j] = "0";
                    this.currentReelsVisibility[i][j] = 0;
                    this.currentPayoutValues[i][j] = "_";
                    this.currentWilds[i][j] = "_";
                }
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.resetReelsVisibility = function() {
            var _g1 = 0;
            var _g = this.currentReelsVisibility.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = this.currentReelsVisibility[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    this.currentReelsVisibility[i][j] = 0;
                }
            }
        };
        fortuneCoinAssembly.WinCycleController.prototype.setHighWinData = function(payout) {
            if (fortuneCoinAssembly.GameData.rgPresentation) {
                var totalBet = _hcmn_.Std.parseFloat(new money.Money(this.gameController.stakeItemController.getTotalBet()).value);
                var totalPayout = parseFloat(payout);
                if (totalPayout <= totalBet) fortuneCoinAssembly.GameData.isHighWin = false;
                else fortuneCoinAssembly.GameData.isHighWin = true;
            } else fortuneCoinAssembly.GameData.isHighWin = true;
        };
        fortuneCoinAssembly.WinCycleController.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.WinCycleController.getInstance = function() {
            if (fortuneCoinAssembly.WinCycleController.instance == null) throw new Error("WinCycleController singleton instance not created!");
            return fortuneCoinAssembly.WinCycleController.instance;
        };
        fortuneCoinAssembly.WinCycleController.prototype.__class__ = fortuneCoinAssembly.WinCycleController;
        fortuneCoinAssembly.WinMeterController = function(port) {
            this.winCounter = 1;
            if (fortuneCoinAssembly.WinMeterController.instance != null) throw new Error("WinMeterController instance already created!");
            this.port = port;
            fortuneCoinAssembly.WinMeterController.instance = this;
            this.soundController = fortuneCoinAssembly.SoundController.getInstance();
            port.onCountUpFinished().subscribe($bind(this, this.handleCountUpWinFinished));
        };
        fortuneCoinAssembly.WinMeterController.__name__ = ["fortuneCoinAssembly", "WinMeterController"];
        fortuneCoinAssembly.WinMeterController.prototype.port = null;
        fortuneCoinAssembly.WinMeterController.prototype.payload = null;
        fortuneCoinAssembly.WinMeterController.prototype.winCounter = null;
        fortuneCoinAssembly.WinMeterController.prototype.soundController = null;
        fortuneCoinAssembly.WinMeterController.prototype.showWinCountUp = function(winAmount, bigWin, instantWin, startingAmount) {
            if (instantWin == null) instantWin = false;
            if (bigWin.winGroup < 2) startingAmount = winAmount;
            this.payload = new winMeterApi.WinMeterPayload(winAmount, bigWin.winSegments, instantWin, startingAmount);
            var request = new components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload(this.port.displayWin(), this.port.onDisplayWinFinished());
            return request.execute(this.payload);
        };
        fortuneCoinAssembly.WinMeterController.prototype.showMessage = function(message) {
            this.port.showMessage().publish(fortuneCoinAssembly.ExternalService.translationManager.stringLookup(message));
        };
        fortuneCoinAssembly.WinMeterController.prototype.stop = function() {
            this.port.displayWin().publish(new winMeterApi.WinMeterPayload(this.payload.winAmount, this.payload.winSegments, true));
            this.winCounter = 1;
        };
        fortuneCoinAssembly.WinMeterController.prototype.clear = function() {
            this.port.showMessage().publish("");
        };
        fortuneCoinAssembly.WinMeterController.prototype.handleCountUpWinFinished = function(e) {
            haxe.Log.trace("[GameController] [handleCountUpWinFinished]", {
                fileName: "WinMeterController.hx",
                lineNumber: 69,
                className: "components.gamecontroller.controllers.WinMeterController",
                methodName: "handleCountUpWinFinished"
            });
            if (this.detectCountUp(fortuneCoinAssembly.WinMeterController.winMapping(this.winCounter), fortuneCoinAssembly.WinMeterController.winMapping(fortuneCoinAssembly.GameData.winGroups))) {
                if ((function($this) {
                        var $r;
                        var a = fortuneCoinAssembly.WinMeterController.winMapping(fortuneCoinAssembly.GameData.winGroups);
                        $r = _hcmn_.Type.enumEq(a, fortuneCoinAssembly.WinEnum.BIG);
                        return $r;
                    }(this))) {
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_rollup_stop);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.celebration_rollup_off);
                    this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.basegame_music, 0.5);
                    this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.freegame_music, 0.5);
                } else {
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_stop);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_off);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_stop);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_picker_off);
                    this.soundController.activate(fortuneCoinAssembly.SoundConstants.freegame_rollup_stop);
                    this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.basegame_music, 0.5);
                    this.soundController.increaseVolume(fortuneCoinAssembly.SoundConstants.freegame_music, 0.5);
                }
            }
            this.winCounter += 2;
            fortuneCoinAssembly.GameData.inactivityCounter = 0;
        };
        fortuneCoinAssembly.WinMeterController.prototype.detectCountUp = function(winCounter, winGroup) {
            if (_hcmn_.Type.enumEq(winCounter, winGroup)) return true;
            else return false;
        };
        fortuneCoinAssembly.WinMeterController.getInstance = function() {
            if (fortuneCoinAssembly.WinMeterController.instance == null) throw new Error("WinMeterController singleton instance not created!");
            return fortuneCoinAssembly.WinMeterController.instance;
        };
        fortuneCoinAssembly.WinMeterController.winMapping = function(group) {
            if (group < 3) return fortuneCoinAssembly.WinEnum.LOW;
            if (group > 4) return fortuneCoinAssembly.WinEnum.BIG;
            else return fortuneCoinAssembly.WinEnum.MEDIUM;
        };
        fortuneCoinAssembly.WinMeterController.prototype.__class__ = fortuneCoinAssembly.WinMeterController;
        fortuneCoinAssembly.TopicToPromise = function(requestTopic, responseTopic) {
            this.responseTopic = responseTopic;
            this.requestTopic = requestTopic;
        };
        fortuneCoinAssembly.TopicToPromise.__name__ = ["fortuneCoinAssembly", "TopicToPromise"];
        fortuneCoinAssembly.TopicToPromise.prototype.requestTopic = null;
        fortuneCoinAssembly.TopicToPromise.prototype.responseTopic = null;
        fortuneCoinAssembly.TopicToPromise.prototype.subscription = null;
        fortuneCoinAssembly.TopicToPromise.prototype.resolve = null;
        fortuneCoinAssembly.TopicToPromise.prototype.beforeResolve = null;
        fortuneCoinAssembly.TopicToPromise.prototype.onBeforeResolve = function(callback) {
            this.beforeResolve = callback;
            return this;
        };
        fortuneCoinAssembly.TopicToPromise.prototype.execute = function(payload, delay) {
            var _g = this;
            var p = new Promise(function(resolve, reject) {
                _g.resolve = resolve;
                _g.subscription = _g.responseTopic.subscribe($bind(_g, _g.onResponse));
                if (delay == 0) _g.requestTopic.publish(payload);
                else _hcmn_.haxe_Timer.delay(function() {
                    _g.requestTopic.publish(payload);
                }, delay);
            });
            return p;
        };
        fortuneCoinAssembly.TopicToPromise.prototype.onResponse = function(e) {
            var payload = e.getPayload();
            this.subscription.unsubscribe();
            if (this.beforeResolve != null) this.beforeResolve(payload);
            this.resolve(payload);
            this.resolve = null;
        };
        fortuneCoinAssembly.TopicToPromise.prototype.__class__ = fortuneCoinAssembly.TopicToPromise;
        fortuneCoinAssembly.TopicToRequest = function(requestTopic, responseTopic) {
            this.responseTopic = responseTopic;
            this.requestTopic = requestTopic;
        };
        fortuneCoinAssembly.TopicToRequest.__name__ = ["fortuneCoinAssembly", "TopicToRequest"];
        fortuneCoinAssembly.TopicToRequest.prototype.requestTopic = null;
        fortuneCoinAssembly.TopicToRequest.prototype.responseTopic = null;
        fortuneCoinAssembly.TopicToRequest.prototype.subscription = null;
        fortuneCoinAssembly.TopicToRequest.prototype.resolve = null;
        fortuneCoinAssembly.TopicToRequest.prototype.beforeResolve = null;
        fortuneCoinAssembly.TopicToRequest.prototype.onBeforeResolve = function(callback) {
            this.beforeResolve = callback;
            return this;
        };
        fortuneCoinAssembly.TopicToRequest.prototype.execute = function(payload) {
            var _g = this;
            var p = new Promise(function(resolve, reject) {
                _g.resolve = resolve;
                _g.subscription = _g.responseTopic.subscribe($bind(_g, _g.onResponse));
                _g.requestTopic.publish(payload);
            });
            return p;
        };
        fortuneCoinAssembly.TopicToRequest.prototype.onResponse = function(e) {
            var payload = e.getPayload();
            this.subscription.unsubscribe();
            if (this.beforeResolve != null) this.beforeResolve(payload);
            this.resolve(payload);
            this.resolve = null;
        };
        fortuneCoinAssembly.TopicToRequest.prototype.__class__ = fortuneCoinAssembly.TopicToRequest;
        if (!components.gamecontroller.helpers) {
            components.gamecontroller.helpers = {};
        };
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload = function(requestTopic, responseTopic) {
            this.responseTopic = responseTopic;
            this.requestTopic = requestTopic;
        };
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.__name__ = ["components", "gamecontroller", "helpers", "TopicToRequest_winmeter_api_port_payload_WinMeterPayload"];
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.requestTopic = null;
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.responseTopic = null;
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.subscription = null;
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.resolve = null;
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.beforeResolve = null;
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.onBeforeResolve = function(callback) {
            this.beforeResolve = callback;
            return this;
        };
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.execute = function(payload) {
            var _g = this;
            var p = new Promise(function(resolve, reject) {
                _g.resolve = resolve;
                _g.subscription = _g.responseTopic.subscribe($bind(_g, _g.onResponse));
                _g.requestTopic.publish(payload);
            });
            return p;
        };
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.onResponse = function(e) {
            var payload = e.getPayload();
            this.subscription.unsubscribe();
            if (this.beforeResolve != null) this.beforeResolve(payload);
            this.resolve(payload);
            this.resolve = null;
        };
        components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload.prototype.__class__ = components.gamecontroller.helpers.TopicToRequest_winmeter_api_port_payload_WinMeterPayload;
        fortuneCoinAssembly.CoinsFeatureInfo = function(choices, totalPayout) {
            this.choices = choices;
            this.totalPayout = totalPayout;
        };
        fortuneCoinAssembly.CoinsFeatureInfo.__name__ = ["fortuneCoinAssembly", "CoinsFeatureInfo"];
        fortuneCoinAssembly.CoinsFeatureInfo.prototype.choices = null;
        fortuneCoinAssembly.CoinsFeatureInfo.prototype.totalPayout = null;
        fortuneCoinAssembly.CoinsFeatureInfo.prototype.__class__ = fortuneCoinAssembly.CoinsFeatureInfo;
        fortuneCoinAssembly.CoinsFeatureParser = function() {};
        fortuneCoinAssembly.CoinsFeatureParser.__name__ = ["fortuneCoinAssembly", "CoinsFeatureParser"];
        fortuneCoinAssembly.CoinsFeatureParser.parse = function(gameLogicResponse, name) {
            var fieldName = "CoinsFeature." + name + "Coins";
            var populationOutcomes = fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Extender.find(fortuneCoinAssembly.Extender.getFieldAsArray(gameLogicResponse, "PopulationOutcome"), "@name", fieldName), "Entry");
            var choices = fortuneCoinAssembly.CoinsFeatureParser.parseCoinsFeatureInfo(populationOutcomes);
            var totalPayout = _hcmn_.Std.parseInt(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.find(fortuneCoinAssembly.Extender.getFieldAsArray(gameLogicResponse, "PrizeOutcome"), "@name", "CoinsFeature.Credits"), "@totalPay"));
            haxe.Log.trace("[CoinsFeatureParser] [parse] parse " + _hcmn_.Std.string(choices), {
                fileName: "CoinsFeatureParser.hx",
                lineNumber: 15,
                className: "components.gamecontroller.parser.CoinsFeatureParser",
                methodName: "parse",
                customParams: [totalPayout]
            });
            return new fortuneCoinAssembly.CoinsFeatureInfo(choices, totalPayout);
        };
        fortuneCoinAssembly.CoinsFeatureParser.parseCoinsFeatureInfo = function(populationOutcomes) {
            var choices = [];
            var _g = 0;
            while (_g < populationOutcomes.length) {
                var populationOutcome = populationOutcomes[_g];
                ++_g;
                var positionPoint;
                var cell = fortuneCoinAssembly.Extender.getField(populationOutcome, "Cell");
                var name = fortuneCoinAssembly.Extender.getField(cell, "@name");
                var text = fortuneCoinAssembly.Extender.getField(cell, "#text");
                if (text.indexOf("trigger") >= 0) text += "," + _hcmn_.HxOverrides.substr(name, 2, 4);
                choices.push(text);
            }
            return choices;
        };
        fortuneCoinAssembly.CoinsFeatureParser.prototype.__class__ = fortuneCoinAssembly.CoinsFeatureParser;
        fortuneCoinAssembly.Extender = function() {};
        fortuneCoinAssembly.Extender.__name__ = ["fortuneCoinAssembly", "Extender"];
        fortuneCoinAssembly.Extender.getField = function(obj, field) {
            if (obj == null) return null;
            if (Object.prototype.hasOwnProperty.call(obj, field)) return _hcmn_.Reflect.field(obj, field);
            else return null;
        };
        fortuneCoinAssembly.Extender.getFieldAsArray = function(obj, path) {
            return fortuneCoinAssembly.Extender.makeArray(fortuneCoinAssembly.Extender.getField(obj, path));
        };
        fortuneCoinAssembly.Extender.makeArray = function(field) {
            if (field == null) return [];
            if ((field instanceof Array) && field.__enum__ == null) return field;
            else return [field];
        };
        fortuneCoinAssembly.Extender.find = function(arr, field, value) {
            var _g = 0;
            while (_g < arr.length) {
                var elem = arr[_g];
                ++_g;
                if (fortuneCoinAssembly.Extender.getField(elem, field) == value) return elem;
            }
            return null;
        };
        fortuneCoinAssembly.Extender.isEmpty = function(value) {
            if (value == null) return true;
            if (value.length == 0) return true;
            return false;
        };
        fortuneCoinAssembly.Extender.getBoolValue = function(obj) {
            if (obj != null) {
                if (typeof(obj) == "string") return obj.toLowerCase() == "true";
                return obj;
            }
            return false;
        };
        fortuneCoinAssembly.Extender.toIntArray = function(arr) {
            var out = [];
            var _g = 0;
            while (_g < arr.length) {
                var elem = arr[_g];
                ++_g;
                out.push(_hcmn_.Std.parseInt(elem));
            }
            return out;
        };
        fortuneCoinAssembly.Extender.toInt = function(obj) {
            if (obj == null) return null;
            return _hcmn_.Std.parseInt(obj);
        };
        fortuneCoinAssembly.Extender.clone = function(obj) {
            return JSON.parse(JSON.stringify(obj));
        };
        fortuneCoinAssembly.Extender.getBoolField = function(object, name, defaultValue) {
            var dynammicValue = fortuneCoinAssembly.Extender.getField(object, name);
            if (dynammicValue == null) return defaultValue;
            return _hcmn_.Std.string(dynammicValue).toLowerCase() == "true";
        };
        fortuneCoinAssembly.Extender.strToArray = function(str) {
            var _g = [];
            var _g1 = 0;
            var _g2 = str.split("");
            while (_g1 < _g2.length) {
                var $char = _g2[_g1];
                ++_g1;
                _g.push($char);
            }
            return _g;
        };
        fortuneCoinAssembly.Extender.parsePosition = function(name) {
            var pos = {
                x: _hcmn_.Std.parseInt(name.split("C")[1].split("R")[0]),
                y: _hcmn_.Std.parseInt(name.split("R")[1])
            };
            return pos;
        };
        fortuneCoinAssembly.Extender.prototype.__class__ = fortuneCoinAssembly.Extender;
        fortuneCoinAssembly.Jackpot = function(name, seed, value) {
            this.name = name;
            this.seed = seed;
            this.value = value;
        };
        fortuneCoinAssembly.Jackpot.__name__ = ["fortuneCoinAssembly", "Jackpot"];
        fortuneCoinAssembly.Jackpot.prototype.name = null;
        fortuneCoinAssembly.Jackpot.prototype.seed = null;
        fortuneCoinAssembly.Jackpot.prototype.value = null;
        fortuneCoinAssembly.Jackpot.prototype.__class__ = fortuneCoinAssembly.Jackpot;
        fortuneCoinAssembly.JackpotAward = function(payout, totalPayout, strippedTotalPayout) {
            this.payout = payout;
            this.totalPayout = totalPayout;
            this.strippedTotalPayout = strippedTotalPayout;
        };
        fortuneCoinAssembly.JackpotAward.__name__ = ["fortuneCoinAssembly", "JackpotAward"];
        fortuneCoinAssembly.JackpotAward.prototype.payout = null;
        fortuneCoinAssembly.JackpotAward.prototype.totalPayout = null;
        fortuneCoinAssembly.JackpotAward.prototype.strippedTotalPayout = null;
        fortuneCoinAssembly.JackpotAward.prototype.__class__ = fortuneCoinAssembly.JackpotAward;
        fortuneCoinAssembly.JackpotsParser = function() {};
        fortuneCoinAssembly.JackpotsParser.__name__ = ["fortuneCoinAssembly", "JackpotsParser"];
        fortuneCoinAssembly.JackpotsParser.parse = function(paytableResponse) {
            var jackpots = [];
            var triggers = fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Extender.getField(paytableResponse, "TriggerInfo"), "Trigger");
            var _g = 0;
            while (_g < triggers.length) {
                var trigger = triggers[_g];
                ++_g;
                var seedValue = new money.Money((_hcmn_.js_Boot.__cast(fortuneCoinAssembly.Extender.getField(trigger, "@name"), String)).split(",")[1]);
                var name = fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(trigger, "Condition"), "Condition"), "@value");
                var value = fortuneCoinAssembly.ExternalService.moneyFormatter.format(seedValue.mul(new money.Money(fortuneCoinAssembly.GameData.betPerLine)).value);
                jackpots.push(new fortuneCoinAssembly.Jackpot(name, seedValue, value));
            }
            return jackpots;
        };
        fortuneCoinAssembly.JackpotsParser.parseJackpotMultiplier = function(gameLogicResponse) {
            return fortuneCoinAssembly.Extender.toInt(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(gameLogicResponse, "MultiplierOutcome"), "Multiplier"), "#text"));
        };
        fortuneCoinAssembly.JackpotsParser.parseJackpotAward = function(gameLogicResponse, fieldName) {
            var prizeOutcomes = fortuneCoinAssembly.Extender.getField(gameLogicResponse, "PrizeOutcome");
            var totalPayout = "";
            var totalPayoutStripped = "";
            var payout = new _hcmn_.haxe_ds_StringMap();
            if (prizeOutcomes != null) {
                var _g = 0;
                while (_g < prizeOutcomes.length) {
                    var prizeOutcome = prizeOutcomes[_g];
                    ++_g;
                    var name = fortuneCoinAssembly.Extender.getField(prizeOutcome, "@name");
                    if (name == fieldName) {
                        var totalPayoutMoney = new money.Money(fortuneCoinAssembly.Extender.getField(prizeOutcome, "@totalPay"));
                        totalPayoutStripped = totalPayoutMoney.mul(new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination)).value;
                        totalPayout = fortuneCoinAssembly.ExternalService.moneyFormatter.format(totalPayoutStripped);
                        var prizes = fortuneCoinAssembly.Extender.getFieldAsArray(prizeOutcome, "Prize");
                        var _g1 = 0;
                        while (_g1 < prizes.length) {
                            var prize = prizes[_g1];
                            ++_g1;
                            var name1 = fortuneCoinAssembly.Extender.getField(prize, "@name").split(",")[0];
                            var totalPayMoney = new money.Money(fortuneCoinAssembly.Extender.getField(prize, "@totalPay"));
                            var totalPay = fortuneCoinAssembly.ExternalService.moneyFormatter.format(totalPayMoney.mul(new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination)).value);
                            if (_hcmn_.__map_reserved[name1] != null) payout.setReserved(name1, totalPay);
                            else payout.h[name1] = totalPay;
                        }
                    }
                }
            }
            return new fortuneCoinAssembly.JackpotAward(payout, totalPayout, totalPayoutStripped);
        };
        fortuneCoinAssembly.JackpotsParser.prototype.__class__ = fortuneCoinAssembly.JackpotsParser;
        fortuneCoinAssembly.Parser = function() {};
        fortuneCoinAssembly.Parser.__name__ = ["fortuneCoinAssembly", "Parser"];
        fortuneCoinAssembly.Parser.prototype.parsePayLines = function() {
            var payLines = new _hcmn_.haxe_ds_StringMap();
            var patterns = fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Extender.find(fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Parser.paytableResponse, "PatternInfo"), "@name", "Paylines"), "Pattern");
            var _g = 0;
            while (_g < patterns.length) {
                var pattern = patterns[_g];
                ++_g;
                var lineId = fortuneCoinAssembly.Extender.getField(pattern, "@name").split("Line ")[1];
                var cells = fortuneCoinAssembly.Extender.getFieldAsArray(pattern, "Cell");
                var linePositions = [];
                var position = null;
                var _g1 = 0;
                while (_g1 < cells.length) {
                    var cell = cells[_g1];
                    ++_g1;
                    var name = fortuneCoinAssembly.Extender.getField(cell, "@name");
                    position = fortuneCoinAssembly.Extender.parsePosition(name);
                    linePositions.push(position);
                }
                payLines.set("bg_" + lineId, linePositions);
            }
            patterns = fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Extender.find(fortuneCoinAssembly.Extender.getFieldAsArray(fortuneCoinAssembly.Parser.paytableResponse, "PatternInfo"), "@name", "Paylines90"), "Pattern");
            var _g2 = 0;
            while (_g2 < patterns.length) {
                var pattern1 = patterns[_g2];
                ++_g2;
                var lineId1 = fortuneCoinAssembly.Extender.getField(pattern1, "@name").split("Line ")[1];
                var cells1 = fortuneCoinAssembly.Extender.getFieldAsArray(pattern1, "Cell");
                var linePositions1 = [];
                var position1 = null;
                var _g11 = 0;
                while (_g11 < cells1.length) {
                    var cell1 = cells1[_g11];
                    ++_g11;
                    var name1 = fortuneCoinAssembly.Extender.getField(cell1, "@name");
                    position1 = fortuneCoinAssembly.Extender.parsePosition(name1);
                    linePositions1.push(position1);
                }
                payLines.set("fs_" + lineId1, linePositions1);
            }
            if (_hcmn_.Lambda.count(payLines) > 0) return payLines;
            else return null;
        };
        fortuneCoinAssembly.Parser.paytableResponse = null;
        fortuneCoinAssembly.Parser.initParser = function() {
            fortuneCoinAssembly.Parser.paytableResponse = fortuneCoinAssembly.ExternalService.slotParser.getPaytableResponse();
        };
        fortuneCoinAssembly.Parser.parseStripLayersSectionMappings = function(gameLogicResponse) {
            var keyValueFieldName = "KeyValuePairOutcome";
            var fieldName = fortuneCoinAssembly.GameData.spinOutcome.nextStage + ".BetReelSets";
            fortuneCoinAssembly.GameData.stripLayersSectionMappings = fortuneCoinAssembly.Parser.getSectionMappings(gameLogicResponse, keyValueFieldName, fieldName);
        };
        fortuneCoinAssembly.Parser.parseReplacementSymbol = function() {
            return fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Extender.getField(fortuneCoinAssembly.Parser.paytableResponse, "SelectiveStackingInfo"), "SelectiveStackingSymbolList"), "Symbol"), "@name");
        };
        fortuneCoinAssembly.Parser.parseReplacementMap = function() {
            var keyValueFieldName = "KeyValuePairInfo";
            var fieldName = "SchemaDigitReplacement";
            var replacementMap = fortuneCoinAssembly.Parser.getSectionMappings(fortuneCoinAssembly.Parser.paytableResponse, keyValueFieldName, fieldName);
            return replacementMap;
        };
        fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings = function(gameLogicResponse) {
            var keyValueFieldName = "KeyValuePairOutcome";
            var fieldName = fortuneCoinAssembly.GameData.spinOutcome.nextStage + ".SchemaSet";
            fortuneCoinAssembly.GameData.schemaSetSectionMappings = fortuneCoinAssembly.Parser.getSectionMappings(gameLogicResponse, keyValueFieldName, fieldName);
        };
        fortuneCoinAssembly.Parser.parseCoinsFeature = function(gameLogicResponse, name) {
            return fortuneCoinAssembly.CoinsFeatureParser.parse(gameLogicResponse, name);
        };
        fortuneCoinAssembly.Parser.setCoinsFeatureState = function(gameLogicResponse) {
            var keyValueFieldName = "TriggerOutcome";
            var fieldName = "CoinsFeature.State";
            var triggerOutcome = fortuneCoinAssembly.Extender.getField(gameLogicResponse, keyValueFieldName);
            if (triggerOutcome == null) return "";
            var _g = 0;
            while (_g < triggerOutcome.length) {
                var data = triggerOutcome[_g];
                ++_g;
                if (fortuneCoinAssembly.Extender.getField(data, "@name") == fieldName) {
                    var trigger = fortuneCoinAssembly.Extender.getField(data, "Trigger");
                    var name = fortuneCoinAssembly.Extender.getField(trigger, "@name");
                    if (name == null) return "";
                    return name.split(".")[0];
                }
            }
            return "";
        };
        fortuneCoinAssembly.Parser.parseScatterWin = function(gameLogicResponse) {
            return fortuneCoinAssembly.ScatterParser.parse(gameLogicResponse);
        };
        fortuneCoinAssembly.Parser.parseJackpots = function() {
            return fortuneCoinAssembly.JackpotsParser.parse(fortuneCoinAssembly.Parser.paytableResponse);
        };
        fortuneCoinAssembly.Parser.setJackpotAward = function(gameLogicResponse) {
            fortuneCoinAssembly.GameData.fsJackpotAward = fortuneCoinAssembly.JackpotsParser.parseJackpotAward(gameLogicResponse, "JackpotAward");
            fortuneCoinAssembly.GameData.jackpotAward = fortuneCoinAssembly.JackpotsParser.parseJackpotAward(gameLogicResponse, "JackpotCoin.Total");
        };
        fortuneCoinAssembly.Parser.setJackpotMultiplier = function(gameLogicResponse) {
            fortuneCoinAssembly.GameData.jackpotMulitplier = fortuneCoinAssembly.JackpotsParser.parseJackpotMultiplier(gameLogicResponse);
        };
        fortuneCoinAssembly.Parser.getSectionMappings = function(serverResponse, keyValueFieldName, fieldName) {
            var section = fortuneCoinAssembly.Parser.parseKeyValue(serverResponse, keyValueFieldName, fieldName);
            if (section == null) return null;
            var sectionMappings = fortuneCoinAssembly.Parser.parseMapping(section);
            if (sectionMappings == null) return null;
            return sectionMappings;
        };
        fortuneCoinAssembly.Parser.parseKeyValue = function(serverResponse, keyValueFieldName, fieldName) {
            var keyValuePairOutcome = fortuneCoinAssembly.Extender.getField(serverResponse, keyValueFieldName);
            var _g = 0;
            while (_g < keyValuePairOutcome.length) {
                var data = keyValuePairOutcome[_g];
                ++_g;
                if (fortuneCoinAssembly.Extender.getField(data, "@name") == fieldName) return data;
            }
            return null;
        };
        fortuneCoinAssembly.Parser.parseMapping = function(obj) {
            var array = fortuneCoinAssembly.Extender.getFieldAsArray(obj, "Mapping");
            var map = new _hcmn_.haxe_ds_StringMap();
            var _g = 0;
            while (_g < array.length) {
                var elem = array[_g];
                ++_g;
                var key = fortuneCoinAssembly.Extender.getField(elem, "@key");
                var value = fortuneCoinAssembly.Extender.getField(elem, "@value");
                if (_hcmn_.__map_reserved[key] != null) map.setReserved(key, value);
                else map.h[key] = value;
            }
            return map;
        };
        fortuneCoinAssembly.Parser.prototype.__class__ = fortuneCoinAssembly.Parser;
        fortuneCoinAssembly.ScatterParser = function() {};
        fortuneCoinAssembly.ScatterParser.__name__ = ["fortuneCoinAssembly", "ScatterParser"];
        fortuneCoinAssembly.ScatterParser.parse = function(gameLogicResponse) {
            var prizeOutcomes = fortuneCoinAssembly.Extender.getField(gameLogicResponse, "PrizeOutcome");
            var totalPayoutBG = "0";
            var totalPayoutFS = "0";
            if (prizeOutcomes != null) {
                var _g = 0;
                while (_g < prizeOutcomes.length) {
                    var prizeOutcome = prizeOutcomes[_g];
                    ++_g;
                    var name = fortuneCoinAssembly.Extender.getField(prizeOutcome, "@name");
                    if (name == "FreeSpin.Scatter") {
                        var totalPayoutMoney = new money.Money(fortuneCoinAssembly.Extender.getField(prizeOutcome, "@totalPay"));
                        totalPayoutFS = totalPayoutMoney.mul(new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination)).value;
                    } else if (name == "BaseGame.Scatter") {
                        var totalPayoutMoney1 = new money.Money(fortuneCoinAssembly.Extender.getField(prizeOutcome, "@totalPay"));
                        totalPayoutBG = totalPayoutMoney1.mul(new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination)).value;
                    }
                }
            }
            return new fortuneCoinAssembly.ScatterAward(totalPayoutBG, totalPayoutFS);
        };
        fortuneCoinAssembly.ScatterParser.prototype.__class__ = fortuneCoinAssembly.ScatterParser;
        fortuneCoinAssembly.LocalStoragePolyfill = function() {
            this.values = new _hcmn_.haxe_ds_StringMap();
        };
        fortuneCoinAssembly.LocalStoragePolyfill.__name__ = ["fortuneCoinAssembly", "LocalStoragePolyfill"];
        fortuneCoinAssembly.LocalStoragePolyfill.prototype.values = null;
        fortuneCoinAssembly.LocalStoragePolyfill.prototype.setItem = function(key, val) {
            var value = val;
            this.values.set(key, value);
        };
        fortuneCoinAssembly.LocalStoragePolyfill.prototype.getItem = function(key) {
            return this.values.get(key);
        };
        fortuneCoinAssembly.LocalStoragePolyfill.prototype.removeItem = function(key) {
            this.values.remove(key);
        };
        fortuneCoinAssembly.LocalStoragePolyfill.prototype.__class__ = fortuneCoinAssembly.LocalStoragePolyfill;
        fortuneCoinAssembly.Storage = function() {
            try {
                js.Browser.getLocalStorage().setItem("ollie_settings_" + "test", "test");
                js.Browser.getLocalStorage().removeItem("ollie_settings_" + "test");
                this.storage = js.Browser.getLocalStorage();
            } catch (err) {
                if (err instanceof js._Boot.HaxeError) err = err.val;
                this.storage = new fortuneCoinAssembly.LocalStoragePolyfill();
            }
        };
        fortuneCoinAssembly.Storage.__name__ = ["fortuneCoinAssembly", "Storage"];
        fortuneCoinAssembly.Storage.prototype.storage = null;
        fortuneCoinAssembly.Storage.prototype.writeOption = function(id, value) {
            this.storage.setItem("ollie_settings_" + id, value);
        };
        fortuneCoinAssembly.Storage.prototype.readOption = function(id) {
            return this.storage.getItem("ollie_settings_" + id);
        };
        fortuneCoinAssembly.Storage.prototype.hasOption = function(id) {
            return this.storage.getItem("ollie_settings_" + id) != null;
        };
        fortuneCoinAssembly.Storage.prototype.__class__ = fortuneCoinAssembly.Storage;
        fortuneCoinAssembly.BaseGameStrategy = function(gameController) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame]", {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 30,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "new"
            });
            this.gameController = gameController;
            this.layerManagerPort = fortuneCoinAssembly.LayerManagerPort.getInstance();
        };
        fortuneCoinAssembly.BaseGameStrategy = ck_implements(fortuneCoinAssembly.BaseGameStrategy, gameProtocolApi.IStrategyServices);
        fortuneCoinAssembly.BaseGameStrategy.__interfaces__ = [gameProtocolApi.IStrategyServices];
        fortuneCoinAssembly.BaseGameStrategy.__name__ = ["fortuneCoinAssembly", "BaseGameStrategy"];
        fortuneCoinAssembly.BaseGameStrategy.prototype.gameController = null;
        fortuneCoinAssembly.BaseGameStrategy.prototype.currentStage = null;
        fortuneCoinAssembly.BaseGameStrategy.prototype.layerManagerPort = null;
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnBeforeShowStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnBeforeShowStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 43,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnBeforeShowStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_SHOW;
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotAward(gameLogicResponse);
                _g.gameController.updateJackpotValues();
                _g.gameController.layerController.initialize();
                _g.gameController.layerController.updateVisibility();
                _g.gameController.baseGameController.detectCoinFeatureStage(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"));
                if (fortuneCoinAssembly.GameData.coinsFeatureResume == "BaseGame") fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"), "BaseGame");
                else if (fortuneCoinAssembly.GameData.coinsFeatureResume == "FreeSpin") fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, ""), "");
                _g.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
                _g.nextState(null);
            });
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnStartGameInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnStartGameInProgressStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 91,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnStartGameInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS;
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnStartGameInProgressNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnStartGameInProgressNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 99,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnStartGameInProgressNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS_NEXT;
            fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnStartGameInitial = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnStartGameInitial " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 107,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnStartGameInitial",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_INITIAL;
            if (fortuneCoinAssembly.GameData.tutorialConfirmed) this.gameController.betPanelController.setIdleState();
            fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnBeforeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnBeforeRequest " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 119,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnBeforeRequest",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_REQUEST;
            fortuneCoinAssembly.ExternalService.gameProtocol.deductStake(this.gameController.stakeItemController.getTotalBet());
            fortuneCoinAssembly.GameData.coinsFeatureState = "";
            this.gameController.winCycleController.resetWinCycle();
            this.gameController.winCycleController.resetScatters();
            this.gameController.hideCoins();
            this.gameController.startSpin();
            this.gameController.winMeterController.showMessage("GoodLuck");
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnMakeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnMakeRequest " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 142,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnMakeRequest",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.MAKE_REQUEST;
            var sliderInput = {
                betPerPattern: this.gameController.stakeItemController.getBetPerPattern(),
                patternsBet: this.gameController.stakeItemController.getPatternsBet()
            };
            var payload = {
                action: "play",
                sliderInput: sliderInput
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendPlayRequest(payload);
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnResolveStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnResolveStage " + " stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 159,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnResolveStage",
                customParams: [" nextStage ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            this.currentStage = gameProtocolApi.StrategyStages.RESOLVE;
            this.gameController.betPanelController.setSpinState();
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotAward(gameLogicResponse);
                fortuneCoinAssembly.GameData.scatterWin = fortuneCoinAssembly.Parser.parseScatterWin(gameLogicResponse);
                if (fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature") fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"), "BaseGame");
                var stoppingDelay = 0;
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                    if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame" || fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                        if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                            var coins = _g.gameController.getCoinsOnReel();
                            if (coins > 7) {
                                _g.gameController.playBigWinAnnouncement();
                                stoppingDelay = 3000;
                            }
                        } else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                            _g.gameController.showBigWinTension();
                            stoppingDelay = 3000;
                        }
                    }
                }
                _g.gameController.stopReelSpin(stoppingDelay).then(function(data) {
                    haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnResolveStage spinOutcome.acumulatedPayout " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, {
                        fileName: "BaseGameStrategy.hx",
                        lineNumber: 212,
                        className: "components.gamecontroller.strategies.BaseGameStrategy",
                        methodName: "handleOnResolveStage"
                    });
                    if (fortuneCoinAssembly.GameData.autoSpinSteps == fortuneCoinAssembly.GameData.totalAutoSpins && fortuneCoinAssembly.GameData.autoSpinStarted || fortuneCoinAssembly.GameData.promotionalSpinsActive && fortuneCoinAssembly.GameData.promotionalSpinsCount == 0) _g.gameController.autoPlayController.requestAutoPlayStop();
                    fortuneCoinAssembly.GameData.spinStarted = false;
                    if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                    if (fortuneCoinAssembly.GameData.spinOutcome.stage == "BaseGame") {
                        if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "FreeSpin") {
                                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                                    _g.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                                    _g.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.bigWin);
                                    if (!fortuneCoinAssembly.GameData.isLowWin()) _g.gameController.betPanelController.setSkipState();
                                    else _g.gameController.betPanelController.skipButtonPressed();
                                    fortuneCoinAssembly.GameData.winGroups = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.bigWin.winGroup;
                                } else if (fortuneCoinAssembly.GameData.autoSpinStarted) _hcmn_.haxe_Timer.delay(function() {
                                    fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                                }, 1000);
                                else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                        } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") _g.gameController.showCoinBonus("BaseGame");
                });
            });
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnEndGame = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnEndGame " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 294,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnEndGame",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState, " totalPayout ", fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.totalPayout, " acumulatedPayout: ", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout]
            });
            this.currentStage = gameProtocolApi.StrategyStages.END_GAME;
            fortuneCoinAssembly.GameData.spinPressed = false;
            fortuneCoinAssembly.GameData.lastSpin = false;
            fortuneCoinAssembly.GameData.autoPlayWinNum = 0;
            fortuneCoinAssembly.GameData.doNotUpdateBalance = false;
            fortuneCoinAssembly.GameData.isFreeSpin = false;
            fortuneCoinAssembly.GameData.isPicker = false;
            if (this.gameController.autoPlayController.autoPlayStopRequested) this.gameController.autoPlayController.autoPlayStop();
            var payout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") payout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
            if (fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                this.gameController.showAwardCapPopup();
                if (fortuneCoinAssembly.GameData.autoSpinStarted) this.gameController.autoPlayController.autoPlayStop();
                this.gameController.betPanelController.setSkipState();
                fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
                if (!fortuneCoinAssembly.GameData.promotionalSpinsActive) this.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY);
                this.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, true), true);
            } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "Picker") {
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                    if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                        haxe.Log.trace(" lineWins in bg after picker in last fs " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.lineWins), {
                            fileName: "BaseGameStrategy.hx",
                            lineNumber: 345,
                            className: "components.gamecontroller.strategies.BaseGameStrategy",
                            methodName: "handleOnEndGame"
                        });
                        fortuneCoinAssembly.GameData.isFreeSpin = true;
                        this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, function() {
                            _g.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
                            _g.gameController.betPanelController.setFSSpinState();
                            _g.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO);
                        });
                        this.gameController.hideCoins();
                        this.gameController.showIdleCoins("idle_value_loop", "FreeSpin");
                    } else {
                        this.gameController.betPanelController.setSkipState();
                        this.gameController.showIdleCoins("idle_value_loop", "BaseGame");
                        fortuneCoinAssembly.GameData.betPerLineCredit = this.gameController.stakeItemController.getBetPerPattern();
                        this.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                        this.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false));
                    }
                }
            } else if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(payout)) {
                this.gameController.winCycleController.startWinCycle("BaseGame", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                this.gameController.hideCoins();
                this.gameController.showIdleCoins("idle_value_loop", "BaseGame");
                if (fortuneCoinAssembly.GameData.autoSpinStarted) {
                    this.gameController.betPanelController.setAutoPlayIdleState();
                    if (fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.lineWins != null) fortuneCoinAssembly.GameData.autoPlayWinNum = fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.lineWins.length;
                    else fortuneCoinAssembly.GameData.autoPlayWinNum = 1;
                    fortuneCoinAssembly.GameData.autoPlayWinTimer = new _hcmn_.haxe_Timer(fortuneCoinAssembly.GameData.autoPlayWinNum * 1500);
                    fortuneCoinAssembly.GameData.autoPlayWinTimer.run = $bind(this, this.autoPlayDelay);
                } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.autoPlayDelay = function() {
            if (fortuneCoinAssembly.GameData.autoSpinStarted) {
                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                this.gameController.betPanelController.setAutoPlayState();
                fortuneCoinAssembly.GameData.autoPlayWinTimer.stop();
                fortuneCoinAssembly.GameData.autoPlayWinTimer = null;
            }
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnBeginNewGame = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnBeginNewGame stage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 456,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnBeginNewGame",
                customParams: [" nextStage ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnBeginNewGame stage acumulatedPayout " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 457,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnBeginNewGame"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnBeginNewGame stage acumulatedFreeSpinPayout " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 458,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnBeginNewGame"
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEGIN_NEW_GAME;
            fortuneCoinAssembly.GameData.spinPressed = false;
            fortuneCoinAssembly.GameData.skipPressed = false;
            if (fortuneCoinAssembly.GameData.spinOutcome.stage == "Picker") {
                fortuneCoinAssembly.GameData.isFreeSpin = false;
                if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                    if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                        this.gameController.winCycleController.startWinCycle("BaseGame", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                        this.gameController.winCycleController.showScatterWins();
                        this.gameController.hideCoins();
                        this.gameController.showIdleCoins("idle_value_loop", "BaseGame");
                        this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
                    }
                    this.gameController.betPanelController.setIdleState();
                }
            }
            if (fortuneCoinAssembly.GameData.autoSpinStarted) {
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "BaseGame") this.gameController.autoPlayController.autoPlayStop();
                else if (fortuneCoinAssembly.GameData.autoSpinSteps < fortuneCoinAssembly.GameData.totalAutoSpins) {
                    this.gameController.betPanelPort.setAutoPlayButtonState().publish(betPanelApi.SetAutoPlayButtonState.STOP_BUTTON_STATE);
                    this.gameController.betPanelPort.setNumberOffAutoSpinsLeft().publish(fortuneCoinAssembly.GameData.autoSpinSteps + "/" + fortuneCoinAssembly.GameData.totalAutoSpins);
                    var increasedAutoSpinSteps = this.gameController.autoPlayController.increaseAutoSpinSteps(fortuneCoinAssembly.GameData.autoSpinSteps);
                    this.gameController.autoPlayController.setAutoSpinData(true, increasedAutoSpinSteps);
                    if (!fortuneCoinAssembly.GameData.spinPressed) this.nextState(null);
                    else this.gameController.betPanelController.setAutoPlayState();
                }
            } else {
                this.gameController.betPanelController.setIdleState();
                fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
            }
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnExitStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnExitStage stage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 527,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnExitStage",
                customParams: [" nextStage ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnExitStage spinOutcome.acumulatedPayout " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 528,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnExitStage"
            });
            this.currentStage = gameProtocolApi.StrategyStages.EXIT;
            if (fortuneCoinAssembly.GameData.autoSpinStarted && (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker")) this.gameController.autoPlayController.autoPlayStop();
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                if (fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) this.nextState(null);
                else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                    this.gameController.betPanelController.setSpinState();
                    this.nextState(null);
                } else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker") {
                    this.gameController.betPanelController.setSpinState();
                    this.nextState(null);
                } else if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                    this.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout);
                    this.gameController.betPanelController.setSkipState();
                    fortuneCoinAssembly.GameData.betPerLineCredit = this.gameController.stakeItemController.getBetPerPattern();
                    if (fortuneCoinAssembly.GameData.isHighWin) this.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), false);
                    else {
                        var totalPay = new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination).mulInt(fortuneCoinAssembly.GameData.coinsFeatureBaseGame.totalPayout).value;
                        this.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, totalPay, false), true);
                        if (fortuneCoinAssembly.GameData.rgPresentation) this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off_coin);
                        else this.gameController.soundController.activate(fortuneCoinAssembly.SoundConstants.basegame_rollup_off_0);
                        this.gameController.betPanelController.setSpinState();
                        this.nextState(null);
                    }
                } else {
                    this.gameController.betPanelController.setSpinState();
                    this.nextState(null);
                }
            } else if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                this.gameController.betPanelController.setFSSpinState();
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                _hcmn_.haxe_Timer.delay(function() {
                    _g.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO);
                    _g.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO);
                }, 2500);
            }
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnEnterNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnEnterNextStage stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 610,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnEnterNextStage",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState, "acumulatedFreeSpinPayout: ", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout]
            });
            this.currentStage = gameProtocolApi.StrategyStages.ENTER_NEXT;
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                this.gameController.betPanelController.setFSSpinState();
                this.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO);
                this.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO);
            } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker") {
                this.nextState(null);
                this.gameController.pickerController.initPickerEntry();
            } else this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnAbortNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnAbortNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 640,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnAbortNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.ABORT_NEXT;
            this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
            this.gameController.winMeterController.showMessage("");
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnResetNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnResetNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 654,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnResetNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.RESET_NEXT;
            if (fortuneCoinAssembly.GameData.autoSpinStarted) this.gameController.autoPlayController.autoPlayStop();
            fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
            this.gameController.betPanelController.setIdleState();
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.handleOnInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].handleOnInProgressStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 668,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "handleOnInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.nextState = function(payload) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [BaseGame].state " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "BaseGameStrategy.hx",
                lineNumber: 677,
                className: "components.gamecontroller.strategies.BaseGameStrategy",
                methodName: "nextState",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.onGameRequestedSpin = function() {
            this.nextState(null);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.getCurrentStage = function() {
            return this.currentStage;
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.BaseGameStrategy.prototype.__class__ = fortuneCoinAssembly.BaseGameStrategy;
        fortuneCoinAssembly.FreeSpinStrategy = function(gameController) {
            this.pickerIsResume = false;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin] " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 24,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "new",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.gameController = gameController;
            fortuneCoinAssembly.GameData.isFreeSpin = true;
            fortuneCoinAssembly.GameData.spinPressed = false;
        };
        fortuneCoinAssembly.FreeSpinStrategy = ck_implements(fortuneCoinAssembly.FreeSpinStrategy, gameProtocolApi.IStrategyServices);
        fortuneCoinAssembly.FreeSpinStrategy.__interfaces__ = [gameProtocolApi.IStrategyServices];
        fortuneCoinAssembly.FreeSpinStrategy.__name__ = ["fortuneCoinAssembly", "FreeSpinStrategy"];
        fortuneCoinAssembly.FreeSpinStrategy.prototype.gameController = null;
        fortuneCoinAssembly.FreeSpinStrategy.prototype.currentStage = null;
        fortuneCoinAssembly.FreeSpinStrategy.prototype.pickerIsResume = null;
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnBeforeShowStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnBeforeShowStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 36,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnBeforeShowStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_SHOW;
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.GameData.autoSpinSteps = 0;
            fortuneCoinAssembly.GameData.autoSpinStarted = false;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotAward(gameLogicResponse);
                _g.gameController.updateJackpotValues();
                _g.gameController.layerController.initialize();
                _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME, [_g.getString("FS_RESUME_0")]);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT);
                _g.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
                _g.gameController.layerController.updateVisibility();
                _g.gameController.layerController.updateBackground();
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                _g.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels);
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) {
                    _g.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), true);
                    fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                }
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, ""), "");
                fortuneCoinAssembly.GameData.scatterWin = fortuneCoinAssembly.Parser.parseScatterWin(gameLogicResponse);
                _g.nextState(null);
            });
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnStartGameInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnStartGameInProgressStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 96,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnStartGameInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS;
            this.gameController.betPanelController.setSpinState();
            this.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, [this.getString("INFO_DISPLAY_0") + " " + (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current + 1) + this.getString("OF") + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total], ["INFO_DISPLAY_0"]);
            this.gameController.layerController.enablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            fortuneCoinAssembly.ExternalService.bus.getChannel("TBus").publish("testable:availablePicks", {
                instanceId: "FreeSpinResumeStart",
                pickerChoices: {
                    'Start': "Start"
                }
            });
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnStartGameInProgressNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnStartGameInProgressNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 116,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnStartGameInProgressNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS_NEXT;
            this.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            this.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            this.pickerIsResume = true;
            this.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnBeforeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnBeforeRequest " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 129,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnBeforeRequest",
                customParams: ["nextState: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, "coinsFeatureState: ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            if (this.pickerExit(false) && !this.pickerIsResume) {
                this.gameController.betPanelController.setFSIdleState();
                this.gameController.showIdleCoins("idle_value_loop", "FreeSpin");
                if (fortuneCoinAssembly.GameData.isRetrigger && !fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded && fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, ($_ = this.gameController, $bind($_, $_.showRetriggerScreen)));
                else this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.regularOnBeforeRequest));
            } else this.regularOnBeforeRequest();
            this.pickerIsResume = false;
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.regularOnBeforeRequest = function() {
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_REQUEST;
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            fortuneCoinAssembly.GameData.coinsFeatureState = "";
            fortuneCoinAssembly.GameData.lastSpin = false;
            fortuneCoinAssembly.GameData.fsJackpotAward = null;
            this.gameController.winCycleController.resetWinCycle();
            this.gameController.winCycleController.resetScatters();
            this.gameController.betPanelController.setSpinState();
            this.gameController.hideCoins();
            this.gameController.startSpin();
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnMakeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnMakeRequest stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 173,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnMakeRequest",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState: ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            this.currentStage = gameProtocolApi.StrategyStages.MAKE_REQUEST;
            this.pickerExit(true);
            var sliderInput = {
                betPerPattern: this.gameController.stakeItemController.getBetPerPattern(),
                patternsBet: this.gameController.stakeItemController.getPatternsBet()
            };
            var payload = {
                action: "play",
                sliderInput: sliderInput
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendPlayRequest(payload);
            this.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnResolveStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnResolveStage stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 193,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnResolveStage",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState: ", fortuneCoinAssembly.GameData.coinsFeatureState]
            });
            this.currentStage = gameProtocolApi.StrategyStages.RESOLVE;
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.GameData.spinPressed = false;
                if (fortuneCoinAssembly.GameData.spinOutcome.stage == "CoinsFeature") fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, ""), "");
                if (fortuneCoinAssembly.GameData.coinsFeatureResume == "BaseGame") fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"), "BaseGame");
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null) {
                    if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo != null) fortuneCoinAssembly.GameData.setPickerChoices(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo.choices);
                }
                _g.gameController.stopReelSpin(0).then(function(data) {
                    haxe.Log.trace("GameData.spinOutcome.freeSpin.isIncrementTriggered ", {
                        fileName: "FreeSpinStrategy.hx",
                        lineNumber: 244,
                        className: "components.gamecontroller.strategies.FreeSpinStrategy",
                        methodName: "handleOnResolveStage",
                        customParams: [fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered, " awardCap: ", spinOutcome.awardCapExceeded]
                    });
                    fortuneCoinAssembly.GameData.spinStarted = false;
                    if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                    fortuneCoinAssembly.GameData.scatterWin = fortuneCoinAssembly.Parser.parseScatterWin(gameLogicResponse);
                    var awardCapExceeded = spinOutcome.awardCapExceeded;
                    if (!awardCapExceeded) {
                        if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin") {
                            if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout)) {
                                _g.gameController.winCycleController.setHighWinData(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout);
                                fortuneCoinAssembly.GameData.betPerLineCredit = _g.gameController.stakeItemController.getBetPerPattern();
                                _g.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, false), false, fortuneCoinAssembly.GameData.lastAccumulatedPayout);
                                if (!fortuneCoinAssembly.GameData.isLowWin()) _g.gameController.betPanelController.setSkipState();
                                else _g.gameController.betPanelController.skipButtonPressed();
                                fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                            } else if (fortuneCoinAssembly.GameData.isRetrigger) {
                                var currentFSPayout = new money.Money(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout).sub(new money.Money(fortuneCoinAssembly.GameData.lastAccumulatedPayout)).value;
                                _g.gameController.winCycleController.setHighWinData(currentFSPayout);
                                _g.gameController.betPanelController.setSkipState();
                                fortuneCoinAssembly.GameData.betPerLineCredit = _g.gameController.stakeItemController.getBetPerPattern();
                                _g.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, fortuneCoinAssembly.GameData.scatterWin.awardFS, false), false, fortuneCoinAssembly.GameData.lastAccumulatedPayout);
                                fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                            } else _g.nextState(null);
                        } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") _g.gameController.showCoinBonus("FreeSpin");
                    } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") _g.gameController.showCoinBonus("FreeSpin");
                    else _g.nextState(null);
                });
            });
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnInProgressStage stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 325,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnInProgressStage",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState: ", fortuneCoinAssembly.GameData.coinsFeatureState, " totalPayout ", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnInProgressStage lineWins: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins), {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 326,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnInProgressStage"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnInProgressStage total: " + fortuneCoinAssembly.GameData.spinOutcome.freeSpin.total, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 327,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.freeSpin.current]
            });
            fortuneCoinAssembly.GameData.lastSpin = false;
            if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins != null) {
                    if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins.length > 0) {
                        this.gameController.betPanelController.setFSIdleState();
                        this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.winLinesPresented));
                    } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                } else if (fortuneCoinAssembly.GameData.isRetrigger) this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, ($_ = this.gameController, $bind($_, $_.showRetriggerScreen)));
                else _hcmn_.haxe_Timer.delay(function() {
                    fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                }, 1000);
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnExitStage = function(event) {
            var _g = this;
            this.currentStage = gameProtocolApi.StrategyStages.EXIT;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 379,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState: ", fortuneCoinAssembly.GameData.coinsFeatureState, " totalPayout ", fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.totalPayout]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: GameData.spinOutcome.acumulatedPayout " + fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 380,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: GameData.outcome.total " + fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.totalPayout, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 381,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: GameData.outcome.isIncrementTriggered " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered), {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 382,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: GameData.outcome.awardCapExceeded " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isRetrigger), {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 383,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage"
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnExitStage stage: GameData.outcome.awardCapExceeded " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded), {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 384,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnExitStage"
            });
            if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") {
                    if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") {
                        if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(_hcmn_.Std.string(fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.totalPayout))) {
                            this.gameController.winCycleController.setHighWinData(_hcmn_.Std.string(fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.totalPayout));
                            this.gameController.betPanelController.setSkipState();
                            fortuneCoinAssembly.GameData.betPerLineCredit = this.gameController.stakeItemController.getBetPerPattern();
                            this.gameController.displayWin(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines * fortuneCoinAssembly.GameData.betPerLineCredit, new money.Money(fortuneCoinAssembly.GameData.riscControlSettings.denomination).mulInt(fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.totalPayout).value, false), false, fortuneCoinAssembly.GameData.lastAccumulatedPayout);
                            fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                        } else if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins != null) {
                            if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins.length == 0) _hcmn_.haxe_Timer.delay(function() {
                                fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                            }, 1000);
                            else {
                                fortuneCoinAssembly.GameData.countUpFinished = true;
                                this.gameController.betPanelController.setFSIdleState();
                                this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.winLinesPresented));
                            }
                        } else _hcmn_.haxe_Timer.delay(function() {
                            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                        }, 1000);
                    } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                    fortuneCoinAssembly.GameData.lastSpin = true;
                    if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins != null) {
                        if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins.length == 0) _hcmn_.haxe_Timer.delay(function() {
                            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                        }, 1000);
                        else {
                            fortuneCoinAssembly.GameData.skipPressed = false;
                            this.gameController.betPanelController.setSkipState();
                            this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.winLinesPresented));
                        }
                    } else _hcmn_.haxe_Timer.delay(function() {
                        fortuneCoinAssembly.GameData.betPerLineCredit = _g.gameController.stakeItemController.getBetPerPattern();
                        fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    }, 1000);
                    fortuneCoinAssembly.GameData.lastAccumulatedPayout = null;
                }
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnEnterNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnEnterNextStage stage: " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 494,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnEnterNextStage",
                customParams: [" nextStage: ", fortuneCoinAssembly.GameData.spinOutcome.nextStage, " coinsFeatureState ", fortuneCoinAssembly.GameData.coinsFeatureState, "acumulatedFreeSpinPayout: ", fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, "acumulatedFreeSpinPayout: ", fortuneCoinAssembly.GameData.spinOutcome.acumulatedFreeSpinPayout]
            });
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnEnterNextStage isFreeSpin: " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isFreeSpin), {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 495,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnEnterNextStage"
            });
            this.currentStage = gameProtocolApi.StrategyStages.ENTER_NEXT;
            if (!fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) {
                if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                    fortuneCoinAssembly.GameData.lastSpin = true;
                    fortuneCoinAssembly.GameData.skipPressed = false;
                    this.gameController.betPanelController.setSkipState();
                    this.gameController.showIdleCoins("idle_value_loop", "FreeSpin");
                    this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.winLinesPresented));
                } else if (fortuneCoinAssembly.GameData.spinOutcome.stage == "FreeSpin" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                    if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins != null) {
                        if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins.length > 0) {
                            if (fortuneCoinAssembly.GameData.skipPressed && fortuneCoinAssembly.GameData.lastSpin) {
                                this.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
                                this.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO);
                            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                            fortuneCoinAssembly.GameData.skipPressed = false;
                        }
                        fortuneCoinAssembly.GameData.lastSpin = false;
                    } else this.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO);
                } else if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin" && fortuneCoinAssembly.GameData.spinOutcome.nextStage == "Picker") {
                    this.nextState(null);
                    this.gameController.betPanelController.setFSSpinState();
                    this.gameController.pickerController.initPickerEntry();
                } else if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins != null) {
                    if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.lineWins.length > 0) {
                        if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(_hcmn_.Std.string(fortuneCoinAssembly.GameData.coinsFeatureFreeSpin.totalPayout))) {
                            this.gameController.betPanelController.setFSIdleState();
                            this.gameController.showIdleCoins("idle_value_loop", "FreeSpin");
                            this.gameController.winCycleController.startWinCycle("FreeSpin", fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.totalPayout, $bind(this, this.winLinesPresented));
                        } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                    }
                } else if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered) this.gameController.showRetriggerScreen();
                else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
            } else fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnAbortNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnAbortNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 619,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnAbortNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.ABORT_NEXT;
            this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels);
            if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) this.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), true);
            else this.gameController.winMeterController.showMessage("");
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.nextState(null);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnResetNextStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [FreeSpin].handleOnResetNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "FreeSpinStrategy.hx",
                lineNumber: 639,
                className: "components.gamecontroller.strategies.FreeSpinStrategy",
                methodName: "handleOnResetNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.RESET_NEXT;
            this.gameController.betPanelController.setFSAbortSpinState();
            _hcmn_.haxe_Timer.delay(function() {
                _g.nextState(null);
            }, 1000);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.nextState = function(payload) {
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.getCurrentStage = function() {
            return this.currentStage;
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.winLinesPresented = function() {
            var _g = this;
            _hcmn_.haxe_Timer.delay(function() {
                if (fortuneCoinAssembly.GameData.countUpFinished) {
                    if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "BaseGame") {
                        if (fortuneCoinAssembly.GameData.spinOutcome.freeSpin.isIncrementTriggered) _g.gameController.showRetriggerScreen();
                        else {
                            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(null);
                            _g.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
                        }
                    } else {
                        _g.gameController.reelsPort.setReelCellsVisibility().publish(fortuneCoinAssembly.GameData.emptyReelsVisibilityMatrix);
                        _g.gameController.betPanelController.setFSSpinState();
                        _g.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_OUTRO);
                    }
                }
            }, 1000);
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.pickerExit = function(stopCoinAnimation) {
            var isExit = fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin" && fortuneCoinAssembly.GameData.fsJackpotAward != null && fortuneCoinAssembly.GameData.fsJackpotAward.strippedTotalPayout != "" && !fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.fsJackpotAward.totalPayout);
            if (isExit) {
                if (stopCoinAnimation) {
                    fortuneCoinAssembly.GameData.coinsFeatureState = "";
                    fortuneCoinAssembly.GameData.lastSpin = false;
                    fortuneCoinAssembly.GameData.fsJackpotAward = null;
                    this.gameController.winCycleController.resetWinCycle();
                    this.gameController.winCycleController.resetScatters();
                    this.gameController.betPanelController.setSpinState();
                    this.gameController.hideCoins();
                    this.gameController.startSpin();
                    fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
                }
            }
            return isExit;
        };
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnStartGameInitial = function(event) {};
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnBeginNewGame = function(event) {};
        fortuneCoinAssembly.FreeSpinStrategy.prototype.handleOnEndGame = function(event) {};
        fortuneCoinAssembly.FreeSpinStrategy.prototype.onGameRequestedSpin = function() {};
        fortuneCoinAssembly.FreeSpinStrategy.prototype.__class__ = fortuneCoinAssembly.FreeSpinStrategy;
        fortuneCoinAssembly.PickerJackpotBonusStrategy = function(gameController) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker] " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 43,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "new",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.gameController = gameController;
            this.pickerPort = fortuneCoinAssembly.PickerPort.getInstance();
            this.soundController = fortuneCoinAssembly.SoundController.getInstance();
            this.pickerController = fortuneCoinAssembly.PickerController.getInstance();
            this.layerManagerPort = fortuneCoinAssembly.LayerManagerPort.getInstance();
            fortuneCoinAssembly.GameData.isFreeSpin = false;
            fortuneCoinAssembly.GameData.isPicker = true;
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy = ck_implements(fortuneCoinAssembly.PickerJackpotBonusStrategy, gameProtocolApi.IStrategyServices);
        fortuneCoinAssembly.PickerJackpotBonusStrategy.__interfaces__ = [gameProtocolApi.IStrategyServices];
        fortuneCoinAssembly.PickerJackpotBonusStrategy.__name__ = ["fortuneCoinAssembly", "PickerJackpotBonusStrategy"];
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.gameController = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.soundController = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.pickerController = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.pickerPort = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.layerManagerPort = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.currentStage = null;
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnBeforeShowStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnBeforeShowStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 57,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnBeforeShowStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_SHOW;
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                _g.pickerController.displayFSCounter();
                _g.gameController.layerController.updateBackground();
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.GameData.setPickerChoices(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo.choices);
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotAward(gameLogicResponse);
                _g.gameController.updateJackpotValues();
                _g.gameController.baseGameController.detectCoinFeatureStage(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"));
                if (fortuneCoinAssembly.GameData.coinsFeatureResume == "BaseGame") _g.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
                else if (fortuneCoinAssembly.GameData.coinsFeatureResume == "FreeSpin") {
                    fortuneCoinAssembly.GameData.scatterWin = fortuneCoinAssembly.Parser.parseScatterWin(gameLogicResponse);
                    _g.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels);
                }
                fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, "BaseGame"), "BaseGame");
                fortuneCoinAssembly.GameData.setCoinsFeature(fortuneCoinAssembly.Parser.parseCoinsFeature(gameLogicResponse, ""), "");
                _g.gameController.betPanelController.setResumeState();
                fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
                if (!fortuneCoinAssembly.ExternalService.moneyFormatter.isZero(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout)) _g.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), true);
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                _g.gameController.layerController.updateVisibility();
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL);
                _g.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT);
                _g.nextState(null);
                _g.gameController.layerController.showPopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME, [_g.getString("FS_RESUME_0")]);
                _g.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            });
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnStartGameInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnStartGameInProgressStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 137,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnStartGameInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS;
            this.gameController.layerController.enablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            fortuneCoinAssembly.ExternalService.bus.getChannel("TBus").publish("testable:availablePicks", {
                instanceId: "BonusPicker",
                pickerChoices: {
                    'Start': "Start"
                }
            });
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnStartGameInProgressNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnStartGameInProgressNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 153,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnStartGameInProgressNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_IN_PROGRESS_NEXT;
            if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null) {
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome != null) this.pickerController.presentAwardedBoosts();
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo != null) fortuneCoinAssembly.GameData.setPickerChoices(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo.choices);
            }
            this.pickerController.initPickerInstantly();
            this.pickerPort.getDisableAll().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
            if (fortuneCoinAssembly.GameData.coinsFeatureState == "FreeSpin") this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.freeSpin.outcome.reelPicturePresentation.reels);
            else this.gameController.reelsPort.setReelPicture().publish(fortuneCoinAssembly.GameData.spinOutcome.baseGame.outcome.reelPicturePresentation.reels);
            this.gameController.layerController.hidePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            this.gameController.layerController.disablePopup(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME);
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnBeforeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnBeforeRequest " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 192,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnBeforeRequest",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.BEFORE_REQUEST;
            this.gameController.betPanelController.setSpinState();
            this.pickerController.displayFSCounter();
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            var picked = [];
            if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null) {
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome != null) {
                    if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo != null) fortuneCoinAssembly.GameData.setPickerChoices(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.bonusInfo.choices);
                    if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins != null) {
                        var _g1 = 0;
                        var _g = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks.length;
                        while (_g1 < _g) {
                            var i = _g1++;
                            picked.push(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].name);
                        }
                    }
                }
                this.pickerPort.getEnablePicks().publish(new fortuneCoinAssembly.PicksDisabledPayload(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP, picked));
            }
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnMakeRequest = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnMakeRequest " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 221,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnMakeRequest",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.MAKE_REQUEST;
            var sliderInput = {
                betPerPattern: this.gameController.stakeItemController.getBetPerPattern(),
                patternsBet: this.gameController.stakeItemController.getPatternsBet()
            };
            var payload = {
                action: "play",
                sliderInput: sliderInput,
                selectedPickerBonusChoice: [fortuneCoinAssembly.GameData.currentPick]
            };
            fortuneCoinAssembly.ExternalService.gameProtocol.sendPlayRequest(payload);
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnResolveStage = function(event) {
            var _g = this;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnResolveStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 240,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnResolveStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.RESOLVE;
            var gameLogicResponse = event.getPayload().response;
            fortuneCoinAssembly.ExternalService.slotParser.parseSpinOutcome(gameLogicResponse).then(function(spinOutcome) {
                fortuneCoinAssembly.GameData.setSpinOutcome(spinOutcome);
                fortuneCoinAssembly.Parser.parseStripLayersSectionMappings(gameLogicResponse);
                fortuneCoinAssembly.Parser.parseSchemaSetSectionMappings(gameLogicResponse);
                _g.gameController.setStripLayerIds();
                _g.gameController.setSchemaSet();
                fortuneCoinAssembly.GameData.coinsFeatureState = fortuneCoinAssembly.Parser.setCoinsFeatureState(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotMultiplier(gameLogicResponse);
                fortuneCoinAssembly.Parser.setJackpotAward(gameLogicResponse);
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage != "Picker") _g.gameController.dynamicSymbolReplacement();
                _hcmn_.haxe_Timer.delay(function() {
                    _g.gameController.updateJackpotValues();
                }, 1000);
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null) {
                    _g.pickerController.showLastPick();
                    _g.pickerController.initTrail();
                    _g.pickerController.getSoundPickerLevel();
                    _g.pickerController.presentAwardedBoost();
                }
                if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") {
                    _g.pickerPort.getDisableAll().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
                    _g.pickerPort.getUpdateState().publish("selected");
                }
            });
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnInProgressStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnInProgressStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 300,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnInProgressStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnExitStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnExitStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 309,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnExitStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.EXIT;
            this.gameController.betPanelController.setSpinState();
            this.pickerController.displayFSCounter();
            var allPicks = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks;
            var allAwarded = false;
            var _g1 = 0;
            var _g = allPicks.length;
            while (_g1 < _g) {
                var i = _g1++;
                if (allPicks[i].value == "ABCD") allAwarded = true;
            }
            var awardCapExceeded = fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded;
            if (!awardCapExceeded) {
                if (allAwarded) this.pickerController.presentAllAwarded();
                else this.pickerController.presentSingleAward();
            } else this.pickerController.presentAwardCap();
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnEnterNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnEnterNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 351,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnEnterNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.currentStage = gameProtocolApi.StrategyStages.ENTER_NEXT;
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame") {
                if (fortuneCoinAssembly.GameData.spinOutcome.awardCapExceeded) fortuneCoinAssembly.GameData.doNotUpdateBalance = false;
                else fortuneCoinAssembly.GameData.doNotUpdateBalance = true;
            }
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin" && fortuneCoinAssembly.GameData.coinsFeatureState == "BaseGame") {
                this.gameController.winMeterController.showWinCountUp(fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, fortuneCoinAssembly.GameData.getCustomBigWin(fortuneCoinAssembly.GameData.numberOfLines, fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout, false), true);
                fortuneCoinAssembly.GameData.lastAccumulatedPayout = fortuneCoinAssembly.GameData.spinOutcome.acumulatedPayout;
                this.gameController.layerController.initTween(fortuneCoinAssembly.TransitionConstants.INIT_FS_INTRO);
            } else this.pickerController.presentWin();
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnAbortNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnAbortNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 380,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnAbortNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            fortuneCoinAssembly.ExternalService.gameProtocol.disableConsoleOptions();
            this.pickerPort.getDisableAll().publish(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP);
            if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus != null) {
                var picks = [];
                if (fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome != null) {
                    var _g1 = 0;
                    var _g = fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks.length;
                    while (_g1 < _g) {
                        var i = _g1++;
                        picks.push(fortuneCoinAssembly.GameData.spinOutcome.pickerBonus.outcome.pickerWins[0].picks[i].name);
                    }
                }
                this.pickerPort.getUpdateState().publish("idle");
            }
            if (fortuneCoinAssembly.GameData.spinOutcome.nextStage == "BaseGame" || fortuneCoinAssembly.GameData.spinOutcome.nextStage == "FreeSpin") this.pickerPort.getUpdateState().publish("selected");
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnResetNextStage = function(event) {
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnResetNextStage " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 407,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnResetNextStage",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnEndGame = function(event) {
            this.currentStage = gameProtocolApi.StrategyStages.END_GAME;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnEndGame " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 417,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnEndGame",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnBeginNewGame = function(event) {
            this.gameController.betPanelController.setIdleState();
            this.currentStage = gameProtocolApi.StrategyStages.BEGIN_NEW_GAME;
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnBeginNewGame " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 425,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnBeginNewGame",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage]
            });
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.handleOnStartGameInitial = function(event) {
            this.currentStage = gameProtocolApi.StrategyStages.START_GAME_INITIAL;
            this.gameController.betPanelController.setIdleState();
            fortuneCoinAssembly.ExternalService.gameProtocol.enableConsoleOptions();
            haxe.Log.trace("[GAME_CONTROLLER] [Strategy] [Picker].handleOnStartGameInitial " + fortuneCoinAssembly.GameData.spinOutcome.stage, {
                fileName: "PickerJackpotBonusStrategy.hx",
                lineNumber: 436,
                className: "components.gamecontroller.strategies.PickerJackpotBonusStrategy",
                methodName: "handleOnStartGameInitial",
                customParams: [fortuneCoinAssembly.GameData.spinOutcome.nextStage, fortuneCoinAssembly.GameData.coinsFeatureState]
            });
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.nextState = function(payload) {
            fortuneCoinAssembly.ExternalService.gameProtocol.nextState(payload);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.onGameRequestedSpin = function() {
            this.nextState(null);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.getCurrentStage = function() {
            return this.currentStage;
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.getString = function(string) {
            return fortuneCoinAssembly.ExternalService.translationManager.stringLookup(string);
        };
        fortuneCoinAssembly.PickerJackpotBonusStrategy.prototype.__class__ = fortuneCoinAssembly.PickerJackpotBonusStrategy;
        fortuneCoinAssembly.StrategyFactory = function(gameController) {
            haxe.Log.trace("[GAME_CONTROLLER] StrategyFactory", {
                fileName: "StrategyFactory.hx",
                lineNumber: 15,
                className: "components.gamecontroller.strategies.StrategyFactory",
                methodName: "new"
            });
            this.gameController = gameController;
        };
        fortuneCoinAssembly.StrategyFactory = ck_implements(fortuneCoinAssembly.StrategyFactory, gameProtocolApi.IStrategyFactory);
        fortuneCoinAssembly.StrategyFactory.__interfaces__ = [gameProtocolApi.IStrategyFactory];
        fortuneCoinAssembly.StrategyFactory.__name__ = ["fortuneCoinAssembly", "StrategyFactory"];
        fortuneCoinAssembly.StrategyFactory.prototype.gameController = null;
        fortuneCoinAssembly.StrategyFactory.prototype.strategy = null;
        fortuneCoinAssembly.StrategyFactory.prototype.create = function(nextStage) {
            var type = fortuneCoinAssembly.StrategyFactory.getType(nextStage);
            haxe.Log.trace("[GAME_CONTROLLER] create strategy type = " + type, {
                fileName: "StrategyFactory.hx",
                lineNumber: 21,
                className: "components.gamecontroller.strategies.StrategyFactory",
                methodName: "create"
            });
            switch (type) {
                case "BaseGame":
                    this.strategy = new fortuneCoinAssembly.BaseGameStrategy(this.gameController);
                    break;
                case "FreeSpin":
                    this.strategy = new fortuneCoinAssembly.FreeSpinStrategy(this.gameController);
                    break;
                case "Picker":
                    this.strategy = new fortuneCoinAssembly.PickerJackpotBonusStrategy(this.gameController);
                    break;
                default:
                    this.strategy = new fortuneCoinAssembly.BaseGameStrategy(this.gameController);
            }
            fortuneCoinAssembly.StrategyFactory.stageArray.push(nextStage);
            haxe.Log.trace("[im] StrategyFactory.stageArray = " + _hcmn_.Std.string(fortuneCoinAssembly.StrategyFactory.stageArray), {
                fileName: "StrategyFactory.hx",
                lineNumber: 30,
                className: "components.gamecontroller.strategies.StrategyFactory",
                methodName: "create"
            });
            return this.strategy;
        };
        fortuneCoinAssembly.StrategyFactory.prototype.getStrategy = function() {
            return this.strategy;
        };
        fortuneCoinAssembly.StrategyFactory.getType = function(nextStage) {
            if (nextStage == "BaseGame") return nextStage;
            if (nextStage.indexOf("FreeSpin") != -1) return "FreeSpin";
            if (nextStage.indexOf("Picker") != -1) return "Picker";
            return null;
        };
        fortuneCoinAssembly.StrategyFactory.prototype.__class__ = fortuneCoinAssembly.StrategyFactory;
        fortuneCoinAssembly.DynamicStripes = function() {};
        fortuneCoinAssembly.DynamicStripes.__name__ = ["fortuneCoinAssembly", "DynamicStripes"];
        fortuneCoinAssembly.DynamicStripes.prototype.activeReels = null;
        fortuneCoinAssembly.DynamicStripes.prototype.originalReels = null;
        fortuneCoinAssembly.DynamicStripes.prototype.replacementSymbol = null;
        fortuneCoinAssembly.DynamicStripes.prototype.replacementMap = null;
        fortuneCoinAssembly.DynamicStripes.prototype.init = function() {
            this.originalReels = fortuneCoinAssembly.GameData.slotDefinition.reels;
            this.replacementSymbol = fortuneCoinAssembly.Parser.parseReplacementSymbol();
            this.replacementMap = fortuneCoinAssembly.Parser.parseReplacementMap();
        };
        fortuneCoinAssembly.DynamicStripes.prototype.cloneReels = function(reels) {
            return JSON.parse(JSON.stringify(reels));
        };
        fortuneCoinAssembly.DynamicStripes.prototype.updateStripes = function(stripLayerIds) {
            this.activeReels = this.cloneReels(this.originalReels);
            var _g1 = 0;
            var _g = this.originalReels.length;
            while (_g1 < _g) {
                var i = _g1++;
                var originalSymbols = this.originalReels[i].stripes[stripLayerIds[i]].symbols;
                var activeSymbols = this.activeReels[i].stripes[stripLayerIds[i]].symbols;
                var _g3 = 0;
                var _g2 = originalSymbols.length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    if (originalSymbols[j] == this.replacementSymbol) activeSymbols[j] = this.replacementMap.get(fortuneCoinAssembly.GameData.schemaSet[i]);
                }
                this.activeReels[i].stripes[stripLayerIds[i]].symbols = activeSymbols;
            }
            return this.activeReels;
        };
        fortuneCoinAssembly.DynamicStripes.prototype.__class__ = fortuneCoinAssembly.DynamicStripes;
        fortuneCoinAssembly.LayerManager = function(context, componentPort) {
            this.addedToStage = false;
            this.context = context;
            this.port = componentPort;
            this.port.getTween().subscribe($bind(this, this.handleTween));
            this.port.getReset().subscribe($bind(this, this.handleReset));
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getShake().subscribe($bind(this, this.handleShake));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
            this.port.getUpdateLayoutStarted().subscribe($bind(this, this.handleUpdateLayoutStarted));
            this.port.getUpdateLayoutCompleted().subscribe($bind(this, this.handleUpdateLayoutCompleted));
        };
        fortuneCoinAssembly.LayerManager.__name__ = ["fortuneCoinAssembly", "LayerManager"];
        fortuneCoinAssembly.LayerManager.prototype.port = null;
        fortuneCoinAssembly.LayerManager.prototype.context = null;
        fortuneCoinAssembly.LayerManager.prototype.view = null;
        fortuneCoinAssembly.LayerManager.prototype.layerContainer = null;
        fortuneCoinAssembly.LayerManager.prototype.addedToStage = null;
        fortuneCoinAssembly.LayerManager.prototype.vmComponent = null;
        fortuneCoinAssembly.LayerManager.prototype.initView = function() {
            haxe.Log.trace("[LayerManager] [initView]", {
                fileName: "LayerManager.hx",
                lineNumber: 47,
                className: "components.layermanager.LayerManager",
                methodName: "initView"
            });
            this.view = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("layer-manager-assets/layer_manager.viewbuilder.json"));
            this.vmComponent = new fortuneCoinAssembly.LayerManagerComponent(this.port);
        };
        fortuneCoinAssembly.LayerManager.prototype.handleUpdateLayout = function(e) {
            haxe.Log.trace("[LayerManager] [handleUpdateLayout]", {
                fileName: "LayerManager.hx",
                lineNumber: 56,
                className: "components.layermanager.LayerManager",
                methodName: "handleUpdateLayout"
            });
            if (this.view == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) {
                    var container;
                    container = (function($this) {
                        var $r;
                        var this3 = $this.view.getChildComponents();
                        $r = this3.get(layerId);
                        return $r;
                    }(this));
                    var containerDO = container.getDisplayObject();
                    if (!this.addedToStage) stage.addChild(containerDO);
                    containerDO.setX(layerPayload.left);
                    containerDO.setY(layerPayload.top);
                    containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
                    containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
                    containerDO.setZIndex(layerPayload.zIndex);
                    this.vmComponent.onLayoutUpdate(cfg);
                }
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.LayerManager.prototype.handleUpdateLayoutStarted = function(e) {
            haxe.Log.trace("[LayerManager] [handleUpdateLayoutStarted] ", {
                fileName: "LayerManager.hx",
                lineNumber: 94,
                className: "components.layermanager.LayerManager",
                methodName: "handleUpdateLayoutStarted"
            });
            this.vmComponent.gameLayoutUpdateStarted();
        };
        fortuneCoinAssembly.LayerManager.prototype.handleUpdateLayoutCompleted = function(e) {
            haxe.Log.trace("[LayerManager] [handleUpdateLayoutCompleted] ", {
                fileName: "LayerManager.hx",
                lineNumber: 100,
                className: "components.layermanager.LayerManager",
                methodName: "handleUpdateLayoutCompleted"
            });
            this.vmComponent.onGameLayoutUpdateCompleted();
        };
        fortuneCoinAssembly.LayerManager.prototype.handleShow = function(e) {
            this.vmComponent.show(e.getPayload());
        };
        fortuneCoinAssembly.LayerManager.prototype.handleHide = function(e) {
            this.vmComponent.hide(e.getPayload());
        };
        fortuneCoinAssembly.LayerManager.prototype.handleShake = function(e) {
            this.vmComponent.initShake(e.getPayload());
        };
        fortuneCoinAssembly.LayerManager.prototype.handleTween = function(e) {
            this.vmComponent.iniTween(e.getPayload());
        };
        fortuneCoinAssembly.LayerManager.prototype.handleReset = function(e) {
            this.vmComponent.reset(e.getPayload());
        };
        fortuneCoinAssembly.LayerManager.prototype.__class__ = fortuneCoinAssembly.LayerManager;
        fortuneCoinAssembly.LayerManagerPort = function(bus) {
            this.updateLayoutCompleted = new clientkernelEventbusApi.Topic("layermanager:updateLayoutCompleted");
            this.updateLayoutStarted = new clientkernelEventbusApi.Topic("layermanager:updateLayoutStarted");
            this.updateLayout = new clientkernelEventbusApi.Topic("layermanager:updateLayout");
            this.transitionUpdateCompleted = new clientkernelEventbusApi.Topic("layermanager:transitionUpdateCompleted");
            this.transitionCompleted = new clientkernelEventbusApi.Topic("layermanager:transitionCompleted");
            this.show = new clientkernelEventbusApi.Topic("layermanager:show");
            this.hide = new clientkernelEventbusApi.Topic("layermanager:hide");
            this.reset = new clientkernelEventbusApi.Topic("layermanager:reset");
            this.shake = new clientkernelEventbusApi.Topic("layermanager:shake");
            this.tween = new clientkernelEventbusApi.Topic("layermanager:tween");
            this.tween.connect(bus);
            this.shake.connect(bus);
            this.hide.connect(bus);
            this.show.connect(bus);
            this.reset.connect(bus);
            this.transitionCompleted.connect(bus);
            this.transitionUpdateCompleted.connect(bus);
            this.updateLayout.connect(bus);
            this.updateLayoutStarted.connect(bus);
            this.updateLayoutCompleted.connect(bus);
        };
        fortuneCoinAssembly.LayerManagerPort.__name__ = ["fortuneCoinAssembly", "LayerManagerPort"];
        fortuneCoinAssembly.LayerManagerPort.prototype.tween = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.shake = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.reset = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.hide = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.show = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.transitionCompleted = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.transitionUpdateCompleted = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.updateLayout = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.updateLayoutStarted = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.updateLayoutCompleted = null;
        fortuneCoinAssembly.LayerManagerPort.prototype.getTween = function() {
            return this.tween;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getTransitionCompleted = function() {
            return this.transitionCompleted;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getTransitionUpdateCompleted = function() {
            return this.transitionUpdateCompleted;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getUpdateLayoutCompleted = function() {
            return this.updateLayoutCompleted;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getReset = function() {
            return this.reset;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getShake = function() {
            return this.shake;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.getUpdateLayoutStarted = function() {
            return this.updateLayoutStarted;
        };
        fortuneCoinAssembly.LayerManagerPort.singleton = null;
        fortuneCoinAssembly.LayerManagerPort.getInstance = function() {
            if (fortuneCoinAssembly.LayerManagerPort.singleton == null) fortuneCoinAssembly.LayerManagerPort.singleton = new fortuneCoinAssembly.LayerManagerPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.LayerManagerPort.singleton;
        };
        fortuneCoinAssembly.LayerManagerPort.prototype.__class__ = fortuneCoinAssembly.LayerManagerPort;
        fortuneCoinAssembly.ShakeProperties = function(scenarioId, multiplier, limit, step, time) {
            this.time = time;
            this.step = step;
            this.limit = limit;
            this.multiplier = multiplier;
            this.scenarioId = scenarioId;
        };
        fortuneCoinAssembly.ShakeProperties.__name__ = ["fortuneCoinAssembly", "ShakeProperties"];
        fortuneCoinAssembly.ShakeProperties.prototype.scenarioId = null;
        fortuneCoinAssembly.ShakeProperties.prototype.multiplier = null;
        fortuneCoinAssembly.ShakeProperties.prototype.limit = null;
        fortuneCoinAssembly.ShakeProperties.prototype.step = null;
        fortuneCoinAssembly.ShakeProperties.prototype.time = null;
        fortuneCoinAssembly.ShakeProperties.prototype.__class__ = fortuneCoinAssembly.ShakeProperties;
        fortuneCoinAssembly.LayerManagerComponent = function(port) {
            haxe.Log.trace("[LayerManagerComponent]", {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 49,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "new"
            });
            this.implPort = port;
            this.maskSize = [];
            var cfg = fortuneCoinAssembly.Assets.getAsset("layer_manager_definition_config.json");
            var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
            this.stage = this1.get("skgl_0");
            this.tweens = new _hcmn_.haxe_ds_StringMap();
            this.activeScenarios = new _hcmn_.haxe_ds_StringMap();
            this.scenarios = new _hcmn_.haxe_ds_StringMap();
            this.initProperties = new _hcmn_.haxe_ds_StringMap();
            var _g = 0;
            var _g1 = _hcmn_.Reflect.fields(cfg.scenarios);
            while (_g < _g1.length) {
                var scenarioId = _g1[_g];
                ++_g;
                var element = _hcmn_.Reflect.field(cfg.scenarios, scenarioId);
                var layerProps = [];
                var _g2 = 0;
                var _g3 = _hcmn_.Reflect.fields(element);
                while (_g2 < _g3.length) {
                    var properties = _g3[_g2];
                    ++_g2;
                    var props = _hcmn_.Reflect.field(element, properties);
                    var _g5 = 0;
                    var _g4 = props.length;
                    while (_g5 < _g4) {
                        var i = _g5++;
                        layerProps[i] = {
                            id: props[i].id,
                            x: props[i].x,
                            y: props[i].y,
                            rotation: props[i].r,
                            alpha: props[i].a,
                            time: props[i].time,
                            mask: props[i].mask,
                            type: props[i].type
                        };
                    }
                }
                var allLayers = {
                    layers: layerProps
                };
                this.activeScenarios.set(scenarioId, false);
                this.scenarios.set(scenarioId, allLayers);
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.__name__ = ["fortuneCoinAssembly", "LayerManagerComponent"];
        fortuneCoinAssembly.LayerManagerComponent.prototype.stage = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.tweens = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.activeScenarios = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.scenarios = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.initProperties = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.implPort = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.maskSize = null;
        fortuneCoinAssembly.LayerManagerComponent.prototype.iniTween = function(scenarioId) {
            var _g2 = this;
            haxe.Log.trace("LAYER_MANAGER.activate() " + scenarioId, {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 97,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "iniTween",
                customParams: [this.tweens.exists(scenarioId)]
            });
            if (!this.tweens.exists(scenarioId)) {
                var value = [];
                this.tweens.set(scenarioId, value);
                this.activeScenarios.set(scenarioId, true);
                var totalTweens = 0;
                var currentTween = 0;
                var viewManager = this.stage.getChildByID("LAYER_MANAGER");
                viewManager.setWidth(this.stage.getWidth());
                viewManager.setHeight(this.stage.getHeight());
                var _g1 = 0;
                var _g = this.scenarios.get(scenarioId).layers.length;
                while (_g1 < _g) {
                    var i = _g1++;
                    var layerProperties = this.scenarios.get(scenarioId).layers[i];
                    var layerId = layerProperties.id;
                    var dObj = this.stage.getChildByID(layerId);
                    viewManager.addChild(dObj);
                    var type = layerProperties.type;
                    var time = layerProperties.time;
                    var xPos = dObj.getX();
                    var yPos = dObj.getY();
                    this.tweens.get(scenarioId).push(displayEngineUtils.TweenX.to(dObj, {
                        x: xPos + layerProperties.x,
                        y: yPos + layerProperties.y,
                        rotation: layerProperties.rotation,
                        alpha: layerProperties.alpha
                    }, time, null, null, null, null, null, null, null, {
                        fileName: "LayerManagerComponent.hx",
                        lineNumber: 125,
                        className: "components.layermanager.subcomponents.LayerManagerComponent",
                        methodName: "iniTween"
                    }).ease(displayEngineUtils.EaseX.sineIn).onFinish(function() {
                        currentTween++;
                        if (currentTween >= totalTweens) {
                            _g2.reset(scenarioId);
                            _g2.implPort.getTransitionCompleted().publish(scenarioId);
                            _g2.activeScenarios.set(scenarioId, false);
                        }
                    }));
                }
                totalTweens = this.tweens.get(scenarioId).length;
            } else return;
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.deactivate = function(scenarioId) {};
        fortuneCoinAssembly.LayerManagerComponent.prototype.onLayoutUpdate = function(cfg) {
            haxe.Log.trace("LAYER_MANAGER.onLayoutUpdate()", {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 170,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "onLayoutUpdate"
            });
            var viewManager = this.stage.getChildByID("LAYER_MANAGER");
            viewManager.setWidth(this.stage.getWidth());
            viewManager.setHeight(this.stage.getHeight());
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.gameLayoutUpdateStarted = function() {
            var $it0 = this.scenarios.keys();
            while ($it0.hasNext()) {
                var scenarioId = $it0.next();
                if (this.activeScenarios.get(scenarioId)) {
                    haxe.Log.trace("LAYER_MANAGER.handleUpdateLayoutStarted() ", {
                        fileName: "LayerManagerComponent.hx",
                        lineNumber: 193,
                        className: "components.layermanager.subcomponents.LayerManagerComponent",
                        methodName: "gameLayoutUpdateStarted",
                        customParams: [_hcmn_.Std.string(this.activeScenarios.get(scenarioId)) + scenarioId]
                    });
                    this.reset(scenarioId);
                }
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.onGameLayoutUpdateCompleted = function() {
            var _g = this;
            haxe.Log.trace("LAYER_MANAGER.onGameLayoutUpdateCompleted() ", {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 201,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "onGameLayoutUpdateCompleted"
            });
            var _g1 = 0;
            var _g2 = this.stage.getChildren().length;
            while (_g1 < _g2) {
                var i = _g1++;
                var layerId = this.stage.getChildAt(i).getName();
                var dObj = this.stage.getChildByID(layerId);
                var props = {
                    x: dObj.getX(),
                    y: dObj.getY(),
                    rotation: dObj.getRotation(),
                    alpha: dObj.getAlpha()
                };
                this.initProperties.set(layerId, props);
            }
            var $it0 = this.activeScenarios.keys();
            while ($it0.hasNext()) {
                var scenarioId = $it0.next();
                var scenarioId1 = [scenarioId];
                if (this.activeScenarios.get(scenarioId1[0])) _hcmn_.haxe_Timer.delay((function(scenarioId1) {
                    return function() {
                        _g.implPort.getTransitionUpdateCompleted().publish(scenarioId1[0]);
                    };
                })(scenarioId1), 0);
                this.activeScenarios.set(scenarioId1[0], false);
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.show = function(scenarioId) {
            haxe.Log.trace("LAYER_MANAGER.show() " + scenarioId, {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 230,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "show"
            });
            var len = this.scenarios.get(scenarioId).layers.length;
            var _g = 0;
            while (_g < len) {
                var i = _g++;
                var layerId = this.scenarios.get(scenarioId).layers[i].id;
                if (this.stage.getChildByID(layerId) != null) {
                    var dObj = this.stage.getChildByID(layerId);
                    dObj.setVisible(true);
                }
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.hide = function(scenarioId) {
            haxe.Log.trace("LAYER_MANAGER.hide() " + scenarioId, {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 246,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "hide"
            });
            var len = this.scenarios.get(scenarioId).layers.length;
            var _g = 0;
            while (_g < len) {
                var i = _g++;
                var layerId = this.scenarios.get(scenarioId).layers[i].id;
                if (this.stage.getChildByID(layerId) != null) {
                    var dObj = this.stage.getChildByID(layerId);
                    dObj.setVisible(false);
                }
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.reset = function(scenarioId) {
            haxe.Log.trace("LAYER_MANAGER.reset() " + _hcmn_.Std.string(this.activeScenarios.get(scenarioId)), {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 261,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "reset",
                customParams: [scenarioId]
            });
            var scenarioActive = this.activeScenarios.get(scenarioId);
            if (scenarioActive) {
                if (this.tweens.exists(scenarioId)) {
                    var _g1 = 0;
                    var _g = this.tweens.get(scenarioId).length;
                    while (_g1 < _g) {
                        var i = _g1++;
                        var tween = this.tweens.get(scenarioId)[i];
                        tween.onFinish(null);
                        tween.stop();
                        var totalTime = tween.get_totalTime();
                        tween["goto"](totalTime, false);
                        tween.onHead($bind(tween, tween.stop));
                        tween = null;
                    }
                    this.tweens.remove(scenarioId);
                }
            }
            var viewManager = this.stage.getChildByID("LAYER_MANAGER");
            viewManager.setWidth(this.stage.getWidth());
            viewManager.setHeight(this.stage.getHeight());
            var totalChildren = viewManager.getChildren().length;
            var len = viewManager.getChildren().length;
            var _g2 = 0;
            while (_g2 < len) {
                var i1 = _g2++;
                totalChildren--;
                var dObj = viewManager.getChildAt(totalChildren);
                this.stage.addChild(dObj);
            }
            viewManager.setX(0);
            viewManager.setY(0);
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.initShake = function(props) {
            var _g = this;
            var viewManager = this.stage.getChildByID("LAYER_MANAGER");
            var scenarioId = props.scenarioId;
            haxe.Log.trace("[ViewManagerComponent] [initShake] ", {
                fileName: "LayerManagerComponent.hx",
                lineNumber: 312,
                className: "components.layermanager.subcomponents.LayerManagerComponent",
                methodName: "initShake",
                customParams: [props, this.tweens.exists(scenarioId)]
            });
            var rndX = 1;
            var rndY = 1;
            var multiplier = props.multiplier;
            var limit = props.limit;
            var step = props.step;
            var rndDestX = this.getRandomTanValue(-Math.PI / 4, _hcmn_.Math.PI / 4) * multiplier;
            var rndDestY = this.getRandomTanValue(-Math.PI / 4, _hcmn_.Math.PI / 4) * multiplier;
            var sumRndX = 0;
            var sumRndY = 0;
            var initX = viewManager.getX();
            var initY = viewManager.getY();
            var xPos = viewManager.getX();
            var yPos = viewManager.getY();
            viewManager.setX(0);
            viewManager.setY(0);
            if (!this.tweens.exists(scenarioId)) {
                var value = [];
                this.tweens.set(scenarioId, value);
                this.activeScenarios.set(scenarioId, true);
                viewManager.setWidth(this.stage.getWidth());
                viewManager.setHeight(this.stage.getHeight());
                var _g1 = 0;
                var _g2 = this.scenarios.get(scenarioId).layers.length;
                while (_g1 < _g2) {
                    var i = _g1++;
                    var layerProperties = this.scenarios.get(scenarioId).layers[i];
                    var layerId = layerProperties.id;
                    var dObj = this.stage.getChildByID(layerId);
                    viewManager.addChild(dObj);
                }
                this.tweens.get(scenarioId).push(displayEngineUtils.TweenX.to(viewManager, {}, props.time, null, null, null, null, null, null, null, {
                    fileName: "LayerManagerComponent.hx",
                    lineNumber: 352,
                    className: "components.layermanager.subcomponents.LayerManagerComponent",
                    methodName: "initShake"
                }).ease(displayEngineUtils.EaseX.sineIn).onUpdate(function() {
                    xPos = initX + rndX;
                    yPos = initY + rndY;
                    sumRndX += rndX;
                    sumRndY += rndY;
                    viewManager.setX(xPos);
                    viewManager.setY(yPos);
                    if (_hcmn_.Math.abs(sumRndX) < _hcmn_.Math.abs(rndDestX)) rndX = _g.moveToDest(rndX, rndDestX, multiplier, step);
                    else {
                        rndX = _g.getTanValue(rndX, limit, multiplier, step);
                        if (rndX == 0) {
                            rndDestX = _g.getRandomTanValue(-Math.PI / 4, _hcmn_.Math.PI / 4) * multiplier;
                            sumRndX = 0;
                        }
                    }
                    if (_hcmn_.Math.abs(sumRndY) < _hcmn_.Math.abs(rndDestY)) rndY = _g.moveToDest(rndY, rndDestY, multiplier, step);
                    else {
                        rndY = _g.getTanValue(rndY, limit, multiplier, step);
                        if (rndY == 0) {
                            rndDestY = _g.getRandomTanValue(-Math.PI / 4, _hcmn_.Math.PI / 4) * multiplier;
                            sumRndY = 0;
                        }
                    }
                }).onFinish(function() {
                    _g.reset(scenarioId);
                    viewManager.setX(0);
                    viewManager.setY(0);
                    _g.activeScenarios.set(scenarioId, false);
                }));
            }
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.getRandomTanValue = function(min, max) {
            return _hcmn_.Math.tan(_hcmn_.Math.random() * (max - min) + min);
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.getTanValue = function(input, limit, multiplier, step) {
            var value = input;
            if (value < -limit) value = this.getRandomTanValue(_hcmn_.Math.atan(value / multiplier), _hcmn_.Math.atan((value + step) / multiplier)) * multiplier;
            else if (value > limit) value = this.getRandomTanValue(_hcmn_.Math.atan(value / multiplier), _hcmn_.Math.atan((value - step) / multiplier)) * multiplier;
            else value = 0;
            return value;
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.moveToDest = function(input, dest, multiplier, step) {
            var value = input;
            if (value < dest) value = this.getRandomTanValue(_hcmn_.Math.atan(value / multiplier), _hcmn_.Math.atan((value + step) / multiplier)) * multiplier;
            else value = this.getRandomTanValue(_hcmn_.Math.atan(value / multiplier), _hcmn_.Math.atan((value - step) / multiplier)) * multiplier;
            return value;
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.getMask = function(points, paddingX, paddingY, alpha) {
            if (alpha == null) alpha = 0;
            if (paddingY == null) paddingY = 0;
            if (paddingX == null) paddingX = 0;
            var mask = this.getGraphics(points, 16711680, 0.2);
            mask.setX(paddingX);
            mask.setY(paddingY);
            return mask;
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.getGraphics = function(points, colour, alpha) {
            if (alpha == null) alpha = 1;
            if (colour == null) colour = 16711680;
            var graphics = fortuneCoinAssembly.ExternalService.displayProvider.getFactory().createGraphics();
            graphics.beginFill(colour, alpha);
            graphics.moveTo(points[0][0], points[0][1]);
            var _g = 0;
            while (_g < points.length) {
                var point = points[_g];
                ++_g;
                graphics.lineTo(point[0], point[1]);
            }
            graphics.endFill();
            return graphics;
        };
        fortuneCoinAssembly.LayerManagerComponent.prototype.__class__ = fortuneCoinAssembly.LayerManagerComponent;
        fortuneCoinAssembly.Paytable = function(context) {
            haxe.Log.trace("[Paytable]", {
                fileName: "Paytable.hx",
                lineNumber: 19,
                className: "components.paytable.Paytable",
                methodName: "new"
            });
            this.context = context;
            this.port = fortuneCoinAssembly.PaytablePort.getInstance();
            this.paytableView = new fortuneCoinAssembly.PaytableView();
            this.helpView = new fortuneCoinAssembly.HelpView();
            this.port.initializeGame().subscribe($bind(this, this.handleInit));
            this.port.show().subscribe($bind(this, this.handleShow));
            this.port.hide().subscribe($bind(this, this.handleHide));
        };
        fortuneCoinAssembly.Paytable.__name__ = ["fortuneCoinAssembly", "Paytable"];
        fortuneCoinAssembly.Paytable.prototype.port = null;
        fortuneCoinAssembly.Paytable.prototype.context = null;
        fortuneCoinAssembly.Paytable.prototype.paytableView = null;
        fortuneCoinAssembly.Paytable.prototype.helpView = null;
        fortuneCoinAssembly.Paytable.prototype.handleInit = function(e) {
            this.paytableView.initializeContent(e.getPayload());
        };
        fortuneCoinAssembly.Paytable.prototype.handleShow = function(e) {
            if (e.getPayload().type == "help") {
                if (this.helpView.visible) this.handleHide(null);
                else if (this.paytableView.visible) {
                    this.handleHide(null);
                    this.helpView.show(e.getPayload().url);
                } else this.helpView.show(e.getPayload().url);
            } else if (e.getPayload().type == "paytable") {
                if (this.paytableView.visible) this.handleHide(null);
                else if (this.helpView.visible) {
                    this.handleHide(null);
                    this.paytableView.show();
                } else this.paytableView.show();
            }
        };
        fortuneCoinAssembly.Paytable.prototype.handleHide = function(e) {
            if (this.helpView.visible) this.helpView.hide();
            if (this.paytableView.visible) this.paytableView.hide();
        };
        fortuneCoinAssembly.Paytable.prototype.__class__ = fortuneCoinAssembly.Paytable;
        fortuneCoinAssembly.PaytablePort = function(bus) {
            this.onCloseButtonPressedTopic = new clientkernelEventbusApi.Topic("paytable:onCloseButtonPressed");
            this.hideTopic = new clientkernelEventbusApi.Topic("paytable:hide");
            this.showTopic = new clientkernelEventbusApi.Topic("paytable:show");
            this.initializeTopic = new clientkernelEventbusApi.Topic("paytable:initializeGame");
            this.initializeTopic.connect(bus);
            this.showTopic.connect(bus);
            this.hideTopic.connect(bus);
            this.onCloseButtonPressedTopic.connect(bus);
        };
        fortuneCoinAssembly.PaytablePort.__name__ = ["fortuneCoinAssembly", "PaytablePort"];
        fortuneCoinAssembly.PaytablePort.prototype.initializeTopic = null;
        fortuneCoinAssembly.PaytablePort.prototype.showTopic = null;
        fortuneCoinAssembly.PaytablePort.prototype.hideTopic = null;
        fortuneCoinAssembly.PaytablePort.prototype.onCloseButtonPressedTopic = null;
        fortuneCoinAssembly.PaytablePort.prototype.initializeGame = function() {
            return this.initializeTopic;
        };
        fortuneCoinAssembly.PaytablePort.prototype.show = function() {
            return this.showTopic;
        };
        fortuneCoinAssembly.PaytablePort.prototype.hide = function() {
            return this.hideTopic;
        };
        fortuneCoinAssembly.PaytablePort.prototype.onCloseButtonPressed = function() {
            return this.onCloseButtonPressedTopic;
        };
        fortuneCoinAssembly.PaytablePort.singleton = null;
        fortuneCoinAssembly.PaytablePort.getInstance = function() {
            if (fortuneCoinAssembly.PaytablePort.singleton == null) fortuneCoinAssembly.PaytablePort.singleton = new fortuneCoinAssembly.PaytablePort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.PaytablePort.singleton;
        };
        fortuneCoinAssembly.PaytablePort.prototype.__class__ = fortuneCoinAssembly.PaytablePort;
        fortuneCoinAssembly.PaytableJackpotData = function(seed, rtp, feed) {
            this.seed = seed;
            this.rtp = rtp;
            this.feed = feed;
        };
        fortuneCoinAssembly.PaytableJackpotData.__name__ = ["fortuneCoinAssembly", "PaytableJackpotData"];
        fortuneCoinAssembly.PaytableJackpotData.prototype.seed = null;
        fortuneCoinAssembly.PaytableJackpotData.prototype.rtp = null;
        fortuneCoinAssembly.PaytableJackpotData.prototype.feed = null;
        fortuneCoinAssembly.PaytableJackpotData.prototype.__class__ = fortuneCoinAssembly.PaytableJackpotData;
        fortuneCoinAssembly.PaytableLabelContent = function(pageId, labelId, text, style) {
            this.pageId = pageId;
            this.labelId = labelId;
            this.text = text;
            this.style = style;
        };
        fortuneCoinAssembly.PaytableLabelContent.__name__ = ["fortuneCoinAssembly", "PaytableLabelContent"];
        fortuneCoinAssembly.PaytableLabelContent.prototype.pageId = null;
        fortuneCoinAssembly.PaytableLabelContent.prototype.labelId = null;
        fortuneCoinAssembly.PaytableLabelContent.prototype.text = null;
        fortuneCoinAssembly.PaytableLabelContent.prototype.style = null;
        fortuneCoinAssembly.PaytableLabelContent.prototype.__class__ = fortuneCoinAssembly.PaytableLabelContent;
        fortuneCoinAssembly.PaytablePayload = function(rtp, denomination, awardCap, symbolsOutcomes, jackpotData, customField, url) {
            this.rtp = rtp;
            this.denomination = denomination;
            this.awardCap = awardCap;
            this.symbolsOutcomes = symbolsOutcomes;
            this.jackpotData = jackpotData;
            this.customField = customField;
            this.url = url;
        };
        fortuneCoinAssembly.PaytablePayload.__name__ = ["fortuneCoinAssembly", "PaytablePayload"];
        fortuneCoinAssembly.PaytablePayload.prototype.rtp = null;
        fortuneCoinAssembly.PaytablePayload.prototype.denomination = null;
        fortuneCoinAssembly.PaytablePayload.prototype.awardCap = null;
        fortuneCoinAssembly.PaytablePayload.prototype.symbolsOutcomes = null;
        fortuneCoinAssembly.PaytablePayload.prototype.jackpotData = null;
        fortuneCoinAssembly.PaytablePayload.prototype.customField = null;
        fortuneCoinAssembly.PaytablePayload.prototype.url = null;
        fortuneCoinAssembly.PaytablePayload.prototype.__class__ = fortuneCoinAssembly.PaytablePayload;
        fortuneCoinAssembly.PaytableRtp = function(minRTP, maxRTP, singleRTP, minSingleRTP, maxSingleRTP) {
            this.minRTP = minRTP;
            this.maxRTP = maxRTP;
            this.singleRTP = singleRTP;
            this.minSingleRTP = minSingleRTP;
            this.maxSingleRTP = maxSingleRTP;
        };
        fortuneCoinAssembly.PaytableRtp.__name__ = ["fortuneCoinAssembly", "PaytableRtp"];
        fortuneCoinAssembly.PaytableRtp.prototype.minRTP = null;
        fortuneCoinAssembly.PaytableRtp.prototype.maxRTP = null;
        fortuneCoinAssembly.PaytableRtp.prototype.singleRTP = null;
        fortuneCoinAssembly.PaytableRtp.prototype.minSingleRTP = null;
        fortuneCoinAssembly.PaytableRtp.prototype.maxSingleRTP = null;
        fortuneCoinAssembly.PaytableRtp.prototype.__class__ = fortuneCoinAssembly.PaytableRtp;
        fortuneCoinAssembly.PaytableTypePayload = function(type, url) {
            this.url = url;
            this.type = type;
        };
        fortuneCoinAssembly.PaytableTypePayload.__name__ = ["fortuneCoinAssembly", "PaytableTypePayload"];
        fortuneCoinAssembly.PaytableTypePayload.prototype.type = null;
        fortuneCoinAssembly.PaytableTypePayload.prototype.url = null;
        fortuneCoinAssembly.PaytableTypePayload.prototype.__class__ = fortuneCoinAssembly.PaytableTypePayload;
        fortuneCoinAssembly.HelpView = function() {
            this.visible = false;
        };
        fortuneCoinAssembly.HelpView.__name__ = ["fortuneCoinAssembly", "HelpView"];
        fortuneCoinAssembly.HelpView.prototype.iframe = null;
        fortuneCoinAssembly.HelpView.prototype.node = null;
        fortuneCoinAssembly.HelpView.prototype.divWrapper = null;
        fortuneCoinAssembly.HelpView.prototype.visible = null;
        fortuneCoinAssembly.HelpView.prototype.show = function(url) {
            var _g = this;
            var _this = window.document;
            this.iframe = _this.createElement("iframe");
            this.iframe.marginHeight = "0";
            this.iframe.marginWidth = "0";
            this.iframe.src = url;
            this.iframe.frameBorder = "0";
            this.iframe.setAttribute("style", "width:100%; height:100%; background:white; position:absolute;");
            this.iframe.height = window.document.body.scrollHeight + "px";
            var _this1 = window.document;
            this.divWrapper = _this1.createElement("div");
            this.setDivWrapperStyle();
            this.divWrapper.appendChild(this.iframe);
            this.divWrapper.id = "rulesInstance";
            this.node = window.document.body.appendChild(this.divWrapper);
            window.addEventListener("resize", $bind(this, this.onResize));
            this.iframe.addEventListener("load", $bind(this, this.onLoad));
            var openHelpEvt = window.document.createEvent("Event");
            openHelpEvt.initEvent("openHelp", false, false);
            window.dispatchEvent(openHelpEvt);
            _hcmn_.Reflect.setProperty(window, "closeHelp", function() {
                _g.hide();
                var closeHelpEvt = window.document.createEvent("Event");
                closeHelpEvt.initEvent("closeHelp", false, false);
                window.dispatchEvent(closeHelpEvt);
            });
            this.visible = true;
        };
        fortuneCoinAssembly.HelpView.prototype.onLoad = function(e) {
            this.iframe.height = this.iframe.contentWindow.document.body.scrollHeight + "px";
            this.setDivWrapperStyle();
        };
        fortuneCoinAssembly.HelpView.prototype.setDivWrapperStyle = function() {
            this.divWrapper.setAttribute("style", "overflow-x: hidden; overflow-y: auto; width:100%; height:100%; position: absolute; z-index: 99999; background:white; top:0px");
            this.divWrapper.style.setProperty("-webkit-overflow-scrolling", "touch");
            this.divWrapper.style.setProperty("-webkit-user-select", "none");
            this.divWrapper.style.setProperty("-webkit-text-size-adjust", "none");
        };
        fortuneCoinAssembly.HelpView.prototype.onResize = function() {
            this.setDivWrapperStyle();
            _hcmn_.haxe_Timer.delay($bind(this, this.updateIFrame), 0);
        };
        fortuneCoinAssembly.HelpView.prototype.updateIFrame = function() {
            if (this.iframe == null || this.iframe.contentWindow == null || this.iframe.contentWindow.document == null) {
                window.removeEventListener("resize", $bind(this, this.onResize));
                this.iframe.removeEventListener("load", $bind(this, this.onLoad));
                this.divWrapper = null;
                this.iframe = null;
                return;
            }
            this.iframe.height = this.iframe.contentWindow.document.body.scrollHeight + "px";
        };
        fortuneCoinAssembly.HelpView.prototype.closeListener = function(event) {
            if (event.data == "rules:close$id") window.document.removeEventListener("message", $bind(this, this.closeListener));
        };
        fortuneCoinAssembly.HelpView.prototype.hide = function() {
            if (this.node == null) return;
            if (this.node.parentNode != null) this.node.parentNode.removeChild(this.node);
            this.node = null;
            this.visible = false;
            fortuneCoinAssembly.PaytablePort.getInstance().onCloseButtonPressed().publish(null);
        };
        fortuneCoinAssembly.HelpView.prototype.__class__ = fortuneCoinAssembly.HelpView;
        fortuneCoinAssembly.PaytableView = function() {
            this.visible = false;
        };
        fortuneCoinAssembly.PaytableView.__name__ = ["fortuneCoinAssembly", "PaytableView"];
        fortuneCoinAssembly.PaytableView.prototype.iframe = null;
        fortuneCoinAssembly.PaytableView.prototype.node = null;
        fortuneCoinAssembly.PaytableView.prototype.divWrapper = null;
        fortuneCoinAssembly.PaytableView.prototype.minRTP = null;
        fortuneCoinAssembly.PaytableView.prototype.maxRTP = null;
        fortuneCoinAssembly.PaytableView.prototype.singleRTP = null;
        fortuneCoinAssembly.PaytableView.prototype.maxSingleRTP = null;
        fortuneCoinAssembly.PaytableView.prototype.awardCap = null;
        fortuneCoinAssembly.PaytableView.prototype.payLines = null;
        fortuneCoinAssembly.PaytableView.prototype.visible = null;
        fortuneCoinAssembly.PaytableView.prototype.url = null;
        fortuneCoinAssembly.PaytableView.prototype.initializeContent = function(initialPayload) {
            this.minRTP = initialPayload.rtp.minRTP;
            this.maxRTP = initialPayload.rtp.maxRTP;
            this.singleRTP = initialPayload.rtp.singleRTP;
            this.maxSingleRTP = initialPayload.rtp.maxSingleRTP;
            var decimalSeparator = fortuneCoinAssembly.ExternalService.translationManager.stringLookup("rtpDecimalSeparator");
            if (decimalSeparator != null && decimalSeparator != "rtpDecimalSeparator") {
                if (this.minRTP != null) this.minRTP = _hcmn_.StringTools.replace(this.minRTP, ".", decimalSeparator);
                else this.minRTP = null;
                if (this.maxRTP != null) this.maxRTP = _hcmn_.StringTools.replace(this.maxRTP, ".", decimalSeparator);
                else this.maxRTP = null;
                if (this.maxSingleRTP != null) this.maxSingleRTP = _hcmn_.StringTools.replace(this.maxSingleRTP, ".", decimalSeparator);
                else this.maxSingleRTP = null;
            }
            this.awardCap = initialPayload.awardCap;
            this.payLines = initialPayload.customField;
            this.url = initialPayload.url;
            this.setPaytable();
        };
        fortuneCoinAssembly.PaytableView.prototype.setPaytable = function() {
            var _g = this;
            var _this = window.document;
            this.iframe = _this.createElement("iframe");
            this.iframe.marginHeight = "0";
            this.iframe.marginWidth = "0";
            this.iframe.src = this.url + "paytable_" + fortuneCoinAssembly.ExternalService.variableRegistry.get("language") + ".html";
            this.iframe.frameBorder = "0";
            this.iframe.setAttribute("style", "width:100%; height:100%; background:white; position:absolute;");
            this.iframe.height = window.document.body.scrollHeight + "px";
            var _this1 = window.document;
            this.divWrapper = _this1.createElement("div");
            this.setDivWrapperStyle();
            this.divWrapper.appendChild(this.iframe);
            this.divWrapper.id = "paytableInstance";
            this.divWrapper.style.display = "none";
            this.node = window.document.body.appendChild(this.divWrapper);
            this.iframe.onload = function() {
                _g.placePaytableTexts();
            };
        };
        fortuneCoinAssembly.PaytableView.prototype.show = function() {
            var _g = this;
            _hcmn_.Reflect.setProperty(window, "closePaytable", function() {
                var frame = window.document.getElementById("paytableInstance");
                var closePaytableEvt = window.document.createEvent("Event");
                closePaytableEvt.initEvent("closePaytable", false, false);
                window.dispatchEvent(closePaytableEvt);
                _g.hide();
            });
            this.visible = true;
            this.divWrapper.style.display = "block";
        };
        fortuneCoinAssembly.PaytableView.prototype.setDivWrapperStyle = function() {
            this.divWrapper.setAttribute("style", "overflow-x: hidden; overflow-y: auto; width:100%; height:100%; position: absolute; z-index: 99999; background:white; top:0px");
            this.divWrapper.style.setProperty("-webkit-overflow-scrolling", "touch");
            this.divWrapper.style.setProperty("-webkit-user-select", "none");
            this.divWrapper.style.setProperty("-webkit-text-size-adjust", "none");
        };
        fortuneCoinAssembly.PaytableView.prototype.closeListener = function(event) {
            if (event.data == "rules:close$id") window.document.removeEventListener("message", $bind(this, this.closeListener));
        };
        fortuneCoinAssembly.PaytableView.prototype.hide = function() {
            this.visible = false;
            fortuneCoinAssembly.PaytablePort.getInstance().onCloseButtonPressed().publish(null);
            this.divWrapper.style.display = "none";
        };
        fortuneCoinAssembly.PaytableView.prototype.setPaytableText = function(div, texts, style) {
            var paytableDiv = this.iframe.contentDocument.getElementById(div);
            if (paytableDiv != null) {
                paytableDiv.innerText = texts;
                if (style != null) paytableDiv.setAttribute("style", style);
            }
        };
        fortuneCoinAssembly.PaytableView.prototype.placePaytableTexts = function() {
            this.setRTPValues();
            this.setAwardCapValue();
        };
        fortuneCoinAssembly.PaytableView.prototype.setRTPValues = function() {
            if (this.singleRTP != null && this.singleRTP) {
                this.setPaytableText("multipleRTP", "", "display:none;");
                this.setPaytableText("maxSingleRTP", this.maxSingleRTP);
            } else {
                this.setPaytableText("singleRTP", "", "display:none;");
                this.setPaytableText("minRTP", this.minRTP);
                this.setPaytableText("maxRTP", this.maxRTP);
            }
        };
        fortuneCoinAssembly.PaytableView.prototype.setAwardCapValue = function() {
            var showDecimalValueInAwardCap = true;
            var formattedAwardCap = fortuneCoinAssembly.ExternalService.moneyFormatter.format(this.awardCap, true, showDecimalValueInAwardCap);
            this.setPaytableText("awardcap", formattedAwardCap);
        };
        fortuneCoinAssembly.PaytableView.prototype.bgpaylines = function() {
            var baseGamePaylines = new _hcmn_.haxe_ds_StringMap();
            var $it0 = this.payLines.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "bg_")) {
                    var value = this.payLines.get(key);
                    if (_hcmn_.__map_reserved[key] != null) baseGamePaylines.setReserved(key, value);
                    else baseGamePaylines.h[key] = value;
                }
            }
            return baseGamePaylines;
        };
        fortuneCoinAssembly.PaytableView.prototype.fppaylines = function() {
            var freeSpinPaylines = new _hcmn_.haxe_ds_StringMap();
            var $it0 = this.payLines.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "fs_")) {
                    var value = this.payLines.get(key);
                    if (_hcmn_.__map_reserved[key] != null) freeSpinPaylines.setReserved(key, value);
                    else freeSpinPaylines.h[key] = value;
                }
            }
            return freeSpinPaylines;
        };
        fortuneCoinAssembly.PaytableView.prototype.createPaylinesTables = function(elementId, payLines) {
            var paylines = this.bgpaylines();
            var rows = 4;
            var columns = 5;
            var $it0 = paylines.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                var div = this.iframe.contentDocument.getElementById(elementId);
                var tbl = this.iframe.contentDocument.createElement("table");
                tbl.setAttribute("border", "1");
                var th = this.iframe.contentDocument.createElement("th");
                tbl.appendChild(th);
                var _g = 0;
                while (_g < rows) {
                    var k = _g++;
                    var tr = this.iframe.contentDocument.createElement("tr");
                    var _g1 = 0;
                    while (_g1 < columns) {
                        var j = _g1++;
                        var td = this.iframe.contentDocument.createElement("td");
                        tr.appendChild(td);
                        var _g2 = 0;
                        while (_g2 < columns) {
                            var z = _g2++;
                            if ((_hcmn_.__map_reserved[key] != null ? paylines.getReserved(key) : paylines.h[key])[z].x == j && (_hcmn_.__map_reserved[key] != null ? paylines.getReserved(key) : paylines.h[key])[z].y - 9 == k) td.setAttribute("class", "payline-color");
                        }
                    }
                    tbl.appendChild(tr);
                }
                th.setAttribute("colspan", "5");
                div.appendChild(tbl);
                th.setAttribute("id", "tHead" + key);
                tbl.setAttribute("id", "table" + key);
                th.appendChild(this.iframe.contentDocument.createTextNode(_hcmn_.Std.string(_hcmn_.HxOverrides.substr(key, 3, null))));
            }
        };
        fortuneCoinAssembly.PaytableView.prototype.createPaylinesTables2 = function(elementId, payLines) {
            var paylines = this.fppaylines();
            var rows = 12;
            var columns = 5;
            var $it0 = paylines.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                var div = this.iframe.contentDocument.getElementById(elementId);
                var tbl = this.iframe.contentDocument.createElement("table");
                tbl.setAttribute("border", "1");
                var th = this.iframe.contentDocument.createElement("th");
                tbl.appendChild(th);
                var _g = 0;
                while (_g < rows) {
                    var k = _g++;
                    var tr = this.iframe.contentDocument.createElement("tr");
                    var _g1 = 0;
                    while (_g1 < columns) {
                        var j = _g1++;
                        var td = this.iframe.contentDocument.createElement("td");
                        tr.appendChild(td);
                        var _g2 = 0;
                        while (_g2 < columns) {
                            var z = _g2++;
                            if ((_hcmn_.__map_reserved[key] != null ? paylines.getReserved(key) : paylines.h[key])[z].x == j && (_hcmn_.__map_reserved[key] != null ? paylines.getReserved(key) : paylines.h[key])[z].y - 1 == k) td.setAttribute("class", "payline-color");
                        }
                    }
                    tbl.appendChild(tr);
                }
                th.setAttribute("colspan", "5");
                div.appendChild(tbl);
                th.setAttribute("id", "tHead" + key);
                tbl.setAttribute("id", "table" + key);
                th.appendChild(this.iframe.contentDocument.createTextNode(_hcmn_.Std.string(_hcmn_.HxOverrides.substr(key, 3, null))));
            }
        };
        fortuneCoinAssembly.PaytableView.prototype.__class__ = fortuneCoinAssembly.PaytableView;
        fortuneCoinAssembly.Picker = function(context, componentPort) {
            this.addedToStage = false;
            haxe.Log.trace("[Picker] [Picker] " + ": context ", {
                fileName: "Picker.hx",
                lineNumber: 36,
                className: "components.picker.Picker",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            var animAssets = fortuneCoinAssembly.Assets.getAsset("popups_animations_0");
            this.vbView = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(animAssets);
            this.components = new haxe.ds.EnumValueMap();
            this.baseEvents = fortuneCoinAssembly.PickerEvents.getInstance();
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getShowCurrentPick().subscribe($bind(this, this.handlePresentWin));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
            this.port.getDisableAll().subscribe($bind(this, this.handleDisableAll));
            this.port.getEnableAll().subscribe($bind(this, this.handleEnableAll));
            this.port.getEnablePicks().subscribe($bind(this, this.hanldeEnablePicks));
            this.port.getUpdateState().subscribe($bind(this, this.handleUpdateState));
        };
        fortuneCoinAssembly.Picker.__name__ = ["fortuneCoinAssembly", "Picker"];
        fortuneCoinAssembly.Picker.prototype.port = null;
        fortuneCoinAssembly.Picker.prototype.context = null;
        fortuneCoinAssembly.Picker.prototype.view = null;
        fortuneCoinAssembly.Picker.prototype.layerContainer = null;
        fortuneCoinAssembly.Picker.prototype.requestEvent = null;
        fortuneCoinAssembly.Picker.prototype.components = null;
        fortuneCoinAssembly.Picker.prototype.baseEvents = null;
        fortuneCoinAssembly.Picker.prototype.addedToStage = null;
        fortuneCoinAssembly.Picker.prototype.vbView = null;
        fortuneCoinAssembly.Picker.prototype.initView = function() {
            haxe.Log.trace("[Picker] [initView] " + "vbAssetID: " + "picker_layout.viewbuilder.json", {
                fileName: "Picker.hx",
                lineNumber: 58,
                className: "components.picker.Picker",
                methodName: "initView"
            });
            this.view = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("picker_layout.viewbuilder.json"));
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.view.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var constructorIndex;
                var _this = _hcmn_.Type.getEnumConstructs(fortuneCoinAssembly.PickerTypeEnum);
                constructorIndex = _hcmn_.HxOverrides.indexOf(_this, layerId, 0);
                if (constructorIndex < 0) continue;
                var componentEnum = _hcmn_.Type.createEnum(fortuneCoinAssembly.PickerTypeEnum, layerId, null);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.exists(componentEnum[0]);
                        return $r;
                    }(this))) this.registerComponent(componentEnum);
            }
        };
        fortuneCoinAssembly.Picker.prototype.registerContainerComponent = function(componentEnum, componentClass) {
            haxe.Log.trace("[Picker] [registerContainerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum), {
                fileName: "Picker.hx",
                lineNumber: 75,
                className: "components.picker.Picker",
                methodName: "registerContainerComponent"
            });
            var container = this.view.getContainerById(componentEnum[0]);
            var value = _hcmn_.Type.createInstance(componentClass, [container, this.vbView]);
            this.components.set(componentEnum, value);
        };
        fortuneCoinAssembly.Picker.prototype.handleUpdateLayout = function(e) {
            if (this.view == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) {
                    var container;
                    container = (function($this) {
                        var $r;
                        var this3 = $this.view.getChildComponents();
                        $r = this3.get(layerId);
                        return $r;
                    }(this));
                    var containerDO = container.getDisplayObject();
                    if (!this.addedToStage) stage.addChild(containerDO);
                    containerDO.setX(layerPayload.left);
                    containerDO.setY(layerPayload.top);
                    containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
                    containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
                    containerDO.setZIndex(layerPayload.zIndex);
                    if (cfg != null)((function($this) {
                        var $r;
                        var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.PickerTypeEnum, layerId, null);
                        $r = $this.components.get(key);
                        return $r;
                    }(this))).handleLayoutUpdate(cfg);
                }
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.Picker.prototype.registerComponent = function(componentEnum) {
            haxe.Log.trace("[Picker] [registerComponent]", {
                fileName: "Picker.hx",
                lineNumber: 122,
                className: "components.picker.Picker",
                methodName: "registerComponent",
                customParams: [componentEnum]
            });
            this.registerContainerComponent(fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP, fortuneCoinAssembly.PickerView);
        };
        fortuneCoinAssembly.Picker.prototype.handleHide = function(e) {
            haxe.Log.trace("[Picker] [handleHide] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 133,
                className: "components.picker.Picker",
                methodName: "handleHide"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).hide();
        };
        fortuneCoinAssembly.Picker.prototype.handleShow = function(e) {
            haxe.Log.trace("[Picker] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 142,
                className: "components.picker.Picker",
                methodName: "handleShow"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).show(e.getPayload().content);
        };
        fortuneCoinAssembly.Picker.prototype.handleDisableAll = function(e) {
            haxe.Log.trace("[Picker] [handleDisableAll] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 152,
                className: "components.picker.Picker",
                methodName: "handleDisableAll"
            });
            var componentId = e.getPayload();
            if (this.components.exists(componentId)) this.components.get(componentId).disableAll();
        };
        fortuneCoinAssembly.Picker.prototype.handleEnableAll = function(e) {
            haxe.Log.trace("[Picker] [handleEnableAll] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 162,
                className: "components.picker.Picker",
                methodName: "handleEnableAll"
            });
            var componentId = e.getPayload();
            if (this.components.exists(componentId)) this.components.get(componentId).enableAll();
        };
        fortuneCoinAssembly.Picker.prototype.hanldeEnablePicks = function(e) {
            haxe.Log.trace("[Picker] [hanldeEnablePicks] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 173,
                className: "components.picker.Picker",
                methodName: "hanldeEnablePicks"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).enablePicks(e.getPayload().enabledPicks);
        };
        fortuneCoinAssembly.Picker.prototype.handleUpdateState = function(e) {
            haxe.Log.trace("[Picker] [handleUpdateState] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 183,
                className: "components.picker.Picker",
                methodName: "handleUpdateState"
            });
            var componentId = fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP;
            if (this.components.exists(componentId)) this.components.get(componentId).updateState(e.getPayload());
        };
        fortuneCoinAssembly.Picker.prototype.handlePresentWin = function(e) {
            haxe.Log.trace("[Picker] [handlePresentWin] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Picker.hx",
                lineNumber: 194,
                className: "components.picker.Picker",
                methodName: "handlePresentWin"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).showCurrentPick(e.getPayload().value, e.getPayload().position);
        };
        fortuneCoinAssembly.Picker.prototype.__class__ = fortuneCoinAssembly.Picker;
        fortuneCoinAssembly.PickerEvents = function() {
            this.currentPick = new _hcmn_.msignal_Signal1();
            this.btnDisabled = new _hcmn_.msignal_Signal1();
        };
        fortuneCoinAssembly.PickerEvents.__name__ = ["fortuneCoinAssembly", "PickerEvents"];
        fortuneCoinAssembly.PickerEvents.prototype.currentPick = null;
        fortuneCoinAssembly.PickerEvents.prototype.btnDisabled = null;
        fortuneCoinAssembly.PickerEvents.singleton = null;
        fortuneCoinAssembly.PickerEvents.getInstance = function() {
            if (fortuneCoinAssembly.PickerEvents.singleton == null) fortuneCoinAssembly.PickerEvents.singleton = new fortuneCoinAssembly.PickerEvents();
            return fortuneCoinAssembly.PickerEvents.singleton;
        };
        fortuneCoinAssembly.PickerEvents.prototype.__class__ = fortuneCoinAssembly.PickerEvents;
        fortuneCoinAssembly.PickerPort = function(bus) {
            this.updateLayout = new clientkernelEventbusApi.Topic("picker:updateLayout");
            this.hide = new clientkernelEventbusApi.Topic("picker:hide");
            this.enableAll = new clientkernelEventbusApi.Topic("picker:enableAll");
            this.disableAll = new clientkernelEventbusApi.Topic("picker:disableAll");
            this.pick = new clientkernelEventbusApi.Topic("picker:pick");
            this.enable = new clientkernelEventbusApi.Topic("picker:enable");
            this.updateState = new clientkernelEventbusApi.Topic("picker:updateState");
            this.showCurrentPick = new clientkernelEventbusApi.Topic("picker:showCurrentPick");
            this.show = new clientkernelEventbusApi.Topic("picker:show");
            this.pick.connect(bus);
            this.disableAll.connect(bus);
            this.enableAll.connect(bus);
            this.updateState.connect(bus);
            this.show.connect(bus);
            this.showCurrentPick.connect(bus);
            this.hide.connect(bus);
            this.updateLayout.connect(bus);
            this.enable.connect(bus);
        };
        fortuneCoinAssembly.PickerPort.__name__ = ["fortuneCoinAssembly", "PickerPort"];
        fortuneCoinAssembly.PickerPort.prototype.show = null;
        fortuneCoinAssembly.PickerPort.prototype.showCurrentPick = null;
        fortuneCoinAssembly.PickerPort.prototype.updateState = null;
        fortuneCoinAssembly.PickerPort.prototype.enable = null;
        fortuneCoinAssembly.PickerPort.prototype.pick = null;
        fortuneCoinAssembly.PickerPort.prototype.disableAll = null;
        fortuneCoinAssembly.PickerPort.prototype.enableAll = null;
        fortuneCoinAssembly.PickerPort.prototype.hide = null;
        fortuneCoinAssembly.PickerPort.prototype.updateLayout = null;
        fortuneCoinAssembly.PickerPort.prototype.getPick = function() {
            return this.pick;
        };
        fortuneCoinAssembly.PickerPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.PickerPort.prototype.getUpdateState = function() {
            return this.updateState;
        };
        fortuneCoinAssembly.PickerPort.prototype.getShowCurrentPick = function() {
            return this.showCurrentPick;
        };
        fortuneCoinAssembly.PickerPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.PickerPort.prototype.getEnablePicks = function() {
            return this.enable;
        };
        fortuneCoinAssembly.PickerPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.PickerPort.prototype.getDisableAll = function() {
            return this.disableAll;
        };
        fortuneCoinAssembly.PickerPort.prototype.getEnableAll = function() {
            return this.enableAll;
        };
        fortuneCoinAssembly.PickerPort.singleton = null;
        fortuneCoinAssembly.PickerPort.getInstance = function() {
            if (fortuneCoinAssembly.PickerPort.singleton == null) fortuneCoinAssembly.PickerPort.singleton = new fortuneCoinAssembly.PickerPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.PickerPort.singleton;
        };
        fortuneCoinAssembly.PickerPort.prototype.__class__ = fortuneCoinAssembly.PickerPort;
        fortuneCoinAssembly.CurrentPickPayload = function(componentId, value, position) {
            this.componentId = componentId;
            this.value = value;
            this.position = position;
        };
        fortuneCoinAssembly.CurrentPickPayload.__name__ = ["fortuneCoinAssembly", "CurrentPickPayload"];
        fortuneCoinAssembly.CurrentPickPayload.prototype.componentId = null;
        fortuneCoinAssembly.CurrentPickPayload.prototype.value = null;
        fortuneCoinAssembly.CurrentPickPayload.prototype.position = null;
        fortuneCoinAssembly.CurrentPickPayload.prototype.__class__ = fortuneCoinAssembly.CurrentPickPayload;
        fortuneCoinAssembly.PickerPayload = function(componentId, content) {
            this.componentId = componentId;
            this.content = content;
        };
        fortuneCoinAssembly.PickerPayload.__name__ = ["fortuneCoinAssembly", "PickerPayload"];
        fortuneCoinAssembly.PickerPayload.prototype.componentId = null;
        fortuneCoinAssembly.PickerPayload.prototype.content = null;
        fortuneCoinAssembly.PickerPayload.prototype.__class__ = fortuneCoinAssembly.PickerPayload;
        fortuneCoinAssembly.PickerTypeEnum = {
            __ename__: ["fortuneCoinAssembly", "PickerTypeEnum"],
            __constructs__: ["PICKER_TOP"]
        };
        fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP = ["PICKER_TOP", 0];
        fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP.toString = $estr;
        fortuneCoinAssembly.PickerTypeEnum.PICKER_TOP.__enum__ = fortuneCoinAssembly.PickerTypeEnum;
        fortuneCoinAssembly.PicksDisabledPayload = function(componentId, enabledPicks) {
            this.enabledPicks = enabledPicks;
            this.componentId = componentId;
        };
        fortuneCoinAssembly.PicksDisabledPayload.__name__ = ["fortuneCoinAssembly", "PicksDisabledPayload"];
        fortuneCoinAssembly.PicksDisabledPayload.prototype.componentId = null;
        fortuneCoinAssembly.PicksDisabledPayload.prototype.enabledPicks = null;
        fortuneCoinAssembly.PicksDisabledPayload.prototype.__class__ = fortuneCoinAssembly.PicksDisabledPayload;

        fortuneCoinAssembly.IPickerView = function() {}
        fortuneCoinAssembly.IPickerView.prototype = {

            hide: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            show: function(content) {
                return {
                    arguments: [Map],
                    returns: "void"
                };
            },
            disableAll: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            enableAll: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            enablePicks: function(picks) {
                return {
                    arguments: ["array"],
                    returns: "void"
                };
            },
            updateState: function(state) {
                return {
                    arguments: ["string"],
                    returns: "void"
                };
            },
            showCurrentPick: function(value, position) {
                return {
                    arguments: ["string", "*"],
                    returns: "void"
                };
            },
            handleLayoutUpdate: function(cfg) {
                return {
                    arguments: ["*"],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.PickerView = function(container, vbView) {
            this.margin = 14;
            this.vbView = vbView;
            this.container = container;
            container.hide();
            this.symbolSize = new displayEngineApi.Point(208, 165);
        };
        fortuneCoinAssembly.PickerView = ck_implements(fortuneCoinAssembly.PickerView, fortuneCoinAssembly.IPickerView);
        fortuneCoinAssembly.PickerView.__interfaces__ = [fortuneCoinAssembly.IPickerView];
        fortuneCoinAssembly.PickerView.__name__ = ["fortuneCoinAssembly", "PickerView"];
        fortuneCoinAssembly.PickerView.prototype.container = null;
        fortuneCoinAssembly.PickerView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.PickerView.prototype.vbView = null;
        fortuneCoinAssembly.PickerView.prototype.symbolSize = null;
        fortuneCoinAssembly.PickerView.prototype.margin = null;
        fortuneCoinAssembly.PickerView.prototype.show = function(content) {
            haxe.Log.trace("[PickerView] [show] ", {
                fileName: "PickerView.hx",
                lineNumber: 36,
                className: "components.picker.subcomponents.PickerView",
                methodName: "show",
                customParams: [content]
            });
            var col = 0;
            var row = 0;
            var $it0 = content.keys();
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (!(function($this) {
                        var $r;
                        var this1 = $this.container.getChildComponents();
                        $r = this1.exists(key);
                        return $r;
                    }(this))) {
                    var vbAnimContainer = this.vbView.createContainerFromStoredConfig("coin_base");
                    vbAnimContainer.setX(this.symbolSize.x * col + this.margin | 0);
                    vbAnimContainer.setY(this.symbolSize.y * row | 0);
                    this.container.addChildComponent(vbAnimContainer, "symbol" + "_" + key);
                    var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                    vbAnimContent.gotoAndPlay(false, "idle");
                    vbAnimContent.show();
                    vbAnimContainer.show();
                    var buttonContainer = this.container.createContainerFromStoredConfig("BUTTON_CONTAINER");
                    var button = buttonContainer.getButtonById("BUTTON");
                    button.getDisplayObject().setName(key);
                    button.setX(this.symbolSize.x * col + this.margin + 10 | 0);
                    button.setY(this.symbolSize.y * row + 10 | 0);
                    button.getDisplayObject().setWidth(vbAnimContainer.getDisplayObject().getWidth() - 20);
                    button.getDisplayObject().setHeight(vbAnimContainer.getDisplayObject().getHeight() - 20);
                    button.getEvents().DOWN().addListener($bind(this, this.handleChoice));
                    this.container.addChildComponent(buttonContainer, "button" + "_" + key);
                }
                row++;
                if (row == 3) {
                    row = 0;
                    col++;
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.PickerView.prototype.showCurrentPick = function(value, position) {
            haxe.Log.trace("[PickerView] [showWin] " + "value: " + value, {
                fileName: "PickerView.hx",
                lineNumber: 76,
                className: "components.picker.subcomponents.PickerView",
                methodName: "showCurrentPick",
                customParams: ["position: " + _hcmn_.Std.string(position)]
            });
            var childId = value + position.x + "_" + position.y;
            if (!(function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(childId);
                    return $r;
                }(this))) {
                var vbAnimContainer = this.vbView.createContainerFromStoredConfig("win" + "_" + value);
                vbAnimContainer.setX(this.symbolSize.x * position.x + this.margin | 0);
                vbAnimContainer.setY(this.symbolSize.y * position.y | 0);
                this.container.addChildComponent(vbAnimContainer, childId);
                var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                vbAnimContent.gotoAndPlay(false, "idle");
                vbAnimContent.show();
                vbAnimContainer.show();
                if ((function($this) {
                        var $r;
                        var this2 = vbAnimContent.getChildComponents();
                        $r = this2.exists("label");
                        return $r;
                    }(this))) {
                    var labelContainer = vbAnimContent.getContainerById("label");
                    var labelId = "picker_win" + "_" + value;
                    if ((function($this) {
                            var $r;
                            var this3 = labelContainer.getChildComponents();
                            $r = this3.exists(labelId);
                            return $r;
                        }(this))) {}
                }
            }
            var counter = 0;
            var _g = 0;
            while (_g < 5) {
                var i = _g++;
                var _g1 = 0;
                while (_g1 < 3) {
                    var j = _g1++;
                    if (position.x == i) {
                        if (position.y == j) {
                            var buttonId = "button_L0C" + counter + "R0";
                            if ((function($this) {
                                    var $r;
                                    var this4 = $this.container.getChildComponents();
                                    $r = this4.exists(buttonId);
                                    return $r;
                                }(this))) {
                                var currentButton = this.container.getButtonContainerById(buttonId);
                                currentButton.disable();
                            }
                            var symbolId = "symbol_L0C" + counter + "R0";
                            if ((function($this) {
                                    var $r;
                                    var this5 = $this.container.getChildComponents();
                                    $r = this5.exists(symbolId);
                                    return $r;
                                }(this))) {
                                var vbAnimationHolder = this.container.getButtonContainerById(symbolId);
                                vbAnimationHolder.hide();
                            }
                        }
                    }
                    counter++;
                }
            }
        };
        fortuneCoinAssembly.PickerView.prototype.enablePicks = function(enabledPicks) {
            haxe.Log.trace("[PickerView] [enablePicks] enabledPicks: " + _hcmn_.Std.string(enabledPicks), {
                fileName: "PickerView.hx",
                lineNumber: 126,
                className: "components.picker.subcomponents.PickerView",
                methodName: "enablePicks"
            });
            this.enableAll();
            var _g1 = 0;
            var _g = enabledPicks.length;
            while (_g1 < _g) {
                var i = _g1++;
                var buttonId = "button_" + enabledPicks[i];
                if ((function($this) {
                        var $r;
                        var this1 = $this.container.getChildComponents();
                        $r = this1.exists(buttonId);
                        return $r;
                    }(this))) {
                    var currentButton = this.container.getButtonContainerById(buttonId);
                    currentButton.disable();
                }
                var symbolId = "symbol_" + enabledPicks[i];
                if ((function($this) {
                        var $r;
                        var this2 = $this.container.getChildComponents();
                        $r = this2.exists(symbolId);
                        return $r;
                    }(this))) {
                    var vbAnimationHolder = this.container.getButtonContainerById(symbolId);
                    var vbAnimContent = vbAnimationHolder.getVBAnimationById("ANIMATION_CONTENT");
                    vbAnimContent.gotoAndPlay(false, "idle");
                }
            }
        };
        fortuneCoinAssembly.PickerView.prototype.handleChoice = function(evt) {
            haxe.Log.trace("[PickerView] [handleChoice] evt: " + _hcmn_.Std.string(evt.id), {
                fileName: "PickerView.hx",
                lineNumber: 146,
                className: "components.picker.subcomponents.PickerView",
                methodName: "handleChoice"
            });
            var buttonId = "button_" + _hcmn_.Std.string(evt.id);
            haxe.Log.trace("[PickerView] [handleChoice] " + "buttonId: " + buttonId, {
                fileName: "PickerView.hx",
                lineNumber: 148,
                className: "components.picker.subcomponents.PickerView",
                methodName: "handleChoice"
            });
            this.disableAll();
            var symbolId = "symbol" + "_" + _hcmn_.Std.string(evt.id);
            haxe.Log.trace("[PickerView] [handleChoice] symbolId " + symbolId, {
                fileName: "PickerView.hx",
                lineNumber: 153,
                className: "components.picker.subcomponents.PickerView",
                methodName: "handleChoice"
            });
            if ((function($this) {
                    var $r;
                    var this1 = $this.container.getChildComponents();
                    $r = this1.exists(symbolId);
                    return $r;
                }(this))) {
                var vbAnimContainer = this.container.getContainerById(symbolId);
                var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                vbAnimContent.gotoAndPlay(false, "selected");
            }
            fortuneCoinAssembly.PickerPort.getInstance().getPick().publish(evt.id);
        };
        fortuneCoinAssembly.PickerView.prototype.disableAll = function() {
            haxe.Log.trace("[PickerView] [disableAll] ", {
                fileName: "PickerView.hx",
                lineNumber: 166,
                className: "components.picker.subcomponents.PickerView",
                methodName: "disableAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "button_")) {
                    haxe.Log.trace("[PickerView] [disableAll] [button] " + key, {
                        fileName: "PickerView.hx",
                        lineNumber: 170,
                        className: "components.picker.subcomponents.PickerView",
                        methodName: "disableAll"
                    });
                    var button = this.container.getButtonContainerById(key);
                    button.disable();
                }
            }
        };
        fortuneCoinAssembly.PickerView.prototype.updateState = function(state) {
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "symbol_")) {
                    haxe.Log.trace("[PickerView] [updateState] " + key, {
                        fileName: "PickerView.hx",
                        lineNumber: 180,
                        className: "components.picker.subcomponents.PickerView",
                        methodName: "updateState"
                    });
                    var vbAnimContainer = this.container.getContainerById(key);
                    var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                    vbAnimContent.gotoAndPlay(false, state);
                }
            }
        };
        fortuneCoinAssembly.PickerView.prototype.enableAll = function() {
            haxe.Log.trace("[PickerView] [enable] ", {
                fileName: "PickerView.hx",
                lineNumber: 189,
                className: "components.picker.subcomponents.PickerView",
                methodName: "enableAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "button_")) {
                    haxe.Log.trace("[PickerView] [enable] [button] " + key, {
                        fileName: "PickerView.hx",
                        lineNumber: 193,
                        className: "components.picker.subcomponents.PickerView",
                        methodName: "enableAll"
                    });
                    var button = this.container.getButtonContainerById(key);
                    button.enable();
                }
            }
        };
        fortuneCoinAssembly.PickerView.prototype.disposeAll = function() {
            haxe.Log.trace("[PickerView] [disposeAll] ", {
                fileName: "PickerView.hx",
                lineNumber: 202,
                className: "components.picker.subcomponents.PickerView",
                methodName: "disposeAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.PickerView.prototype.hide = function() {
            haxe.Log.trace("[PickerView] [hide]", {
                fileName: "PickerView.hx",
                lineNumber: 211,
                className: "components.picker.subcomponents.PickerView",
                methodName: "hide",
                customParams: [this.container.getDisplayObject().getName()]
            });
            this.container.hide();
            this.disposeAll();
        };
        fortuneCoinAssembly.PickerView.prototype.handleLayoutUpdate = function(cfg) {};
        fortuneCoinAssembly.PickerView.prototype.__class__ = fortuneCoinAssembly.PickerView;
        fortuneCoinAssembly.Popups = function(context, componentPort) {
            this.addedToStage = false;
            haxe.Log.trace("[Popups] [Popups] " + ": context ", {
                fileName: "Popups.hx",
                lineNumber: 42,
                className: "components.popups.Popups",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            this.components = new haxe.ds.EnumValueMap();
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getUpdateState().subscribe($bind(this, this.handleUpdateState));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
            this.port.getEnable().subscribe($bind(this, this.handleEnable));
            this.port.getDisable().subscribe($bind(this, this.handleDisable));
            fortuneCoinAssembly.PopupsEvents.getInstance().buttonClicked.add($bind(this, this.handleButtonDown));
            fortuneCoinAssembly.PopupsEvents.getInstance().closed.add($bind(this, this.handleClosed));
            fortuneCoinAssembly.PopupsEvents.getInstance().confirmed.add($bind(this, this.handleConfirmed));
        };
        fortuneCoinAssembly.Popups.__name__ = ["fortuneCoinAssembly", "Popups"];
        fortuneCoinAssembly.Popups.prototype.port = null;
        fortuneCoinAssembly.Popups.prototype.context = null;
        fortuneCoinAssembly.Popups.prototype.rootView = null;
        fortuneCoinAssembly.Popups.prototype.layerContainer = null;
        fortuneCoinAssembly.Popups.prototype.requestEvent = null;
        fortuneCoinAssembly.Popups.prototype.components = null;
        fortuneCoinAssembly.Popups.prototype.baseEvents = null;
        fortuneCoinAssembly.Popups.prototype.addedToStage = null;
        fortuneCoinAssembly.Popups.prototype.vbViews = null;
        fortuneCoinAssembly.Popups.prototype.initView = function() {
            haxe.Log.trace("[Popups] [initView] " + "vbAssetID: " + "popups_layout.viewbuilder.json", {
                fileName: "Popups.hx",
                lineNumber: 62,
                className: "components.popups.Popups",
                methodName: "initView"
            });
            this.rootView = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("popups_layout.viewbuilder.json"));
            var animAssets = [fortuneCoinAssembly.Assets.getAsset("popups_animations_0"), fortuneCoinAssembly.Assets.getAsset("fx_animations_6"), fortuneCoinAssembly.Assets.getAsset("tutorial_portret_layout.viewbuilder.json")];
            this.vbViews = [];
            var _g1 = 0;
            var _g = animAssets.length;
            while (_g1 < _g) {
                var i = _g1++;
                this.vbViews.push(fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(animAssets[i]));
            }
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.rootView.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var constructorIndex;
                var _this = _hcmn_.Type.getEnumConstructs(fortuneCoinAssembly.PopupTypeEnum);
                constructorIndex = _hcmn_.HxOverrides.indexOf(_this, layerId, 0);
                if (constructorIndex < 0) continue;
                var componentEnum = _hcmn_.Type.createEnum(fortuneCoinAssembly.PopupTypeEnum, layerId, null);
                if ((function($this) {
                        var $r;
                        var this2 = $this.rootView.getChildComponents();
                        $r = this2.exists(componentEnum[0]);
                        return $r;
                    }(this))) this.registerComponent(componentEnum);
            }
            this.registerComponent(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT);
        };
        fortuneCoinAssembly.Popups.prototype.registerContainerComponent = function(componentEnum, componentClass, view) {
            haxe.Log.trace("[Popups] [registerContainerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum), {
                fileName: "Popups.hx",
                lineNumber: 89,
                className: "components.popups.Popups",
                methodName: "registerContainerComponent"
            });
            var container = view.getContainerById(componentEnum[0]);
            var value = _hcmn_.Type.createInstance(componentClass, [container, this.baseEvents, this.vbViews, this.port]);
            this.components.set(componentEnum, value);
        };
        fortuneCoinAssembly.Popups.prototype.handleUpdateLayout = function(e) {
            if (this.rootView == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.rootView.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) this.updateLayoutParameters(this.rootView, layerPayload, cfg, stage, layerId);
                else if (layerId == "TUTORIAL_PORTRAIT") this.updateLayoutParameters(this.vbViews[2], layerPayload, cfg, stage, layerId);
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.Popups.prototype.updateLayoutParameters = function(view, layerPayload, cfg, stage, layerId) {
            var container;
            container = (function($this) {
                var $r;
                var this1 = view.getChildComponents();
                var key = layerId;
                $r = this1.get(key);
                return $r;
            }(this));
            var containerDO = container.getDisplayObject();
            if (!this.addedToStage) stage.addChild(containerDO);
            containerDO.setX(layerPayload.left);
            containerDO.setY(layerPayload.top);
            containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
            containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
            if (layerPayload.zIndex != null) containerDO.setZIndex(layerPayload.zIndex);
            if (cfg != null)((function($this) {
                var $r;
                var key1; {
                    var constr = layerId;
                    key1 = _hcmn_.Type.createEnum(fortuneCoinAssembly.PopupTypeEnum, constr, null);
                }
                $r = $this.components.get(key1);
                return $r;
            }(this))).handleLayoutUpdate(cfg);
        };
        fortuneCoinAssembly.Popups.prototype.registerComponent = function(componentEnum) {
            haxe.Log.trace("[Popups] [registerComponent]", {
                fileName: "Popups.hx",
                lineNumber: 149,
                className: "components.popups.Popups",
                methodName: "registerComponent",
                customParams: [componentEnum]
            });
            switch (componentEnum[1]) {
                case 8:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 9:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 10:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 17:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.BOWL, fortuneCoinAssembly.BowlView, this.rootView);
                    break;
                case 15:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT, fortuneCoinAssembly.AnimationView, this.rootView);
                    break;
                case 16:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT, fortuneCoinAssembly.AnimationView, this.rootView);
                    break;
                case 11:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MAXI, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 12:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MINOR, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 13:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MINI, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 14:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MAJOR, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 18:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 5:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 4:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 6:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 1:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.FS_RESUME, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 7:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.JPA_OUTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 2:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 3:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 0:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 28:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 19:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 20:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 26:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 23:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 27:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.MULTIWAY, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 21:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL, fortuneCoinAssembly.TutorialView, this.rootView);
                    break;
                case 22:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT, fortuneCoinAssembly.TutorialView, this.vbViews[2]);
                    break;
                case 24:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.COMPANY_LOGO, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
                case 25:
                    this.registerContainerComponent(fortuneCoinAssembly.PopupTypeEnum.GAME_LOGO_HORISONTAL, fortuneCoinAssembly.StaticView, this.rootView);
                    break;
            }
        };
        fortuneCoinAssembly.Popups.prototype.handleHide = function(e) {
            haxe.Log.trace("[Popups] [handleHide] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Popups.hx",
                lineNumber: 216,
                className: "components.popups.Popups",
                methodName: "handleHide"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).hide();
        };
        fortuneCoinAssembly.Popups.prototype.handleUpdateState = function(e) {
            haxe.Log.trace("[Popups] [handleStateUpdate] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Popups.hx",
                lineNumber: 225,
                className: "components.popups.Popups",
                methodName: "handleUpdateState"
            });
            var componentId = e.getPayload().componentId;
            this.components.get(componentId).updateState(e.getPayload());
        };
        fortuneCoinAssembly.Popups.prototype.handleEnable = function(e) {
            haxe.Log.trace("[Popups] [handleEnable] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Popups.hx",
                lineNumber: 234,
                className: "components.popups.Popups",
                methodName: "handleEnable"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).enable();
        };
        fortuneCoinAssembly.Popups.prototype.handleDisable = function(e) {
            haxe.Log.trace("[Popups] [handleDisable] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Popups.hx",
                lineNumber: 243,
                className: "components.popups.Popups",
                methodName: "handleDisable"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).disable();
        };
        fortuneCoinAssembly.Popups.prototype.handleShow = function(e) {
            haxe.Log.trace("[Popups] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "Popups.hx",
                lineNumber: 253,
                className: "components.popups.Popups",
                methodName: "handleShow"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).show(e.getPayload().content, componentId, e.getPayload().styles);
        };
        fortuneCoinAssembly.Popups.prototype.handleButtonDown = function(pickId) {
            this.port.getPick().publish(pickId);
        };
        fortuneCoinAssembly.Popups.prototype.handleClosed = function(e) {
            haxe.Log.trace("[Popups] handleTutorialClosed ", {
                fileName: "Popups.hx",
                lineNumber: 266,
                className: "components.popups.Popups",
                methodName: "handleClosed"
            });
            this.port.getClosed().publish(e);
        };
        fortuneCoinAssembly.Popups.prototype.handleConfirmed = function(e) {
            haxe.Log.trace("[Popups] handleTutorialConfirmed ", {
                fileName: "Popups.hx",
                lineNumber: 271,
                className: "components.popups.Popups",
                methodName: "handleConfirmed"
            });
            this.port.getConfirmed().publish(e);
        };
        fortuneCoinAssembly.Popups.prototype.__class__ = fortuneCoinAssembly.Popups;
        fortuneCoinAssembly.PopupsEvents = function() {
            this.confirmed = new _hcmn_.msignal_Signal1();
            this.closed = new _hcmn_.msignal_Signal1();
            this.buttonClicked = new _hcmn_.msignal_Signal1();
        };
        fortuneCoinAssembly.PopupsEvents.__name__ = ["fortuneCoinAssembly", "PopupsEvents"];
        fortuneCoinAssembly.PopupsEvents.prototype.buttonClicked = null;
        fortuneCoinAssembly.PopupsEvents.prototype.confirmed = null;
        fortuneCoinAssembly.PopupsEvents.prototype.closed = null;
        fortuneCoinAssembly.PopupsEvents.singleton = null;
        fortuneCoinAssembly.PopupsEvents.getInstance = function() {
            if (fortuneCoinAssembly.PopupsEvents.singleton == null) fortuneCoinAssembly.PopupsEvents.singleton = new fortuneCoinAssembly.PopupsEvents();
            return fortuneCoinAssembly.PopupsEvents.singleton;
        };
        fortuneCoinAssembly.PopupsEvents.prototype.__class__ = fortuneCoinAssembly.PopupsEvents;
        fortuneCoinAssembly.PopupsPort = function(bus) {
            this.disable = new clientkernelEventbusApi.Topic("popups:disable");
            this.enable = new clientkernelEventbusApi.Topic("popups:enable");
            this.totalPages = new clientkernelEventbusApi.Topic("popups:totalPages");
            this.updateState = new clientkernelEventbusApi.Topic("popups:updateState");
            this.updateLayout = new clientkernelEventbusApi.Topic("popups:updateLayout");
            this.confirmed = new clientkernelEventbusApi.Topic("popups:confirmed");
            this.closed = new clientkernelEventbusApi.Topic("popups:closed");
            this.pick = new clientkernelEventbusApi.Topic("popups:pick");
            this.hide = new clientkernelEventbusApi.Topic("popups:hide");
            this.show = new clientkernelEventbusApi.Topic("popups:show");
            this.show.connect(bus);
            this.hide.connect(bus);
            this.updateLayout.connect(bus);
            this.updateState.connect(bus);
            this.pick.connect(bus);
            this.closed.connect(bus);
            this.confirmed.connect(bus);
            this.totalPages.connect(bus);
            this.enable.connect(bus);
            this.disable.connect(bus);
        };
        fortuneCoinAssembly.PopupsPort.__name__ = ["fortuneCoinAssembly", "PopupsPort"];
        fortuneCoinAssembly.PopupsPort.prototype.show = null;
        fortuneCoinAssembly.PopupsPort.prototype.hide = null;
        fortuneCoinAssembly.PopupsPort.prototype.pick = null;
        fortuneCoinAssembly.PopupsPort.prototype.closed = null;
        fortuneCoinAssembly.PopupsPort.prototype.confirmed = null;
        fortuneCoinAssembly.PopupsPort.prototype.updateLayout = null;
        fortuneCoinAssembly.PopupsPort.prototype.updateState = null;
        fortuneCoinAssembly.PopupsPort.prototype.totalPages = null;
        fortuneCoinAssembly.PopupsPort.prototype.enable = null;
        fortuneCoinAssembly.PopupsPort.prototype.disable = null;
        fortuneCoinAssembly.PopupsPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getPick = function() {
            return this.pick;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getUpdateState = function() {
            return this.updateState;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getClosed = function() {
            return this.closed;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getConfirmed = function() {
            return this.confirmed;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getTotalPages = function() {
            return this.totalPages;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getEnable = function() {
            return this.enable;
        };
        fortuneCoinAssembly.PopupsPort.prototype.getDisable = function() {
            return this.disable;
        };
        fortuneCoinAssembly.PopupsPort.singleton = null;
        fortuneCoinAssembly.PopupsPort.getInstance = function() {
            if (fortuneCoinAssembly.PopupsPort.singleton == null) fortuneCoinAssembly.PopupsPort.singleton = new fortuneCoinAssembly.PopupsPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.PopupsPort.singleton;
        };
        fortuneCoinAssembly.PopupsPort.prototype.__class__ = fortuneCoinAssembly.PopupsPort;
        fortuneCoinAssembly.PopupPayload = function(componentId, content, styles) {
            this.componentId = componentId;
            this.content = content;
            this.styles = styles;
        };
        fortuneCoinAssembly.PopupPayload.__name__ = ["fortuneCoinAssembly", "PopupPayload"];
        fortuneCoinAssembly.PopupPayload.prototype.componentId = null;
        fortuneCoinAssembly.PopupPayload.prototype.content = null;
        fortuneCoinAssembly.PopupPayload.prototype.styles = null;
        fortuneCoinAssembly.PopupPayload.prototype.__class__ = fortuneCoinAssembly.PopupPayload;
        fortuneCoinAssembly.PopupStatePayload = function(componentId, animId, state) {
            this.componentId = componentId;
            this.state = state;
            this.animId = animId;
        };
        fortuneCoinAssembly.PopupStatePayload.__name__ = ["fortuneCoinAssembly", "PopupStatePayload"];
        fortuneCoinAssembly.PopupStatePayload.prototype.componentId = null;
        fortuneCoinAssembly.PopupStatePayload.prototype.animId = null;
        fortuneCoinAssembly.PopupStatePayload.prototype.state = null;
        fortuneCoinAssembly.PopupStatePayload.prototype.__class__ = fortuneCoinAssembly.PopupStatePayload;
        fortuneCoinAssembly.PopupTypeEnum = {
            __ename__: ["fortuneCoinAssembly", "PopupTypeEnum"],
            __constructs__: ["FS_OUTRO", "FS_RESUME", "FS_INTRO", "FS_INTRO_NEXT", "ALL_AWARDS_OUTRO", "JACKPOT_AWARDED_OUTRO", "JPA_INTRO", "JPA_OUTRO", "REEL_BACKGROUND_BG", "REEL_BACKGROUND_FS", "REEL_FOREGROUND", "MAXI", "MINOR", "MINI", "MAJOR", "DRAGON_LEFT", "DRAGON_RIGHT", "BOWL", "PICKER_BCK", "FS_RETRIGGER", "MAX_RETRIGGER", "TUTORIAL", "TUTORIAL_PORTRAIT", "INFO_DISPLAY", "COMPANY_LOGO", "GAME_LOGO_HORISONTAL", "REEL_FRAME", "MULTIWAY", "AWARD_CAP"]
        };
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT = ["TUTORIAL_PORTRAIT", 22];
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL_PORTRAIT.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO = ["FS_INTRO", 2];
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER = ["FS_RETRIGGER", 19];
        fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.FS_RETRIGGER.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER = ["MAX_RETRIGGER", 20];
        fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MAX_RETRIGGER.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME = ["REEL_FRAME", 26];
        fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.REEL_FRAME.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.FS_RESUME = ["FS_RESUME", 1];
        fortuneCoinAssembly.PopupTypeEnum.FS_RESUME.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.FS_RESUME.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY = ["INFO_DISPLAY", 23];
        fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.INFO_DISPLAY.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MAXI = ["MAXI", 11];
        fortuneCoinAssembly.PopupTypeEnum.MAXI.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MAXI.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MINI = ["MINI", 13];
        fortuneCoinAssembly.PopupTypeEnum.MINI.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MINI.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG = ["REEL_BACKGROUND_BG", 8];
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_BG.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS = ["REEL_BACKGROUND_FS", 9];
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.REEL_BACKGROUND_FS.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT = ["DRAGON_LEFT", 15];
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_LEFT.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT = ["FS_INTRO_NEXT", 3];
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.FS_INTRO_NEXT.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MINOR = ["MINOR", 12];
        fortuneCoinAssembly.PopupTypeEnum.MINOR.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MINOR.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO = ["ALL_AWARDS_OUTRO", 4];
        fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.ALL_AWARDS_OUTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.BOWL = ["BOWL", 17];
        fortuneCoinAssembly.PopupTypeEnum.BOWL.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.BOWL.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MAJOR = ["MAJOR", 14];
        fortuneCoinAssembly.PopupTypeEnum.MAJOR.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MAJOR.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK = ["PICKER_BCK", 18];
        fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.PICKER_BCK.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.GAME_LOGO_HORISONTAL = ["GAME_LOGO_HORISONTAL", 25];
        fortuneCoinAssembly.PopupTypeEnum.GAME_LOGO_HORISONTAL.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.GAME_LOGO_HORISONTAL.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.MULTIWAY = ["MULTIWAY", 27];
        fortuneCoinAssembly.PopupTypeEnum.MULTIWAY.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.MULTIWAY.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO = ["FS_OUTRO", 0];
        fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.FS_OUTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND = ["REEL_FOREGROUND", 10];
        fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.REEL_FOREGROUND.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO = ["JACKPOT_AWARDED_OUTRO", 5];
        fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.JACKPOT_AWARDED_OUTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP = ["AWARD_CAP", 28];
        fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.AWARD_CAP.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT = ["DRAGON_RIGHT", 16];
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.DRAGON_RIGHT.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO = ["JPA_INTRO", 6];
        fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.JPA_INTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL = ["TUTORIAL", 21];
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.TUTORIAL.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.COMPANY_LOGO = ["COMPANY_LOGO", 24];
        fortuneCoinAssembly.PopupTypeEnum.COMPANY_LOGO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.COMPANY_LOGO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;
        fortuneCoinAssembly.PopupTypeEnum.JPA_OUTRO = ["JPA_OUTRO", 7];
        fortuneCoinAssembly.PopupTypeEnum.JPA_OUTRO.toString = $estr;
        fortuneCoinAssembly.PopupTypeEnum.JPA_OUTRO.__enum__ = fortuneCoinAssembly.PopupTypeEnum;

        fortuneCoinAssembly.IPopupView = function() {}
        fortuneCoinAssembly.IPopupView.prototype = {

            hide: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            show: function(content, componentId, styles) {
                return {
                    arguments: ["array", "*", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            updateState: function(payload) {
                return {
                    arguments: ["*"],
                    returns: "void"
                };
            },
            handleLayoutUpdate: function(cfg) {
                return {
                    arguments: ["*"],
                    returns: "void"
                };
            },
            enable: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            disable: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.AnimationView = function(container, baseEvents, vbViews) {
            this.vbViews = vbViews;
            this.baseEvents = baseEvents;
            this.container = container;
        };
        fortuneCoinAssembly.AnimationView = ck_implements(fortuneCoinAssembly.AnimationView, fortuneCoinAssembly.IPopupView);
        fortuneCoinAssembly.AnimationView.__interfaces__ = [fortuneCoinAssembly.IPopupView];
        fortuneCoinAssembly.AnimationView.__name__ = ["fortuneCoinAssembly", "AnimationView"];
        fortuneCoinAssembly.AnimationView.prototype.container = null;
        fortuneCoinAssembly.AnimationView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.AnimationView.prototype.baseEvents = null;
        fortuneCoinAssembly.AnimationView.prototype.vbViews = null;
        fortuneCoinAssembly.AnimationView.prototype.show = function(content, popupTypeEnum, styles) {
            haxe.Log.trace("[AnimationView] [show] ", {
                fileName: "AnimationView.hx",
                lineNumber: 29,
                className: "components.popups.subcomponents.AnimationView",
                methodName: "show",
                customParams: [content]
            });
            var _g1 = 0;
            var _g = this.vbViews.length;
            while (_g1 < _g) {
                var i = _g1++;
                var vbAnimContainer = this.vbViews[i].createContainerFromStoredConfig(content[i]);
                if (vbAnimContainer != null) {
                    vbAnimContainer = this.vbViews[i].createContainerFromStoredConfig(content[i]);
                    var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                    vbAnimContent.stop();
                    this.container.addChildComponent(vbAnimContainer, content[0]);
                    vbAnimContainer.show();
                    vbAnimContent.show();
                    this.container.show();
                }
            }
        };
        fortuneCoinAssembly.AnimationView.prototype.hide = function() {
            haxe.Log.trace("[AnimationView] [hide]", {
                fileName: "AnimationView.hx",
                lineNumber: 48,
                className: "components.popups.subcomponents.AnimationView",
                methodName: "hide",
                customParams: [this.container.getDisplayObject().getName()]
            });
            this.container.hide();
        };
        fortuneCoinAssembly.AnimationView.prototype.updateState = function(payload) {
            haxe.Log.trace("[AnimationView] [updateState]", {
                fileName: "AnimationView.hx",
                lineNumber: 54,
                className: "components.popups.subcomponents.AnimationView",
                methodName: "updateState",
                customParams: [payload]
            });
            var vbAnim = this.container.getContainerById(payload.animId);
            var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
            vbAnimContent.gotoAndPlay(false, payload.state);
        };
        fortuneCoinAssembly.AnimationView.prototype.handleLayoutUpdate = function(cfg) {};
        fortuneCoinAssembly.AnimationView.prototype.disable = function() {};
        fortuneCoinAssembly.AnimationView.prototype.enable = function() {};
        fortuneCoinAssembly.AnimationView.prototype.__class__ = fortuneCoinAssembly.AnimationView;
        fortuneCoinAssembly.BowlView = function(container, baseEvents, vbViews) {
            this.vbViews = vbViews;
            this.baseEvents = baseEvents;
            this.container = container;
            if (fortuneCoinAssembly.ExternalService.isDesktop()) this.container.getDisplayObject().setMask(fortuneCoinAssembly.ExternalService.displayProvider.getFactory().createGraphics().drawRect(0, -40, 308, 100));
        };
        fortuneCoinAssembly.BowlView = ck_implements(fortuneCoinAssembly.BowlView, fortuneCoinAssembly.IPopupView);
        fortuneCoinAssembly.BowlView.__interfaces__ = [fortuneCoinAssembly.IPopupView];
        fortuneCoinAssembly.BowlView.__name__ = ["fortuneCoinAssembly", "BowlView"];
        fortuneCoinAssembly.BowlView.prototype.container = null;
        fortuneCoinAssembly.BowlView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.BowlView.prototype.baseEvents = null;
        fortuneCoinAssembly.BowlView.prototype.vbViews = null;
        fortuneCoinAssembly.BowlView.prototype.show = function(content, popupTypeEnum, styles) {
            haxe.Log.trace("[AnimationView] [show] ", {
                fileName: "BowlView.hx",
                lineNumber: 35,
                className: "components.popups.subcomponents.BowlView",
                methodName: "show",
                customParams: [content]
            });
            var vbAnim = this.vbViews[0].createContainerFromStoredConfig(content[0]);
            var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
            vbAnimContent.stop();
            this.container.addChildComponent(vbAnim, content[0]);
            vbAnimContent.show();
            vbAnim.show();
            this.container.show();
        };
        fortuneCoinAssembly.BowlView.prototype.hide = function() {
            haxe.Log.trace("[AnimationView] [hide]", {
                fileName: "BowlView.hx",
                lineNumber: 47,
                className: "components.popups.subcomponents.BowlView",
                methodName: "hide",
                customParams: [this.container.getDisplayObject().getName()]
            });
            this.container.hide();
        };
        fortuneCoinAssembly.BowlView.prototype.updateState = function(payload) {
            haxe.Log.trace("[AnimationView] [updateState]", {
                fileName: "BowlView.hx",
                lineNumber: 53,
                className: "components.popups.subcomponents.BowlView",
                methodName: "updateState",
                customParams: [payload]
            });
            var vbAnim = this.container.getContainerById(payload.animId);
            var vbAnimContent = vbAnim.getVBAnimationById("ANIMATION_CONTENT");
            vbAnimContent.gotoAndPlay(false, payload.state);
        };
        fortuneCoinAssembly.BowlView.prototype.handleLayoutUpdate = function(cfg) {};
        fortuneCoinAssembly.BowlView.prototype.disable = function() {};
        fortuneCoinAssembly.BowlView.prototype.enable = function() {};
        fortuneCoinAssembly.BowlView.prototype.__class__ = fortuneCoinAssembly.BowlView;
        fortuneCoinAssembly.StaticView = function(container, baseEvents, vbViews) {
            this.vbViews = vbViews;
            this.baseEvents = baseEvents;
            this.container = container;
            container.hide();
        };
        fortuneCoinAssembly.StaticView = ck_implements(fortuneCoinAssembly.StaticView, fortuneCoinAssembly.IPopupView);
        fortuneCoinAssembly.StaticView.__interfaces__ = [fortuneCoinAssembly.IPopupView];
        fortuneCoinAssembly.StaticView.__name__ = ["fortuneCoinAssembly", "StaticView"];
        fortuneCoinAssembly.StaticView.prototype.container = null;
        fortuneCoinAssembly.StaticView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.StaticView.prototype.baseEvents = null;
        fortuneCoinAssembly.StaticView.prototype.vbViews = null;
        fortuneCoinAssembly.StaticView.prototype.show = function(content, componentId, styles) {
            haxe.Log.trace("[StaticsView] [show]", {
                fileName: "StaticView.hx",
                lineNumber: 33,
                className: "components.popups.subcomponents.StaticView",
                methodName: "show",
                customParams: [this.container.getDisplayObject().getName(), styles]
            });
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var labelId = componentId[0] + "_" + i;
                if ((function($this) {
                        var $r;
                        var this1 = $this.container.getChildComponents();
                        $r = this1.exists(labelId);
                        return $r;
                    }(this))) {
                    var label = this.container.getLabelById(labelId);
                    label.setText(content[i]);
                    if (styles != null) {
                        if (styles[i] != null) label.updateTo(styles[i]);
                    }
                }
            }
            var $it0 = (function($this) {
                var $r;
                var this2 = $this.container.getChildComponents();
                $r = this2.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "button")) {
                    var button = this.container.getButtonById(key);
                    button.disable();
                    button.getEvents().DOWN().addListener($bind(this, this.handleButtonDown));
                } else if (_hcmn_.StringTools.startsWith(key, "anim")) this.createAnimation(key);
            }
            this.container.show();
        };
        fortuneCoinAssembly.StaticView.prototype.createAnimation = function(id) {
            var _g1 = 0;
            var _g = this.vbViews.length;
            while (_g1 < _g) {
                var i = _g1++;
                var vbAnimContainer = this.vbViews[i].createContainerFromStoredConfig(id);
                if (vbAnimContainer != null) {
                    vbAnimContainer = this.vbViews[i].createContainerFromStoredConfig(id);
                    var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                    vbAnimContainer.setX(_hcmn_.Std["int"](this.container.getContainerById(id).getDisplayObject().getX()));
                    vbAnimContainer.setY(_hcmn_.Std["int"](this.container.getContainerById(id).getDisplayObject().getY()));
                    vbAnimContent.gotoAndPlay(false, "loop");
                    this.container.addChildComponent(vbAnimContainer, id + "_animation");
                    vbAnimContainer.show();
                    vbAnimContent.show();
                }
            }
        };
        fortuneCoinAssembly.StaticView.prototype.handleButtonDown = function(evt) {
            var buttonId = evt.id;
            var currentButton = this.container.getButtonById(buttonId);
            currentButton.disable();
            haxe.Log.trace("[StaticView] [handleButtonDown] " + "buttonId: " + buttonId, {
                fileName: "StaticView.hx",
                lineNumber: 83,
                className: "components.popups.subcomponents.StaticView",
                methodName: "handleButtonDown"
            });
            var id = buttonId.split("_");
            fortuneCoinAssembly.PopupsEvents.getInstance().buttonClicked.dispatch(id[1]);
        };
        fortuneCoinAssembly.StaticView.prototype.hide = function() {
            haxe.Log.trace("[StaticsView] [hide]", {
                fileName: "StaticView.hx",
                lineNumber: 90,
                className: "components.popups.subcomponents.StaticView",
                methodName: "hide",
                customParams: [this.container.getDisplayObject().getName()]
            });
            this.container.hide();
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.endsWith(key, "_animation")) this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.StaticView.prototype.handleLayoutUpdate = function(cfg) {};
        fortuneCoinAssembly.StaticView.prototype.updateState = function(payload) {};
        fortuneCoinAssembly.StaticView.prototype.disable = function() {
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "button")) {
                    var button = this.container.getButtonById(key);
                    button.disable();
                }
            }
        };
        fortuneCoinAssembly.StaticView.prototype.enable = function() {
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                if (_hcmn_.StringTools.startsWith(key, "button")) {
                    var button = this.container.getButtonById(key);
                    button.enable();
                }
            }
        };
        fortuneCoinAssembly.StaticView.prototype.__class__ = fortuneCoinAssembly.StaticView;
        fortuneCoinAssembly.TutorialView = function(container, baseEvents, vbView, port) {
            haxe.Log.trace("[Popups] [TutorialView] " + container.getDisplayObject().getName(), {
                fileName: "TutorialView.hx",
                lineNumber: 23,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "new"
            });
            this.popupsPort = port;
            this.baseEvents = baseEvents;
            this.container = container;
            this.setupControls();
        };
        fortuneCoinAssembly.TutorialView = ck_implements(fortuneCoinAssembly.TutorialView, fortuneCoinAssembly.IPopupView);
        fortuneCoinAssembly.TutorialView.__interfaces__ = [fortuneCoinAssembly.IPopupView];
        fortuneCoinAssembly.TutorialView.__name__ = ["fortuneCoinAssembly", "TutorialView"];
        fortuneCoinAssembly.TutorialView.prototype.popupsPort = null;
        fortuneCoinAssembly.TutorialView.prototype.baseEvents = null;
        fortuneCoinAssembly.TutorialView.prototype.container = null;
        fortuneCoinAssembly.TutorialView.prototype.hide = function() {
            this.container.hide();
        };
        fortuneCoinAssembly.TutorialView.prototype.show = function(content, componentId, styles) {
            this.container.show();
        };
        fortuneCoinAssembly.TutorialView.prototype.setupControls = function() {
            haxe.Log.trace("[Popups] [TutorialView] [setupControls]", {
                fileName: "TutorialView.hx",
                lineNumber: 46,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "setupControls"
            });
            var controls = this.container.getContainerById("controls");
            var btnClose = controls.getButtonById("BtnClose");
            btnClose.getEvents().DOWN().addListener($bind(this, this.handleClose));
            btnClose.enable();
            var btnCloseX = controls.getButtonById("BtnCloseX");
            btnCloseX.getEvents().DOWN().addListener($bind(this, this.handleClose));
            btnCloseX.enable();
            var btnConfirm = controls.getButtonById("btnConfirm");
            btnConfirm.getEvents().DOWN().addListener($bind(this, this.handleConfirmed));
            btnConfirm.enable();
            var btnConfirmed = controls.getButtonById("btnConfirmed");
            btnConfirmed.getEvents().DOWN().addListener($bind(this, this.handleConfirmed));
            btnConfirmed.enable();
            btnConfirmed.hide();
        };
        fortuneCoinAssembly.TutorialView.prototype.handleClose = function(e) {
            haxe.Log.trace("[Popups] [TutorialView] [handleClose] " + _hcmn_.Std.string(e), {
                fileName: "TutorialView.hx",
                lineNumber: 69,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleClose"
            });
            fortuneCoinAssembly.GameData.tutorialClosed = true;
            fortuneCoinAssembly.PopupsEvents.getInstance().closed.dispatch((function($this) {
                var $r;
                var constr = $this.container.getDisplayObject().getName();
                $r = _hcmn_.Type.createEnum(fortuneCoinAssembly.PopupTypeEnum, constr, null);
                return $r;
            }(this)));
        };
        fortuneCoinAssembly.TutorialView.prototype.handleConfirmed = function(e) {
            haxe.Log.trace("[Popups] [TutorialView] [handleConfirmed] " + _hcmn_.Std.string(e), {
                fileName: "TutorialView.hx",
                lineNumber: 76,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleConfirmed"
            });
            var controls = this.container.getContainerById("controls");
            var btnConfirm = controls.getButtonById("btnConfirm");
            var btnConfirmed = controls.getButtonById("btnConfirmed");
            var btnId = e.id;
            if (btnId == "btnConfirm") {
                btnConfirm.hide();
                btnConfirmed.show();
                fortuneCoinAssembly.GameData.tutorialConfirmed = false;
            } else if (btnId == "btnConfirmed") {
                btnConfirm.show();
                btnConfirmed.hide();
                fortuneCoinAssembly.GameData.tutorialConfirmed = true;
            }
            fortuneCoinAssembly.PopupsEvents.getInstance().confirmed.dispatch(null);
        };
        fortuneCoinAssembly.TutorialView.prototype.updateState = function(payload) {
            haxe.Log.trace("[Popups] [TutorialView] [updateState] " + _hcmn_.Std.string(payload), {
                fileName: "TutorialView.hx",
                lineNumber: 101,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "updateState"
            });
        };
        fortuneCoinAssembly.TutorialView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] " + _hcmn_.Std.string(cfg), {
                fileName: "TutorialView.hx",
                lineNumber: 106,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate",
                customParams: [this.container.getDisplayObject().getName()]
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] tutorialClosed : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialClosed), {
                fileName: "TutorialView.hx",
                lineNumber: 107,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate"
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] visible : " + _hcmn_.Std.string(cfg.visible), {
                fileName: "TutorialView.hx",
                lineNumber: 108,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate"
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameData.tutorialConfirmed : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialConfirmed), {
                fileName: "TutorialView.hx",
                lineNumber: 109,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate"
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameData.tutorialInitialized : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialInitialized), {
                fileName: "TutorialView.hx",
                lineNumber: 110,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate"
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameData.tutorialAspect : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.isPortrait), {
                fileName: "TutorialView.hx",
                lineNumber: 111,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "handleLayoutUpdate"
            });
            if (cfg.visible) fortuneCoinAssembly.GameData.isPortrait = true;
            if (!fortuneCoinAssembly.GameData.isResume) {
                if (fortuneCoinAssembly.GameData.tutorialConfirmed) {
                    if (fortuneCoinAssembly.GameData.tutorialClosed) this.container.hide();
                    else if (cfg.visible == true) this.container.show();
                    else this.container.hide();
                } else if (fortuneCoinAssembly.GameData.tutorialClosed) this.container.hide();
                else if (cfg.visible == true) this.container.show();
                else this.container.hide();
            } else this.container.hide();
            this.updateControls();
        };
        fortuneCoinAssembly.TutorialView.prototype.updateControls = function() {
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameDatax.tutorialConfirmedx : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialConfirmed), {
                fileName: "TutorialView.hx",
                lineNumber: 147,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "updateControls"
            });
            haxe.Log.trace("[Popups] [TutorialView] [handleLayoutUpdate] GameDatax.tutorialClosed : " + _hcmn_.Std.string(fortuneCoinAssembly.GameData.tutorialClosed), {
                fileName: "TutorialView.hx",
                lineNumber: 148,
                className: "components.popups.subcomponents.TutorialView",
                methodName: "updateControls"
            });
            var controls = this.container.getContainerById("controls");
            var btnConfirm = controls.getButtonById("btnConfirm");
            var btnConfirmed = controls.getButtonById("btnConfirmed");
            if (!fortuneCoinAssembly.GameData.tutorialClosed) {
                if (fortuneCoinAssembly.GameData.tutorialConfirmed) {
                    btnConfirm.hide();
                    btnConfirmed.show();
                } else {
                    btnConfirm.show();
                    btnConfirmed.hide();
                }
            }
        };
        fortuneCoinAssembly.TutorialView.prototype.disable = function() {};
        fortuneCoinAssembly.TutorialView.prototype.enable = function() {};
        fortuneCoinAssembly.TutorialView.prototype.__class__ = fortuneCoinAssembly.TutorialView;
        fortuneCoinAssembly.WinController = function(context, componentPort) {
            this.addedToStage = false;
            haxe.Log.trace("[Wincontroller] [Wincontroller] " + ": context ", {
                fileName: "WinController.hx",
                lineNumber: 40,
                className: "components.wincontroller.WinController",
                methodName: "new"
            });
            this.context = context;
            this.port = componentPort;
            this.components = new haxe.ds.EnumValueMap();
            this.baseEvents = fortuneCoinAssembly.WinControllerEvents.getInstance();
            this.vbViews = [];
            this.createVBViews();
            this.port.getShow().subscribe($bind(this, this.handleShow));
            this.port.getHide().subscribe($bind(this, this.handleHide));
            this.port.getUpdateLayout().subscribe($bind(this, this.handleUpdateLayout));
        };
        fortuneCoinAssembly.WinController.__name__ = ["fortuneCoinAssembly", "WinController"];
        fortuneCoinAssembly.WinController.prototype.port = null;
        fortuneCoinAssembly.WinController.prototype.context = null;
        fortuneCoinAssembly.WinController.prototype.view = null;
        fortuneCoinAssembly.WinController.prototype.layerContainer = null;
        fortuneCoinAssembly.WinController.prototype.requestEvent = null;
        fortuneCoinAssembly.WinController.prototype.components = null;
        fortuneCoinAssembly.WinController.prototype.baseEvents = null;
        fortuneCoinAssembly.WinController.prototype.addedToStage = null;
        fortuneCoinAssembly.WinController.prototype.vbViews = null;
        fortuneCoinAssembly.WinController.prototype.createVBViews = function() {
            var def = fortuneCoinAssembly.Assets.getAsset("win-controller-configuration");
            var assetsIds = def.vbAssets;
            var _g1 = 0;
            var _g = assetsIds.length;
            while (_g1 < _g) {
                var i = _g1++;
                var animAsset = fortuneCoinAssembly.Assets.getAsset(assetsIds[i]);
                this.vbViews[i] = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(animAsset);
            }
        };
        fortuneCoinAssembly.WinController.prototype.initView = function() {
            haxe.Log.trace("[Wincontroller] [initView] " + "vbAssetID: " + "win_controller_layout.viewbuilder.json", {
                fileName: "WinController.hx",
                lineNumber: 71,
                className: "components.wincontroller.WinController",
                methodName: "initView"
            });
            this.view = fortuneCoinAssembly.ExternalService.viewBuilderFactory.createView(fortuneCoinAssembly.Assets.getAsset("win_controller_layout.viewbuilder.json"));
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.view.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var constructorIndex;
                var _this = _hcmn_.Type.getEnumConstructs(fortuneCoinAssembly.WinControllerType);
                constructorIndex = _hcmn_.HxOverrides.indexOf(_this, layerId, 0);
                if (constructorIndex < 0) continue;
                var componentEnum = _hcmn_.Type.createEnum(fortuneCoinAssembly.WinControllerType, layerId, null);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.exists(componentEnum[0]);
                        return $r;
                    }(this))) this.registerComponent(componentEnum);
            }
        };
        fortuneCoinAssembly.WinController.prototype.registerContainerComponent = function(componentEnum, componentClass) {
            haxe.Log.trace("[Wincontroller] [registerContainerComponent] " + "componentEnum: " + _hcmn_.Std.string(componentEnum), {
                fileName: "WinController.hx",
                lineNumber: 88,
                className: "components.wincontroller.WinController",
                methodName: "registerContainerComponent"
            });
            var container = this.view.getContainerById(componentEnum[0]);
            var value = _hcmn_.Type.createInstance(componentClass, [container, this.vbViews]);
            this.components.set(componentEnum, value);
        };
        fortuneCoinAssembly.WinController.prototype.handleUpdateLayout = function(e) {
            if (this.view == null) this.initView();
            var layoutPayload = e.getPayload();
            var $it0 = layoutPayload.containers.keys();
            while ($it0.hasNext()) {
                var layerId = $it0.next();
                var layerPayload = layoutPayload.containers.get(layerId);
                var cfg = layerPayload.configuration;
                var stage;
                var this1 = fortuneCoinAssembly.ExternalService.displayProvider.getStages();
                stage = this1.get(layerPayload.stage);
                if ((function($this) {
                        var $r;
                        var this2 = $this.view.getChildComponents();
                        $r = this2.get(layerId);
                        return $r;
                    }(this)) != null) {
                    var container;
                    container = (function($this) {
                        var $r;
                        var this3 = $this.view.getChildComponents();
                        $r = this3.get(layerId);
                        return $r;
                    }(this));
                    var containerDO = container.getDisplayObject();
                    if (!this.addedToStage) stage.addChild(containerDO);
                    containerDO.setX(layerPayload.left);
                    containerDO.setY(layerPayload.top);
                    containerDO.setScaleX(layerPayload.width / containerDO.getUserData().viewBuilderW);
                    containerDO.setScaleY(layerPayload.height / containerDO.getUserData().viewBuilderH);
                    containerDO.setZIndex(layerPayload.zIndex);
                    if (cfg != null)((function($this) {
                        var $r;
                        var key = _hcmn_.Type.createEnum(fortuneCoinAssembly.WinControllerType, layerId, null);
                        $r = $this.components.get(key);
                        return $r;
                    }(this))).handleLayoutUpdate(cfg);
                }
            }
            if (!this.addedToStage) this.addedToStage = true;
        };
        fortuneCoinAssembly.WinController.prototype.registerComponent = function(componentEnum) {
            haxe.Log.trace("[Wincontroller] [registerComponent]", {
                fileName: "WinController.hx",
                lineNumber: 135,
                className: "components.wincontroller.WinController",
                methodName: "registerComponent",
                customParams: [componentEnum]
            });
            switch (componentEnum[1]) {
                case 0:
                    this.registerContainerComponent(fortuneCoinAssembly.WinControllerType.SYMBOLS, fortuneCoinAssembly.WinSymbolsView);
                    break;
                case 1:
                    this.registerContainerComponent(fortuneCoinAssembly.WinControllerType.FRAMES, fortuneCoinAssembly.WinFramesView);
                    break;
                case 2:
                    this.registerContainerComponent(fortuneCoinAssembly.WinControllerType.WIN_VALUE, fortuneCoinAssembly.WinValueView);
                    break;
                case 3:
                    this.registerContainerComponent(fortuneCoinAssembly.WinControllerType.WILDS, fortuneCoinAssembly.WildsView);
                    break;
                case 4:
                    this.registerContainerComponent(fortuneCoinAssembly.WinControllerType.SCATTERS, fortuneCoinAssembly.ScatterView);
                    break;
            }
        };
        fortuneCoinAssembly.WinController.prototype.handleHide = function(e) {
            haxe.Log.trace("[Wincontroller] [handleHide] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "WinController.hx",
                lineNumber: 154,
                className: "components.wincontroller.WinController",
                methodName: "handleHide"
            });
            var componentId = e.getPayload();
            this.components.get(componentId).hide();
        };
        fortuneCoinAssembly.WinController.prototype.handleShow = function(e) {
            haxe.Log.trace("[Wincontroller] [handleShow] " + "e: " + _hcmn_.Std.string(e), {
                fileName: "WinController.hx",
                lineNumber: 163,
                className: "components.wincontroller.WinController",
                methodName: "handleShow"
            });
            var componentId = e.getPayload().componentId;
            if (this.components.exists(componentId)) this.components.get(componentId).show(e.getPayload().content, e.getPayload().reelId);
        };
        fortuneCoinAssembly.WinController.prototype.__class__ = fortuneCoinAssembly.WinController;
        fortuneCoinAssembly.WinControllerEvents = function() {
            this.currentPick = new _hcmn_.msignal_Signal1();
        };
        fortuneCoinAssembly.WinControllerEvents.__name__ = ["fortuneCoinAssembly", "WinControllerEvents"];
        fortuneCoinAssembly.WinControllerEvents.prototype.currentPick = null;
        fortuneCoinAssembly.WinControllerEvents.singleton = null;
        fortuneCoinAssembly.WinControllerEvents.getInstance = function() {
            if (fortuneCoinAssembly.WinControllerEvents.singleton == null) fortuneCoinAssembly.WinControllerEvents.singleton = new fortuneCoinAssembly.WinControllerEvents();
            return fortuneCoinAssembly.WinControllerEvents.singleton;
        };
        fortuneCoinAssembly.WinControllerEvents.prototype.__class__ = fortuneCoinAssembly.WinControllerEvents;
        fortuneCoinAssembly.WinControllerPort = function(bus) {
            this.updateLayout = new clientkernelEventbusApi.Topic("wincontroller:updateLayout");
            this.hide = new clientkernelEventbusApi.Topic("wincontroller:hide");
            this.show = new clientkernelEventbusApi.Topic("wincontroller:show");
            this.show.connect(bus);
            this.hide.connect(bus);
            this.updateLayout.connect(bus);
        };
        fortuneCoinAssembly.WinControllerPort.__name__ = ["fortuneCoinAssembly", "WinControllerPort"];
        fortuneCoinAssembly.WinControllerPort.prototype.show = null;
        fortuneCoinAssembly.WinControllerPort.prototype.hide = null;
        fortuneCoinAssembly.WinControllerPort.prototype.updateLayout = null;
        fortuneCoinAssembly.WinControllerPort.prototype.getShow = function() {
            return this.show;
        };
        fortuneCoinAssembly.WinControllerPort.prototype.getHide = function() {
            return this.hide;
        };
        fortuneCoinAssembly.WinControllerPort.prototype.getUpdateLayout = function() {
            return this.updateLayout;
        };
        fortuneCoinAssembly.WinControllerPort.singleton = null;
        fortuneCoinAssembly.WinControllerPort.getInstance = function() {
            if (fortuneCoinAssembly.WinControllerPort.singleton == null) fortuneCoinAssembly.WinControllerPort.singleton = new fortuneCoinAssembly.WinControllerPort(fortuneCoinAssembly.ExternalService.bus.getChannel("GFBus"));
            return fortuneCoinAssembly.WinControllerPort.singleton;
        };
        fortuneCoinAssembly.WinControllerPort.prototype.__class__ = fortuneCoinAssembly.WinControllerPort;
        fortuneCoinAssembly.WinControllerType = {
            __ename__: ["fortuneCoinAssembly", "WinControllerType"],
            __constructs__: ["SYMBOLS", "FRAMES", "WIN_VALUE", "WILDS", "SCATTERS"]
        };
        fortuneCoinAssembly.WinControllerType.FRAMES = ["FRAMES", 1];
        fortuneCoinAssembly.WinControllerType.FRAMES.toString = $estr;
        fortuneCoinAssembly.WinControllerType.FRAMES.__enum__ = fortuneCoinAssembly.WinControllerType;
        fortuneCoinAssembly.WinControllerType.SYMBOLS = ["SYMBOLS", 0];
        fortuneCoinAssembly.WinControllerType.SYMBOLS.toString = $estr;
        fortuneCoinAssembly.WinControllerType.SYMBOLS.__enum__ = fortuneCoinAssembly.WinControllerType;
        fortuneCoinAssembly.WinControllerType.SCATTERS = ["SCATTERS", 4];
        fortuneCoinAssembly.WinControllerType.SCATTERS.toString = $estr;
        fortuneCoinAssembly.WinControllerType.SCATTERS.__enum__ = fortuneCoinAssembly.WinControllerType;
        fortuneCoinAssembly.WinControllerType.WIN_VALUE = ["WIN_VALUE", 2];
        fortuneCoinAssembly.WinControllerType.WIN_VALUE.toString = $estr;
        fortuneCoinAssembly.WinControllerType.WIN_VALUE.__enum__ = fortuneCoinAssembly.WinControllerType;
        fortuneCoinAssembly.WinControllerType.WILDS = ["WILDS", 3];
        fortuneCoinAssembly.WinControllerType.WILDS.toString = $estr;
        fortuneCoinAssembly.WinControllerType.WILDS.__enum__ = fortuneCoinAssembly.WinControllerType;
        fortuneCoinAssembly.WinPayload = function(componentId, content, reelId) {
            this.componentId = componentId;
            this.content = content;
            this.reelId = reelId;
        };
        fortuneCoinAssembly.WinPayload.__name__ = ["fortuneCoinAssembly", "WinPayload"];
        fortuneCoinAssembly.WinPayload.prototype.componentId = null;
        fortuneCoinAssembly.WinPayload.prototype.content = null;
        fortuneCoinAssembly.WinPayload.prototype.reelId = null;
        fortuneCoinAssembly.WinPayload.prototype.__class__ = fortuneCoinAssembly.WinPayload;

        fortuneCoinAssembly.IWinControllerView = function() {}
        fortuneCoinAssembly.IWinControllerView.prototype = {

            hide: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            show: function(content, reelId) {
                return {
                    arguments: ["array", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            handleLayoutUpdate: function(cfg) {
                return {
                    arguments: ["*"],
                    returns: "void"
                };
            }
        };
        fortuneCoinAssembly.ScatterView = function(container, vbViews) {
            this.margin = 14;
            this.vbViews = vbViews;
            this.container = container;
            this.symbolSize = new displayEngineApi.Point(200, 175);
        };
        fortuneCoinAssembly.ScatterView = ck_implements(fortuneCoinAssembly.ScatterView, fortuneCoinAssembly.IWinControllerView);
        fortuneCoinAssembly.ScatterView.__interfaces__ = [fortuneCoinAssembly.IWinControllerView];
        fortuneCoinAssembly.ScatterView.__name__ = ["fortuneCoinAssembly", "ScatterView"];
        fortuneCoinAssembly.ScatterView.prototype.container = null;
        fortuneCoinAssembly.ScatterView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.ScatterView.prototype.symbolSize = null;
        fortuneCoinAssembly.ScatterView.prototype.margin = null;
        fortuneCoinAssembly.ScatterView.prototype.vbViews = null;
        fortuneCoinAssembly.ScatterView.prototype.show = function(content, reelId) {
            haxe.Log.trace("[ScatterView] [show] content: " + _hcmn_.Std.string(content), {
                fileName: "ScatterView.hx",
                lineNumber: 31,
                className: "components.wincontroller.subcomponents.ScatterView",
                methodName: "show"
            });
            var _g1 = 0;
            var _g = content[reelId].length;
            while (_g1 < _g) {
                var j = _g1++;
                var _g3 = 0;
                var _g2 = this.vbViews.length;
                while (_g3 < _g2) {
                    var k = _g3++;
                    var vbAnimContainer = this.vbViews[k].createContainerFromStoredConfig(content[reelId][j]);
                    if (vbAnimContainer != null) {
                        var childId = reelId + "_" + j + "_" + content[reelId][j];
                        vbAnimContainer.setX((this.symbolSize.x + this.margin) * reelId | 0);
                        vbAnimContainer.setY(this.symbolSize.y * j | 0);
                        if (!(function($this) {
                                var $r;
                                var this1 = $this.container.getChildComponents();
                                $r = this1.exists(childId);
                                return $r;
                            }(this))) this.container.addChildComponent(vbAnimContainer, childId);
                        var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                        vbAnimContent.gotoAndPlay(false, "1");
                        vbAnimContent.show();
                        vbAnimContainer.show();
                    }
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.ScatterView.prototype.hide = function() {
            this.disposeAll();
            haxe.Log.trace("[[ScatterView]] [hide] " + "hide: ", {
                fileName: "ScatterView.hx",
                lineNumber: 62,
                className: "components.wincontroller.subcomponents.ScatterView",
                methodName: "hide"
            });
            this.container.hide();
        };
        fortuneCoinAssembly.ScatterView.prototype.disposeAll = function() {
            haxe.Log.trace("[[ScatterView]] [disposeAll] ", {
                fileName: "ScatterView.hx",
                lineNumber: 68,
                className: "components.wincontroller.subcomponents.ScatterView",
                methodName: "disposeAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.ScatterView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[[ScatterView]] [handleLayoutUpdate] ", {
                fileName: "ScatterView.hx",
                lineNumber: 77,
                className: "components.wincontroller.subcomponents.ScatterView",
                methodName: "handleLayoutUpdate"
            });
        };
        fortuneCoinAssembly.ScatterView.prototype.rand = function(min, max) {
            return _hcmn_.Math.floor(_hcmn_.Math.random() * (max - min + 1) + min);
        };
        fortuneCoinAssembly.ScatterView.prototype.__class__ = fortuneCoinAssembly.ScatterView;
        fortuneCoinAssembly.WildsView = function(container, vbViews) {
            this.margin = 14;
            this.vbViews = vbViews;
            this.container = container;
            this.symbolSize = new displayEngineApi.Point(200, 175);
        };
        fortuneCoinAssembly.WildsView = ck_implements(fortuneCoinAssembly.WildsView, fortuneCoinAssembly.IWinControllerView);
        fortuneCoinAssembly.WildsView.__interfaces__ = [fortuneCoinAssembly.IWinControllerView];
        fortuneCoinAssembly.WildsView.__name__ = ["fortuneCoinAssembly", "WildsView"];
        fortuneCoinAssembly.WildsView.prototype.container = null;
        fortuneCoinAssembly.WildsView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.WildsView.prototype.symbolSize = null;
        fortuneCoinAssembly.WildsView.prototype.margin = null;
        fortuneCoinAssembly.WildsView.prototype.vbViews = null;
        fortuneCoinAssembly.WildsView.prototype.show = function(content, reelId) {
            haxe.Log.trace("[WildView] [show] " + "content: " + _hcmn_.Std.string(content), {
                fileName: "WildsView.hx",
                lineNumber: 29,
                className: "components.wincontroller.subcomponents.WildsView",
                methodName: "show"
            });
            this.disposeAll();
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = content[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    var _g5 = 0;
                    var _g4 = this.vbViews.length;
                    while (_g5 < _g4) {
                        var k = _g5++;
                        var vbAnimContainer = this.vbViews[k].createContainerFromStoredConfig(content[i][j]);
                        if (vbAnimContainer != null) {
                            var childId = i + "_" + j + "_" + content[i][j];
                            vbAnimContainer.setX((this.symbolSize.x + this.margin) * i | 0);
                            vbAnimContainer.setY(this.symbolSize.y * j | 0);
                            if (!(function($this) {
                                    var $r;
                                    var this1 = $this.container.getChildComponents();
                                    $r = this1.exists(childId);
                                    return $r;
                                }(this))) this.container.addChildComponent(vbAnimContainer, childId);
                            var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                            if (fortuneCoinAssembly.GameData.rgPresentation) {
                                if (!fortuneCoinAssembly.GameData.isHighWin) vbAnimContent.stop();
                                else vbAnimContent.gotoAndPlay(false, content[i][j]);
                            } else vbAnimContent.gotoAndPlay(false, content[i][j]);
                            vbAnimContent.show();
                            vbAnimContainer.show();
                        }
                    }
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.WildsView.prototype.hide = function() {
            haxe.Log.trace("[WinSymbolsView] [hide] " + "hide: ", {
                fileName: "WildsView.hx",
                lineNumber: 70,
                className: "components.wincontroller.subcomponents.WildsView",
                methodName: "hide"
            });
            this.disposeAll();
            this.container.hide();
        };
        fortuneCoinAssembly.WildsView.prototype.disposeAll = function() {
            haxe.Log.trace("[WinSymbolsView] [disposeAll] ", {
                fileName: "WildsView.hx",
                lineNumber: 77,
                className: "components.wincontroller.subcomponents.WildsView",
                methodName: "disposeAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.WildsView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[WinSymbolsView] [handleLayoutUpdate] ", {
                fileName: "WildsView.hx",
                lineNumber: 86,
                className: "components.wincontroller.subcomponents.WildsView",
                methodName: "handleLayoutUpdate"
            });
        };
        fortuneCoinAssembly.WildsView.prototype.rand = function(min, max) {
            return _hcmn_.Math.floor(_hcmn_.Math.random() * (max - min + 1) + min);
        };
        fortuneCoinAssembly.WildsView.prototype.__class__ = fortuneCoinAssembly.WildsView;
        fortuneCoinAssembly.WinFramesView = function(container, vbViews) {
            this.margin = 14;
            this.vbViews = vbViews;
            this.container = container;
            this.symbolSize = new displayEngineApi.Point(200, 175);
        };
        fortuneCoinAssembly.WinFramesView = ck_implements(fortuneCoinAssembly.WinFramesView, fortuneCoinAssembly.IWinControllerView);
        fortuneCoinAssembly.WinFramesView.__interfaces__ = [fortuneCoinAssembly.IWinControllerView];
        fortuneCoinAssembly.WinFramesView.__name__ = ["fortuneCoinAssembly", "WinFramesView"];
        fortuneCoinAssembly.WinFramesView.prototype.container = null;
        fortuneCoinAssembly.WinFramesView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.WinFramesView.prototype.symbolSize = null;
        fortuneCoinAssembly.WinFramesView.prototype.margin = null;
        fortuneCoinAssembly.WinFramesView.prototype.vbViews = null;
        fortuneCoinAssembly.WinFramesView.prototype.show = function(content, reelId) {
            haxe.Log.trace("[WinFramesView] [show] " + "content: " + _hcmn_.Std.string(content), {
                fileName: "WinFramesView.hx",
                lineNumber: 32,
                className: "components.wincontroller.subcomponents.WinFramesView",
                methodName: "show"
            });
            this.disposeAll();
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = content[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    var _g5 = 0;
                    var _g4 = this.vbViews.length;
                    while (_g5 < _g4) {
                        var k = _g5++;
                        var vbAnimContainer = this.vbViews[k].createContainerFromStoredConfig("frame");
                        if (vbAnimContainer != null) {
                            if (content[i][j] != "0") {
                                var childId = "frame" + "_" + i + "_" + j;
                                vbAnimContainer.setX((this.symbolSize.x + this.margin) * i | 0);
                                vbAnimContainer.setY(this.symbolSize.y * j | 0);
                                if (!(function($this) {
                                        var $r;
                                        var this1 = $this.container.getChildComponents();
                                        $r = this1.exists(childId);
                                        return $r;
                                    }(this))) this.container.addChildComponent(vbAnimContainer, childId);
                                var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                                if (fortuneCoinAssembly.GameData.rgPresentation) {
                                    if (!fortuneCoinAssembly.GameData.isHighWin) vbAnimContent.stop();
                                    else vbAnimContent.gotoAndPlay(false, content[i][j]);
                                } else vbAnimContent.gotoAndPlay(false, content[i][j]);
                                vbAnimContent.show();
                                vbAnimContainer.show();
                            }
                        }
                    }
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.WinFramesView.prototype.hide = function() {
            haxe.Log.trace("[WinFramesView] [hide] " + "hide: ", {
                fileName: "WinFramesView.hx",
                lineNumber: 76,
                className: "components.wincontroller.subcomponents.WinFramesView",
                methodName: "hide"
            });
            this.container.hide();
        };
        fortuneCoinAssembly.WinFramesView.prototype.disposeAll = function() {
            haxe.Log.trace("[WinFramesView] [disposeAll] ", {
                fileName: "WinFramesView.hx",
                lineNumber: 82,
                className: "components.wincontroller.subcomponents.WinFramesView",
                methodName: "disposeAll"
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.WinFramesView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[WinFramesView] [handleLayoutUpdate] ", {
                fileName: "WinFramesView.hx",
                lineNumber: 91,
                className: "components.wincontroller.subcomponents.WinFramesView",
                methodName: "handleLayoutUpdate"
            });
        };
        fortuneCoinAssembly.WinFramesView.prototype.rand = function(min, max) {
            return _hcmn_.Math.floor(_hcmn_.Math.random() * (max - min + 1) + min);
        };
        fortuneCoinAssembly.WinFramesView.prototype.__class__ = fortuneCoinAssembly.WinFramesView;
        fortuneCoinAssembly.WinSymbolsView = function(container, vbViews) {
            this.margin = 14;
            this.vbViews = vbViews;
            this.container = container;
            this.symbolSize = new displayEngineApi.Point(200, 175);
        };
        fortuneCoinAssembly.WinSymbolsView = ck_implements(fortuneCoinAssembly.WinSymbolsView, fortuneCoinAssembly.IWinControllerView);
        fortuneCoinAssembly.WinSymbolsView.__interfaces__ = [fortuneCoinAssembly.IWinControllerView];
        fortuneCoinAssembly.WinSymbolsView.__name__ = ["fortuneCoinAssembly", "WinSymbolsView"];
        fortuneCoinAssembly.WinSymbolsView.prototype.container = null;
        fortuneCoinAssembly.WinSymbolsView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.WinSymbolsView.prototype.symbolSize = null;
        fortuneCoinAssembly.WinSymbolsView.prototype.margin = null;
        fortuneCoinAssembly.WinSymbolsView.prototype.vbViews = null;
        fortuneCoinAssembly.WinSymbolsView.prototype.show = function(content, reelId) {
            haxe.Log.trace("[WinSymbolsView] [show] " + "content: " + _hcmn_.Std.string(content), {
                fileName: "WinSymbolsView.hx",
                lineNumber: 32,
                className: "components.wincontroller.subcomponents.WinSymbolsView",
                methodName: "show"
            });
            this.disposeAll();
            var _g1 = 0;
            var _g = content.length;
            while (_g1 < _g) {
                var i = _g1++;
                var _g3 = 0;
                var _g2 = content[i].length;
                while (_g3 < _g2) {
                    var j = _g3++;
                    var _g5 = 0;
                    var _g4 = this.vbViews.length;
                    while (_g5 < _g4) {
                        var k = _g5++;
                        var vbAnimContainer = this.vbViews[k].createContainerFromStoredConfig(content[i][j]);
                        if (vbAnimContainer != null) {
                            var childId = i + "_" + j + "_" + content[i][j];
                            vbAnimContainer.setX((this.symbolSize.x + this.margin) * i | 0);
                            vbAnimContainer.setY(this.symbolSize.y * j | 0);
                            if (!(function($this) {
                                    var $r;
                                    var this1 = $this.container.getChildComponents();
                                    $r = this1.exists(childId);
                                    return $r;
                                }(this))) this.container.addChildComponent(vbAnimContainer, childId);
                            var vbAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                            if (fortuneCoinAssembly.GameData.rgPresentation) {
                                if (!fortuneCoinAssembly.GameData.isHighWin) vbAnimContent.stop();
                                else vbAnimContent.gotoAndPlay(false, "1");
                            } else vbAnimContent.gotoAndPlay(false, "1");
                            vbAnimContent.show();
                            vbAnimContainer.show();
                        }
                    }
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.WinSymbolsView.prototype.hide = function() {
            haxe.Log.trace("[WinSymbolsView] [hide] " + "hide: ", {
                fileName: "WinSymbolsView.hx",
                lineNumber: 74,
                className: "components.wincontroller.subcomponents.WinSymbolsView",
                methodName: "hide"
            });
            this.container.hide();
        };
        fortuneCoinAssembly.WinSymbolsView.prototype.disposeAll = function() {
            haxe.Log.trace("[WinSymbolsView] [disposeAll] ", {
                fileName: "WinSymbolsView.hx",
                lineNumber: 80,
                className: "components.wincontroller.subcomponents.WinSymbolsView",
                methodName: "disposeAll",
                customParams: [_hcmn_.Lambda.count(this.container.getChildComponents())]
            });
            var $it0 = (function($this) {
                var $r;
                var this1 = $this.container.getChildComponents();
                $r = this1.keys();
                return $r;
            }(this));
            while ($it0.hasNext()) {
                var key = $it0.next();
                this.container.disposeChildComponent(key);
            }
        };
        fortuneCoinAssembly.WinSymbolsView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[WinSymbolsView] [handleLayoutUpdate] ", {
                fileName: "WinSymbolsView.hx",
                lineNumber: 89,
                className: "components.wincontroller.subcomponents.WinSymbolsView",
                methodName: "handleLayoutUpdate"
            });
        };
        fortuneCoinAssembly.WinSymbolsView.prototype.rand = function(min, max) {
            return _hcmn_.Math.floor(_hcmn_.Math.random() * (max - min + 1) + min);
        };
        fortuneCoinAssembly.WinSymbolsView.prototype.__class__ = fortuneCoinAssembly.WinSymbolsView;
        fortuneCoinAssembly.WinValueView = function(container, vbViews) {
            this.margin = 14;
            this.vbViews = vbViews;
            this.container = container;
            var _g1 = 0;
            var _g = vbViews.length;
            while (_g1 < _g) {
                var k = _g1++;
                var childId = "win_value";
                var vbAnimContainer = vbViews[k].createContainerFromStoredConfig(childId);
                if (vbAnimContainer != null) {
                    this.winValueVBAnimContent = vbAnimContainer.getVBAnimationById("ANIMATION_CONTENT");
                    this.winValueLabelContainer = this.winValueVBAnimContent.getContainerById("label");
                    this.winValueLabel = this.winValueLabelContainer.getLabelById("win_value");
                    this.winValueContainer = vbAnimContainer;
                }
            }
            this.symbolSize = new displayEngineApi.Point(200, 175);
        };
        fortuneCoinAssembly.WinValueView = ck_implements(fortuneCoinAssembly.WinValueView, fortuneCoinAssembly.IWinControllerView);
        fortuneCoinAssembly.WinValueView.__interfaces__ = [fortuneCoinAssembly.IWinControllerView];
        fortuneCoinAssembly.WinValueView.__name__ = ["fortuneCoinAssembly", "WinValueView"];
        fortuneCoinAssembly.WinValueView.prototype.container = null;
        fortuneCoinAssembly.WinValueView.prototype.displayObjectPage = null;
        fortuneCoinAssembly.WinValueView.prototype.symbolSize = null;
        fortuneCoinAssembly.WinValueView.prototype.margin = null;
        fortuneCoinAssembly.WinValueView.prototype.vbViews = null;
        fortuneCoinAssembly.WinValueView.prototype.winValueContainer = null;
        fortuneCoinAssembly.WinValueView.prototype.winValueVBAnimContent = null;
        fortuneCoinAssembly.WinValueView.prototype.winValueLabelContainer = null;
        fortuneCoinAssembly.WinValueView.prototype.winValueLabel = null;
        fortuneCoinAssembly.WinValueView.prototype.show = function(content, reelId) {
            this.clearAll();
            var valuePosition = 0;
            var _g1 = 0;
            var _g = content[2].length;
            while (_g1 < _g) {
                var j = _g1++;
                if (content[2][j] != "_") {
                    valuePosition = j;
                    break;
                }
            }
            var valuesCount = 0;
            var valueColumn = 2;
            var valueRow = 0;
            var _g11 = 0;
            var _g2 = content.length;
            while (_g11 < _g2) {
                var i = _g11++;
                var _g3 = 0;
                var _g21 = content[i].length;
                while (_g3 < _g21) {
                    var j1 = _g3++;
                    if (content[i][j1] != "_") {
                        valuesCount++;
                        valueColumn = i;
                        valueRow = j1;
                    }
                }
            }
            if (valuesCount != 1) valueColumn = 2;
            else valuePosition = valueRow;
            var childId = "win_value";
            var _g12 = 0;
            var _g4 = content[valueColumn].length;
            while (_g12 < _g4) {
                var j2 = _g12++;
                if (content[valueColumn][j2] != "_") {
                    this.winValueContainer.setX(valueColumn * (this.symbolSize.x + this.margin) | 0);
                    this.winValueContainer.setY(this.symbolSize.y * valuePosition | 0);
                    if (!(function($this) {
                            var $r;
                            var this1 = $this.container.getChildComponents();
                            $r = this1.exists(childId);
                            return $r;
                        }(this))) this.container.addChildComponent(this.winValueContainer, childId);
                    this.winValueVBAnimContent.gotoAndPlay(false, "1");
                    this.winValueVBAnimContent.getDisplayObject().getChildAt(0).setX(5);
                    this.winValueLabelContainer.setX(105);
                    var formattedValue = fortuneCoinAssembly.ExternalService.moneyFormatter.format(content[valueColumn][j2], false);
                    var separatedValue = formattedValue;
                    if (_hcmn_.HxOverrides.cca(formattedValue, 0) == 160) separatedValue = _hcmn_.HxOverrides.substr(formattedValue, 1, null);
                    else if (_hcmn_.HxOverrides.cca(formattedValue, formattedValue.length - 1) == 160) separatedValue = formattedValue.substring(0, formattedValue.length - 1);
                    this.winValueLabel.setText(separatedValue);
                    this.winValueVBAnimContent.show();
                    this.winValueContainer.show();
                }
            }
            this.container.show();
        };
        fortuneCoinAssembly.WinValueView.prototype.hide = function() {
            haxe.Log.trace("[WinValueView] [hide] " + "hide: ", {
                fileName: "WinValueView.hx",
                lineNumber: 166,
                className: "components.wincontroller.subcomponents.WinValueView",
                methodName: "hide"
            });
            this.container.hide();
        };
        fortuneCoinAssembly.WinValueView.prototype.clearAll = function() {
            haxe.Log.trace("[WinValueView] [clearAll] ", {
                fileName: "WinValueView.hx",
                lineNumber: 172,
                className: "components.wincontroller.subcomponents.WinValueView",
                methodName: "clearAll"
            });
            this.winValueLabel.setText(" ");
            this.winValueVBAnimContent.hide();
            this.winValueContainer.hide();
        };
        fortuneCoinAssembly.WinValueView.prototype.handleLayoutUpdate = function(cfg) {
            haxe.Log.trace("[WinValueView] [handleLayoutUpdate] ", {
                fileName: "WinValueView.hx",
                lineNumber: 181,
                className: "components.wincontroller.subcomponents.WinValueView",
                methodName: "handleLayoutUpdate"
            });
        };
        fortuneCoinAssembly.WinValueView.prototype.rand = function(min, max) {
            return _hcmn_.Math.floor(_hcmn_.Math.random() * (max - min + 1) + min);
        };
        fortuneCoinAssembly.WinValueView.prototype.__class__ = fortuneCoinAssembly.WinValueView;
        if (typeof haxe == 'undefined') {
            var haxe = {};
        };

        haxe.IMap = function() {}
        haxe.IMap.prototype = {

            get: function(k) {
                return {
                    arguments: ["*"],
                    returns: "null"
                };
            },
            set: function(k, v) {
                return {
                    arguments: ["*", "*"],
                    returns: "void"
                };
            },
            exists: function(k) {
                return {
                    arguments: ["*"],
                    returns: "boolean"
                };
            },
            keys: function() {
                return {
                    arguments: [],
                    returns: "null"
                };
            }
        };
        haxe.Log = function() {};
        haxe.Log.__name__ = ["haxe", "Log"];
        haxe.Log.trace = function(v, infos) {
            _hcmn_.js_Boot.__trace(v, infos);
        };
        haxe.Log.prototype.__class__ = haxe.Log;
        if (!haxe.ds) {
            haxe.ds = {};
        };
        haxe.ds.BalancedTree = function() {};
        haxe.ds.BalancedTree.__name__ = ["haxe", "ds", "BalancedTree"];
        haxe.ds.BalancedTree.prototype.root = null;
        haxe.ds.BalancedTree.prototype.set = function(key, value) {
            this.root = this.setLoop(key, value, this.root);
        };
        haxe.ds.BalancedTree.prototype.get = function(key) {
            var node = this.root;
            while (node != null) {
                var c = this.compare(key, node.key);
                if (c == 0) return node.value;
                if (c < 0) node = node.left;
                else node = node.right;
            }
            return null;
        };
        haxe.ds.BalancedTree.prototype.exists = function(key) {
            var node = this.root;
            while (node != null) {
                var c = this.compare(key, node.key);
                if (c == 0) return true;
                else if (c < 0) node = node.left;
                else node = node.right;
            }
            return false;
        };
        haxe.ds.BalancedTree.prototype.keys = function() {
            var ret = [];
            this.keysLoop(this.root, ret);
            return _hcmn_.HxOverrides.iter(ret);
        };
        haxe.ds.BalancedTree.prototype.setLoop = function(k, v, node) {
            if (node == null) return new haxe.ds.TreeNode(null, k, v, null);
            var c = this.compare(k, node.key);
            if (c == 0) return new haxe.ds.TreeNode(node.left, k, v, node.right, node == null ? 0 : node._height);
            else if (c < 0) {
                var nl = this.setLoop(k, v, node.left);
                return this.balance(nl, node.key, node.value, node.right);
            } else {
                var nr = this.setLoop(k, v, node.right);
                return this.balance(node.left, node.key, node.value, nr);
            }
        };
        haxe.ds.BalancedTree.prototype.keysLoop = function(node, acc) {
            if (node != null) {
                this.keysLoop(node.left, acc);
                acc.push(node.key);
                this.keysLoop(node.right, acc);
            }
        };
        haxe.ds.BalancedTree.prototype.balance = function(l, k, v, r) {
            var hl;
            if (l == null) hl = 0;
            else hl = l._height;
            var hr;
            if (r == null) hr = 0;
            else hr = r._height;
            if (hl > hr + 2) {
                if ((function($this) {
                        var $r;
                        var _this = l.left;
                        $r = _this == null ? 0 : _this._height;
                        return $r;
                    }(this)) >= (function($this) {
                        var $r;
                        var _this1 = l.right;
                        $r = _this1 == null ? 0 : _this1._height;
                        return $r;
                    }(this))) return new haxe.ds.TreeNode(l.left, l.key, l.value, new haxe.ds.TreeNode(l.right, k, v, r));
                else return new haxe.ds.TreeNode(new haxe.ds.TreeNode(l.left, l.key, l.value, l.right.left), l.right.key, l.right.value, new haxe.ds.TreeNode(l.right.right, k, v, r));
            } else if (hr > hl + 2) {
                if ((function($this) {
                        var $r;
                        var _this2 = r.right;
                        $r = _this2 == null ? 0 : _this2._height;
                        return $r;
                    }(this)) > (function($this) {
                        var $r;
                        var _this3 = r.left;
                        $r = _this3 == null ? 0 : _this3._height;
                        return $r;
                    }(this))) return new haxe.ds.TreeNode(new haxe.ds.TreeNode(l, k, v, r.left), r.key, r.value, r.right);
                else return new haxe.ds.TreeNode(new haxe.ds.TreeNode(l, k, v, r.left.left), r.left.key, r.left.value, new haxe.ds.TreeNode(r.left.right, r.key, r.value, r.right));
            } else return new haxe.ds.TreeNode(l, k, v, r, (hl > hr ? hl : hr) + 1);
        };
        haxe.ds.BalancedTree.prototype.compare = function(k1, k2) {
            return _hcmn_.Reflect.compare(k1, k2);
        };
        haxe.ds.BalancedTree.prototype.toString = function() {
            if (this.root == null) return "{}";
            else return "{" + this.root.toString() + "}";
        };
        haxe.ds.BalancedTree.prototype.__class__ = haxe.ds.BalancedTree;
        haxe.ds.TreeNode = function(l, k, v, r, h) {
            if (h == null) h = -1;
            this.left = l;
            this.key = k;
            this.value = v;
            this.right = r;
            if (h == -1) this._height = ((function($this) {
                var $r;
                var _this = $this.left;
                $r = _this == null ? 0 : _this._height;
                return $r;
            }(this)) > (function($this) {
                var $r;
                var _this1 = $this.right;
                $r = _this1 == null ? 0 : _this1._height;
                return $r;
            }(this)) ? (function($this) {
                var $r;
                var _this2 = $this.left;
                $r = _this2 == null ? 0 : _this2._height;
                return $r;
            }(this)) : (function($this) {
                var $r;
                var _this3 = $this.right;
                $r = _this3 == null ? 0 : _this3._height;
                return $r;
            }(this))) + 1;
            else this._height = h;
        };
        haxe.ds.TreeNode.__name__ = ["haxe", "ds", "TreeNode"];
        haxe.ds.TreeNode.prototype.left = null;
        haxe.ds.TreeNode.prototype.right = null;
        haxe.ds.TreeNode.prototype.key = null;
        haxe.ds.TreeNode.prototype.value = null;
        haxe.ds.TreeNode.prototype._height = null;
        haxe.ds.TreeNode.prototype.toString = function() {
            return (this.left == null ? "" : this.left.toString() + ", ") + ("" + _hcmn_.Std.string(this.key) + "=" + _hcmn_.Std.string(this.value)) + (this.right == null ? "" : ", " + this.right.toString());
        };
        haxe.ds.TreeNode.prototype.__class__ = haxe.ds.TreeNode;
        haxe.ds.EnumValueMap = function() {
            haxe.ds.BalancedTree.call(this);
        };
        haxe.ds.EnumValueMap.__interfaces__ = [haxe.IMap];
        haxe.ds.EnumValueMap.__name__ = ["haxe", "ds", "EnumValueMap"];
        haxe.ds.EnumValueMap.__super__ = haxe.ds.BalancedTree;
        for (var k in haxe.ds.BalancedTree.prototype) haxe.ds.EnumValueMap.prototype[k] = haxe.ds.BalancedTree.prototype[k];
        haxe.ds.EnumValueMap.prototype.compare = function(k1, k2) {
            var d = k1[1] - k2[1];
            if (d != 0) return d;
            var p1 = k1.slice(2);
            var p2 = k2.slice(2);
            if (p1.length == 0 && p2.length == 0) return 0;
            return this.compareArgs(p1, p2);
        };
        haxe.ds.EnumValueMap.prototype.compareArgs = function(a1, a2) {
            var ld = a1.length - a2.length;
            if (ld != 0) return ld;
            var _g1 = 0;
            var _g = a1.length;
            while (_g1 < _g) {
                var i = _g1++;
                var d = this.compareArg(a1[i], a2[i]);
                if (d != 0) return d;
            }
            return 0;
        };
        haxe.ds.EnumValueMap.prototype.compareArg = function(v1, v2) {
            if (_hcmn_.Reflect.isEnumValue(v1) && _hcmn_.Reflect.isEnumValue(v2)) return this.compare(v1, v2);
            else if ((v1 instanceof Array) && v1.__enum__ == null && ((v2 instanceof Array) && v2.__enum__ == null)) return this.compareArgs(v1, v2);
            else return _hcmn_.Reflect.compare(v1, v2);
        };
        haxe.ds.EnumValueMap.prototype.__class__ = haxe.ds.EnumValueMap;
        if (!haxe.ds._StringMap) {
            haxe.ds._StringMap = {};
        };
        haxe.ds._StringMap.StringMapIterator = function(map, keys) {
            this.map = map;
            this.keys = keys;
            this.index = 0;
            this.count = keys.length;
        };
        haxe.ds._StringMap.StringMapIterator.__name__ = ["haxe", "ds", "_StringMap", "StringMapIterator"];
        haxe.ds._StringMap.StringMapIterator.prototype.map = null;
        haxe.ds._StringMap.StringMapIterator.prototype.keys = null;
        haxe.ds._StringMap.StringMapIterator.prototype.index = null;
        haxe.ds._StringMap.StringMapIterator.prototype.count = null;
        haxe.ds._StringMap.StringMapIterator.prototype.hasNext = function() {
            return this.index < this.count;
        };
        haxe.ds._StringMap.StringMapIterator.prototype.next = function() {
            return this.map.get(this.keys[this.index++]);
        };
        haxe.ds._StringMap.StringMapIterator.prototype.__class__ = haxe.ds._StringMap.StringMapIterator;
        if (typeof js == 'undefined') {
            var js = {};
        };
        if (!js._Boot) {
            js._Boot = {};
        };
        js._Boot.HaxeError = function(val) {
            Error.call(this);
            this.val = val;
            this.message = String(val);
            if (Error.captureStackTrace) Error.captureStackTrace(this, js._Boot.HaxeError);
        };
        js._Boot.HaxeError.__name__ = ["js", "_Boot", "HaxeError"];
        js._Boot.HaxeError.__super__ = Error;
        for (var k in Error.prototype) js._Boot.HaxeError.prototype[k] = Error.prototype[k];
        js._Boot.HaxeError.prototype.val = null;
        js._Boot.HaxeError.prototype.__class__ = js._Boot.HaxeError;
        js.Browser = function() {};
        js.Browser.__name__ = ["js", "Browser"];
        js.Browser.window = null;
        js.Browser.document = null;
        js.Browser.location = null;
        js.Browser.navigator = null;
        js.Browser.console = null;
        js.Browser.supported = null;
        js.Browser.getLocalStorage = function() {
            try {
                var s = window.localStorage;
                s.getItem("");
                return s;
            } catch (e) {
                if (e instanceof js._Boot.HaxeError) e = e.val;
                return null;
            }
        };
        js.Browser.prototype.__class__ = js.Browser;
        fortuneCoinAssembly.Assets.assetsIDs = ["popups_layout.viewbuilder.json", "tutorial_portret_layout.viewbuilder.json", "coin_bonus_layout.viewbuilder.json", "coin_bonus_definition.json", "picker_layout.viewbuilder.json", "layer_manager.viewbuilder.json", "layer_manager_definition_config.json", "fx_layout.viewbuilder.json", "win_controller_layout.viewbuilder.json", "fx_animations_0", "fx_animations_1", "fx_animations_2", "fx_animations_3", "fx_animations_4", "fx_animations_5", "fx_animations_6", "popups_animations_0", "game-config_json", "reel-config", "win-controller-configuration", "win_symbols_0_vb", "win_symbols_1_vb", "win_symbols_2_vb", "win_symbols_3_vb", "paytable_definition_config", "background-config"];;
        fortuneCoinAssembly.CoinBonus.vbAssetID = "coin_bonus_layout.viewbuilder.json";;
        fortuneCoinAssembly.FxController.vbAssetID = "fx-assets/fx_layout.viewbuilder.json";;
        fortuneCoinAssembly.GameData.currentBetPerLineFloat = 0;;
        fortuneCoinAssembly.GameData.previousBetPerLineFloat = 0;;
        fortuneCoinAssembly.GameData.stripLayerIds = null;;
        fortuneCoinAssembly.GameData.schemaSet = null;;
        fortuneCoinAssembly.GameData.picked = false;;
        fortuneCoinAssembly.GameData.promotionalSpinsActive = false;;
        fortuneCoinAssembly.GameData.promotionalSpinsCount = 0;;
        fortuneCoinAssembly.GameData.isResume = false;;
        fortuneCoinAssembly.GameData.hasTension = false;;
        fortuneCoinAssembly.GameData.betVisible = false;;
        fortuneCoinAssembly.GameData.countUpFinished = false;;
        fortuneCoinAssembly.GameData.hasShake = false;;
        fortuneCoinAssembly.GameData.side = "left";;
        fortuneCoinAssembly.GameData.isRetrigger = false;;
        fortuneCoinAssembly.GameData.coinShowerActive = false;;
        fortuneCoinAssembly.GameData.spinStarted = false;;
        fortuneCoinAssembly.GameData.bigWinParticles = false;;
        fortuneCoinAssembly.GameData.mediumWinParticles = false;;
        fortuneCoinAssembly.GameData.grandeWinParticles = false;;
        fortuneCoinAssembly.GameData.spinPressed = false;;
        fortuneCoinAssembly.GameData.tutorialConfirmed = false;;
        fortuneCoinAssembly.GameData.tutorialInitialized = false;;
        fortuneCoinAssembly.GameData.isPortrait = false;;
        fortuneCoinAssembly.GameData.skipPressed = false;;
        fortuneCoinAssembly.GameData.autoPlayWinNum = 0;;
        fortuneCoinAssembly.GameData.isWinMeterActive = false;;
        fortuneCoinAssembly.GameData.isCoinBonusActive = false;;
        fortuneCoinAssembly.GameData.isFreeSpin = false;;
        fortuneCoinAssembly.GameData.isPicker = false;;
        fortuneCoinAssembly.GameData.wildId = "w01";;
        fortuneCoinAssembly.GameData.scatterId = "b01";;
        fortuneCoinAssembly.GameData.coinId = "c01";;
        fortuneCoinAssembly.GameData.coinsFeatureState = "";;
        fortuneCoinAssembly.GameData.coinsFeatureResume = "BaseGame";;
        fortuneCoinAssembly.GameData.autoSpinStarted = false;;
        fortuneCoinAssembly.GameData.autoSpinSteps = 0;;
        fortuneCoinAssembly.GameData.totalAutoSpins = 0;;
        fortuneCoinAssembly.GameData.bigWinAnnouncementCounter = 0;;
        fortuneCoinAssembly.GameData.lastSpin = false;;
        fortuneCoinAssembly.GameData.inactivityCounter = 0;;
        fortuneCoinAssembly.GameData.scatterWin = new fortuneCoinAssembly.ScatterAward("0", "0");;
        fortuneCoinAssembly.GameData.tutorialClosed = false;;
        fortuneCoinAssembly.GameData.doNotUpdateBalance = false;;
        fortuneCoinAssembly.GameData.rgPresentation = false;;
        fortuneCoinAssembly.GameData.isHighWin = false;;
        fortuneCoinAssembly.GameStaticFields.GAME_CONFIG = "game-config_json";;
        fortuneCoinAssembly.GameStaticFields.BASE_GAME = "BaseGame";;
        fortuneCoinAssembly.GameStaticFields.FREE_SPIN = "FreeSpin";;
        fortuneCoinAssembly.GameStaticFields.COINS_FEATURE = "CoinsFeature";;
        fortuneCoinAssembly.GameStaticFields.PICKER = "Picker";;
        fortuneCoinAssembly.GameStaticFields.OPTION_BET_PER_LINE = "betPerPattern";;
        fortuneCoinAssembly.GameStaticFields.OPTION_SELECTED_LINES = "patternsBet";;
        fortuneCoinAssembly.GameStaticFields.OPTION_TOTAL_STAKE = "stake";;
        fortuneCoinAssembly.GameStaticFields.OPTION_HELP = "howToPlay";;
        fortuneCoinAssembly.GameStaticFields.BALANCE_NOT_AVAILABLE = "BalanceValueNotAvailable";;
        fortuneCoinAssembly.GameStaticFields.MAXI = "MAXI";;
        fortuneCoinAssembly.GameStaticFields.MAJOR = "MAJOR";;
        fortuneCoinAssembly.GameStaticFields.MINOR = "MINOR";;
        fortuneCoinAssembly.GameStaticFields.MINI = "MINI";;
        fortuneCoinAssembly.SoundController.instance = null;;
        fortuneCoinAssembly.WinCycleController.instance = null;;
        fortuneCoinAssembly.WinMeterController.instance = null;;
        fortuneCoinAssembly.Storage.PREFIX_ID = "ollie_settings_";;
        fortuneCoinAssembly.StrategyFactory.stageArray = [];;
        fortuneCoinAssembly.LayerManager.vbAssetID = "layer-manager-assets/layer_manager.viewbuilder.json";;
        fortuneCoinAssembly.Picker.vbAssetID = "picker_layout.viewbuilder.json";;
        fortuneCoinAssembly.Popups.vbAssetID = "popups_layout.viewbuilder.json";;
        fortuneCoinAssembly.WinController.layoutAssetID = "win_controller_layout.viewbuilder.json";;
        return {
            exports: fortuneCoinAssembly,
            activator: fortuneCoinAssembly.Activator
        };
    });
//# sourceURL=fortuneCoinAssembly.js