public ApplicationSprite()
        {
            //Security.allowDomain("*");
            //Security.allowInsecureDomain("*");

            this.InvokeWhenStageIsReady(
                () =>
                {

                    var deal = KnownEmbeddedResources.Default[Sounds.Assets.deal];
                    var click = KnownEmbeddedResources.Default[Sounds.Assets.click];
                    var drag = KnownEmbeddedResources.Default[Sounds.Assets.drag];
                    var win = KnownEmbeddedResources.Default[Sounds.Assets.win];

                    content.Sounds.deal = () => deal.ToSoundAsset().play();
                    content.Sounds.click = () => click.ToSoundAsset().play();
                    content.Sounds.drag = () => drag.ToSoundAsset().play();
                    content.Sounds.win = () => win.ToSoundAsset().play();

                    content.AttachToContainer(this);
                    content.AutoSizeTo(this.stage);

                    if (Security.sandboxType == "application")
                    {
                        // AdMob!
                        // mochiAds wont work on Android!
                    }
                    else
                    {

                        var shadow = new Rectangle();

                        shadow.Fill = Brushes.Black;
                        shadow.Width = this.stage.stageWidth;
                        shadow.Height = this.stage.stageHeight;
                        shadow.Opacity = 0.5;

                        content.Children.Add(shadow);

                        var clip = new MovieClip().AttachTo(this);




                        //dynamic options = new object();

                        //options.clip = this;
                        //options.id = "47e72426ba7f4f3f";
                        //options.res = this.stage.stageWidth + "x" + this.stage.stageHeight;
                        //options.ad_finished = a;

                        // Error: MochiAd is missing the 'clip' parameter.  
                        // This should be a MovieClip, Sprite or an instance of a class that extends MovieClip or Sprite.

                        // https://www.mochimedia.com/community/forum/topic/desktop-air-application#46785de6

                        //                SecurityError: Error #2047: Security sandbox violation: parent: http://xs.mochiads.com/container/MochiAdsCDN-AS3.swf?do_init=1&cacheBust=1359132511880 cannot access app:/AvalonCardGames.AIRFreeCell.ApplicationSprite.swf.
                        //at flash.display::DisplayObject/get parent()
                        //at com.mochimedia.targeting::MochiAdsTargeting/removedFromStage()[/home/mochi/src/mochiads_erl/priv/as3/com/mochimedia/targeting/MochiAdsTargeting.as:128]
                        //at flash.display::DisplayObjectContainer/removeChildAt()
                        //at mochi.as3::MochiAd$/_cleanup()[W:\opensource\mochimedia.com\MochiAd.as:946]
                        //at Function/<anonymous>()[W:\opensource\mochimedia.com\MochiAd.as:195]
                        //at mochi.as3::MochiAd$/unload()[W:\opensource\mochimedia.com\MochiAd.as:924]
                        //at Function/<anonymous>()[W:\opensource\mochimedia.com\MochiAd.as:275]
                        //at Function/<anonymous>()[W:\opensource\mochimedia.com\MochiAd.as:41]


                        //                SecurityError: Error #2047: Security sandbox violation: parent: http://xs.mochiads.com/container/MochiAdsCDN-AS3.swf?do_init=1&cacheBust=1359134133659 cannot access app:/AvalonCardGames.AIRFreeCell.ApplicationSprite.swf.
                        //at flash.display::DisplayObject/get parent()
                        //at com.mochimedia.targeting::MochiAdsTargeting/removedFromStage()[/home/mochi/src/mochiads_erl/priv/as3/com/mochimedia/targeting/MochiAdsTargeting.as:128]
                        //at flash.display::DisplayObjectContainer/removeChildAt()
                        //at mochi.as3::MochiAd$/_cleanup()
                        //at MethodInfo-1806()
                        //at mochi.as3::MochiAd$/unload()
                        //at MethodInfo-1807()
                        //at MethodInfo-1793()

                        //    SecurityError: Error #2047: Security sandbox violation: parent: http://xs.mochiads.com/container/MochiAdsCDN-AS3.swf?do_init=1&cacheBust=1359134133659 cannot access app:/AvalonCardGames.AIRFreeCell.ApplicationSprite.swf.
                        //at flash.display::DisplayObject/get parent()
                        //at com.mochimedia.container::MochiAdsContainer/initalize()[/home/mochi/src/mochiads_erl/priv/as3/com/mochimedia/container/MochiAdsContainer.as:40]
                        //at com.mochimedia.targeting::MochiAdsTargeting/onJSONData()[/home/mochi/src/mochiads_erl/priv/as3/com/mochimedia/targeting/MochiAdsTargeting.as:780]
                        //at flash.events::EventDispatcher/dispatchEventFunction()
                        //at flash.events::EventDispatcher/dispatchEvent()
                        //at flash.net::URLLoader/onComplete()



                        var options = new MochiAdOptions
                        {

                            //TypeError: Error #1034: Type Coercion failed: cannot convert AvalonCardGames.AIRFreeCell::ApplicationSprite@14b37041 to flash.display.MovieClip.
                            //    at mochi.as3::MochiAd$/load()[W:\opensource\mochimedia.com\MochiAd.as:789]
                            //    at mochi.as3::MochiAd$/showPreGameAd()[W:\opensource\mochimedia.com\MochiAd.as:185]
                            //    at AvalonCardGames.AIRFreeCell::MochiAdOptions/showPreGameAd_100664136()[U:\web\AvalonCardGames\AIRFreeCell\MochiAdOptions.as:74]
                            //    at AvalonCardGames.AIRFreeCell::ApplicationSprite/__ctor_b__1_100663300()[U:\web\AvalonCardGames\AIRFreeCell\ApplicationSprite.as:82]

                            clip = clip,
                            id = _mochiads_game_id,
                            res = this.stage.stageWidth + "x" + this.stage.stageHeight,


                            ad_finished =
                             delegate
                             {
                                 this.removeChild(clip);

                                 shadow.Orphanize();

                                 {
                                     var now = DateTime.Now;
                                     Console.WriteLine(now + " ready! " + new { Security.sandboxType });
                                 }
                             }
                        };

                        {
                            var now = DateTime.Now;
                            Console.WriteLine(now + " can we get some ads? " + new { Security.sandboxType });
                        }
                        options.showPreGameAd();
                    }
                }
            );


            #region AtInitializeConsoleFormWriter

            var w = new __OutWriter();
            var o = Console.Out;
            var __reentry = false;

            var __buffer = new StringBuilder();

            w.AtWrite =
                x =>
                {
                    __buffer.Append(x);
                };

            w.AtWriteLine =
                x =>
                {
                    __buffer.AppendLine(x);
                };

            Console.SetOut(w);

            this.AtInitializeConsoleFormWriter = (
                Action<string> Console_Write,
                Action<string> Console_WriteLine
            ) =>
            {

                try
                {


                    w.AtWrite =
                        x =>
                        {
                            o.Write(x);

                            if (!__reentry)
                            {
                                __reentry = true;
                                Console_Write(x);
                                __reentry = false;
                            }
                        };

                    w.AtWriteLine =
                        x =>
                        {
                            o.WriteLine(x);

                            if (!__reentry)
                            {
                                __reentry = true;
                                Console_WriteLine(x);
                                __reentry = false;
                            }
                        };

                    Console.WriteLine("flash Console.WriteLine should now appear in JavaScript form!");
                    Console.WriteLine(__buffer.ToString());
                }
                catch
                {

                }
            };
            #endregion

        }
        public ApplicationSprite()
        {
            this.InvokeWhenStageIsReady(
                () =>
                {


                    var deal = KnownEmbeddedResources.Default[Sounds.Assets.deal];
                    var click = KnownEmbeddedResources.Default[Sounds.Assets.click];
                    var drag = KnownEmbeddedResources.Default[Sounds.Assets.drag];
                    var win = KnownEmbeddedResources.Default[Sounds.Assets.win];

                    content.Sounds.deal = () => deal.ToSoundAsset().play();
                    content.Sounds.click = () => click.ToSoundAsset().play();
                    content.Sounds.drag = () => drag.ToSoundAsset().play();
                    content.Sounds.win = () => win.ToSoundAsset().play();

                    content.AttachToContainer(this);
                    content.AutoSizeTo(this.stage);


                    var shadow = new Rectangle();

                    shadow.Fill = Brushes.Black;
                    shadow.Width = this.stage.stageWidth;
                    shadow.Height = this.stage.stageHeight;
                    shadow.Opacity = 0.5;

                    content.Children.Add(shadow);

                    var clip = new MovieClip().AttachTo(this);


                    var options = new MochiAdOptions
                    {

                        //TypeError: Error #1034: Type Coercion failed: cannot convert AvalonCardGames.AIRFreeCell::ApplicationSprite@14b37041 to flash.display.MovieClip.
                        //    at mochi.as3::MochiAd$/load()[W:\opensource\mochimedia.com\MochiAd.as:789]
                        //    at mochi.as3::MochiAd$/showPreGameAd()[W:\opensource\mochimedia.com\MochiAd.as:185]
                        //    at AvalonCardGames.AIRFreeCell::MochiAdOptions/showPreGameAd_100664136()[U:\web\AvalonCardGames\AIRFreeCell\MochiAdOptions.as:74]
                        //    at AvalonCardGames.AIRFreeCell::ApplicationSprite/__ctor_b__1_100663300()[U:\web\AvalonCardGames\AIRFreeCell\ApplicationSprite.as:82]

                        clip = clip,
                        id = _mochiads_game_id,
                        res = this.stage.stageWidth + "x" + this.stage.stageHeight,


                        ad_finished =
                         delegate
                         {
                             this.removeChild(clip);

                             content.Children.Remove(shadow);
                             //shadow.Orphanize();

                             {
                                 var now = DateTime.Now;
                                 Console.WriteLine(now + " ready! " + new { Security.sandboxType });
                             }
                         }
                    };

                    {
                        var now = DateTime.Now;
                        Console.WriteLine(now + " can we get some ads? " + new { Security.sandboxType });
                    }
                    options.showPreGameAd();
                }
            );
        }