local l_HttpService_0 = game:GetService("HttpService");
local l_CorePackages_0 = game:GetService("CorePackages");
local v2 = require(l_CorePackages_0.UIBlox);
local l_LoadingStateContainer_0 = v2.App.Container.LoadingStateContainer;
local l_RetrievalStatus_0 = v2.App.Loading.Enum.RetrievalStatus;
local v5 = require(l_CorePackages_0.Packages.t);
local l_Signal_0 = require(l_CorePackages_0.Workspace.Packages.AppCommonLib).Signal;
local v7 = require(l_CorePackages_0.Roact);
local v8 = require(l_CorePackages_0.RoactRodux);
local l_RoactServices_0 = require(l_CorePackages_0.Workspace.Packages.RoactServices).RoactServices;
local v10 = require(l_CorePackages_0.Workspace.Packages.RoactServiceTags);
local l_RoactNetworking_0 = v10.RoactNetworking;
local l_RoactAnalytics_0 = v10.RoactAnalytics;
local l_AppEventIngestService_0 = v10.AppEventIngestService;
local l_AppGameTile_0 = require(l_CorePackages_0.Workspace.Packages.GameTile).AppGameTile;
local l_gameDetailReferral_0 = require(l_CorePackages_0.Workspace.Packages.ExperienceAnalytics).Events.gameDetailReferral;
local l_AppPage_0 = require(l_CorePackages_0.Workspace.Packages.RobloxAppEnums).AppPage;
local l_withNavigation_0 = require(l_CorePackages_0.RoactNavigation).withNavigation;
local l_OpenGameDetails_0 = require(l_CorePackages_0.Workspace.Packages.GameDetail).OpenGameDetails;
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v20 = require(l_Modules_0.LuaApp.Constants);
local v21 = require(l_Modules_0.LuaApp.getGameCardSize);
local v22 = require(l_Modules_0.LuaApp.withTheme_DEPRECATED);
local v23 = require(l_Modules_0.LuaApp.Components.Games.GameCard);
local v24 = require(l_Modules_0.LuaApp.Components.SectionHeader);
local v25 = require(l_Modules_0.LuaApp.Components.ShimmerPanel);
local v26 = require(l_Modules_0.LuaApp.Thunks.Games.RecommendedGames);
local v27 = require(l_Modules_0.Personalization.Games.GameSortImpressionsDetector);
local v28 = require(l_Modules_0.Personalization.Games.SendGameImpressions);
local l_FFlagLuaAppRefactorOpenGameDetail_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).FFlagLuaAppRefactorOpenGameDetail;
local l_FFlagLuaAppGameTileProps_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).FFlagLuaAppGameTileProps;
local l_MAX_RECOMMENDED_GAMES_FETCH_COUNT_0 = v20.MAX_RECOMMENDED_GAMES_FETCH_COUNT;
local l_GAME_CAROUSEL_PADDING_0 = v20.GAME_CAROUSEL_PADDING;
local l_GAME_CAROUSEL_CHILD_PADDING_0 = v20.GAME_CAROUSEL_CHILD_PADDING;
local v34 = v7.PureComponent:extend("RecommendedGameCarousel");
v34.validateProps = v5.strictInterface({
    universeId = v5.string,
    gameDetailsViewWidth = v5.optional(v5.number),
    withNewThemeProvider = v5.optional(v5.boolean),
    appTheme = v5.optional(v5.table),
    LayoutOrder = v5.optional(v5.number),
    onPeekViewClosed = v5.optional(v5.callback),
    gameCardSize = v5.Vector2,
    recommendedGameEntries = v5.optional(v5.table),
    recommendedGamesFetchingStatus = v5.string,
    useSidewaysNavigation = v5.optional(v5.boolean),
    dispatchGetRecommendedGames = v5.callback,
    openGameDetails = if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else v5.callback,
    navigation = if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else v5.any,
    networking = v5.callback,
    eventIngest = v5.table,
    appAnalytics = v5.table
});
v34.init = function(v35)
    v35.scrollingFrameRef = v7.createRef();
    v35.carouselViewChangedSignal = l_Signal_0.new();
    v35.impressionsTagGuid = l_HttpService_0:GenerateGUID();
    v35.loadRecommendedGames = function()
        return v35.props.dispatchGetRecommendedGames(v35.props.networking, v35.props.universeId);
    end;
    if l_FFlagLuaAppRefactorOpenGameDetail_0 then
        v35.navigateToGameDetails = function(v36, v37)
            v35.props.openGameDetails(v36, v37, v35.props.navigation);
        end;
    end;
    v35.reportGameDetailOpened = function(v38)
        local l_recommendedGameEntries_0 = v35.props.recommendedGameEntries;
        if not (v35.isMounted and l_recommendedGameEntries_0 ~= nil) or v35.props.eventIngest == nil then
            return ;
        else
            local l_universeId_0 = v35.props.universeId;
            local v41 = #l_recommendedGameEntries_0;
            local v42 = l_recommendedGameEntries_0[v38];
            l_gameDetailReferral_0(v35.props.eventIngest, "gameDetails", {
                pg = "gameDetails",
                pos = v38,
                tis = v41,
                sortPos = 0,
                refId = l_universeId_0,
                pid = v42.placeId,
                ad = not v42.isSponsored and "no" or "yes",
                src = "recommended",
                universeId = v42.universeId
            });
            return ;
        end;
    end;
    v35.sendGameImpressions = function(v43)
        local l_recommendedGameEntries_1 = v35.props.recommendedGameEntries;
        if not v35.isMounted or l_recommendedGameEntries_1 == nil then
            return ;
        else
            v28.sendFromGameDetails(v35.props.eventIngest, v35.props.appAnalytics, v43, l_recommendedGameEntries_1, v35.props.universeId);
            return ;
        end;
    end;
    v35.updateImpressionsTracker = function()
        if v35.isMounted then
            v35.carouselViewChangedSignal:fire();
            return ;
        else
            return ;
        end;
    end;
end;
v34.didMount = function(v45)
    v45.isMounted = true;
end;
v34.willUnmount = function(v46)
    v46.isMounted = false;
end;
v34.renderShimmerCards = function(v47)
    local l_gameCardSize_0 = v47.props.gameCardSize;
    local v49 = {
        Layout = v7.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            FillDirection = Enum.FillDirection.Horizontal,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            Padding = UDim.new(0, l_GAME_CAROUSEL_CHILD_PADDING_0)
        })
    };
    for v50 = 1, 6 do
        v49["Card" .. tostring(v50)] = v7.createElement(v25, {
            LayoutOrder = v50,
            Size = UDim2.new(0, l_gameCardSize_0.X, 0, l_gameCardSize_0.Y)
        });
    end;
    return v7.createElement("Frame", {
        LayoutOrder = 2,
        Size = UDim2.new(1, l_GAME_CAROUSEL_PADDING_0, 0, l_gameCardSize_0.Y),
        BackgroundTransparency = 1
    }, v49);
end;
v34.renderGameCards = function(v51)
    local l_appTheme_0 = v51.props.appTheme;
    local l_recommendedGameEntries_2 = v51.props.recommendedGameEntries;
    local l_gameCardSize_1 = v51.props.gameCardSize;
    local v55 = math.max(0, #l_recommendedGameEntries_2 * (l_GAME_CAROUSEL_CHILD_PADDING_0 + l_gameCardSize_1.X));
    local l_useSidewaysNavigation_0 = v51.props.useSidewaysNavigation;
    local l_withNewThemeProvider_0 = v51.props.withNewThemeProvider;
    local v58 = "GameDetails_" .. tostring(v51.props.universeId) .. tostring(v51.impressionsTagGuid);
    local v59 = {
        Layout = v7.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            FillDirection = Enum.FillDirection.Horizontal,
            HorizontalAlignment = Enum.HorizontalAlignment.Left,
            Padding = UDim.new(0, l_GAME_CAROUSEL_CHILD_PADDING_0)
        }),
        GameSortImpressionsDetector = v7.createElement(v27, {
            parentRef = v51.scrollingFrameRef,
            pageContext = l_AppPage_0.GameDetail,
            impressionsTag = v58,
            scrollViewPositionChangedSignal = v51.carouselViewChangedSignal,
            sendGameImpressions = v51.sendGameImpressions
        })
    };
    if not l_withNewThemeProvider_0 then
        for v60, v61 in ipairs(l_recommendedGameEntries_2) do
            v59[v60] = v7.createElement(v23, {
                entry = v61,
                layoutOrder = v60,
                size = l_gameCardSize_1,
                reportGameDetailOpened = v51.reportGameDetailOpened,
                index = v60,
                useSidewaysNavigation = l_useSidewaysNavigation_0,
                gameCardTheme = l_appTheme_0.GameDetails.GameCard,
                impressionsTag = v58
            });
        end;
    else
        for v62, v63 in ipairs(l_recommendedGameEntries_2) do
            v59[v62] = v7.createElement(l_AppGameTile_0, {
                entry = v63,
                layoutOrder = v62,
                size = if l_FFlagLuaAppGameTileProps_0 then nil else l_gameCardSize_1,
                Size = if not l_FFlagLuaAppGameTileProps_0 then nil else UDim2.new(0, l_gameCardSize_1.X, 0, l_gameCardSize_1.Y),
                reportGameDetailOpened = v51.reportGameDetailOpened,
                index = v62,
                onPeekViewClosed = v51.props.onPeekViewClosed,
                showFriendActivity = false,
                impressionsTag = v58,
                navigateToGameDetails = if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else v51.navigateToGameDetails
            });
        end;
    end;
    return v7.createElement("ScrollingFrame", {
        LayoutOrder = 2,
        Size = UDim2.new(1, l_GAME_CAROUSEL_PADDING_0, 0, l_gameCardSize_1.Y),
        ScrollBarThickness = 0,
        BackgroundTransparency = 1,
        ClipsDescendants = false,
        CanvasSize = UDim2.new(0, v55, 0, l_gameCardSize_1.Y),
        ScrollingDirection = Enum.ScrollingDirection.X,
        ElasticBehavior = Enum.ElasticBehavior.Always,
        [v7.Change.AbsolutePosition] = v51.updateImpressionsTracker,
        [v7.Change.CanvasPosition] = v51.updateImpressionsTracker,
        [v7.Ref] = v51.scrollingFrameRef
    }, v59);
end;
v34.render = function(v64)
    local l_appTheme_1 = v64.props.appTheme;
    local l_LayoutOrder_0 = v64.props.LayoutOrder;
    local l_gameCardSize_2 = v64.props.gameCardSize;
    local l_recommendedGamesFetchingStatus_0 = v64.props.recommendedGamesFetchingStatus;
    local l_withNewThemeProvider_1 = v64.props.withNewThemeProvider;
    return v7.createElement("Frame", {
        LayoutOrder = l_LayoutOrder_0,
        Size = UDim2.new(1, 0, 0, 0),
        BackgroundTransparency = 1,
        BorderSizePixel = 0,
        AutomaticSize = Enum.AutomaticSize.Y
    }, {
        Layout = v7.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            FillDirection = Enum.FillDirection.Vertical,
            Padding = UDim.new(0, 10)
        }),
        Title = v7.createElement(v24, {
            LayoutOrder = 1,
            TextColor3 = not l_withNewThemeProvider_1 and l_appTheme_1.GameDetails.Carousel.Text.Color,
            Font = not l_withNewThemeProvider_1 and l_appTheme_1.GameDetails.Text.BoldFont,
            text = "Feature.GameDetails.Heading.Recommended",
            useLocalizedText = true
        }),
        Content = v7.createElement("Frame", {
            LayoutOrder = 2,
            Size = UDim2.new(1, 0, 0, l_gameCardSize_2.Y),
            BackgroundTransparency = 1
        }, {
            LoadingStateContainer = v7.createElement(l_LoadingStateContainer_0, {
                dataStatus = l_RetrievalStatus_0.fromRawValue(l_recommendedGamesFetchingStatus_0),
                onRetry = v64.loadRecommendedGames,
                renderOnLoading = function()
                    return v64:renderShimmerCards();
                end,
                renderOnLoaded = function()
                    return v64:renderGameCards();
                end
            })
        })
    });
end;
v34 = v8.connect(function(v70, v71)
    local v72 = v21(v71.gameDetailsViewWidth - l_GAME_CAROUSEL_PADDING_0, l_GAME_CAROUSEL_PADDING_0, l_GAME_CAROUSEL_CHILD_PADDING_0, 0.25);
    local v73 = nil;
    local v74 = v70.Navigation.history[#v70.Navigation.history];
    local l_name_0 = v74[#v74].name;
    local v76 = v74[#v74 - 1];
    if v76 then
        v73 = v76.name == l_name_0;
    end;
    return {
        gameCardSize = v72,
        recommendedGameEntries = v70.RecommendedGameEntries[v71.universeId],
        recommendedGamesFetchingStatus = v26.GetFetchingStatus(v70, v71.universeId),
        useSidewaysNavigation = v73
    };
end, function(v77)
    return {
        dispatchGetRecommendedGames = function(v78, v79)
            return v77(v26.Fetch(v78, v79, false, {
                maxRows = l_MAX_RECOMMENDED_GAMES_FETCH_COUNT_0
            }));
        end,
        openGameDetails = if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else function(v80, v81, v82)
            v77(l_OpenGameDetails_0(v80, v82, v81));
        end
    };
end)((v22(v34)));
if l_FFlagLuaAppRefactorOpenGameDetail_0 then
    v34 = l_withNavigation_0(v34);
end;
return l_RoactServices_0.connect({
    networking = l_RoactNetworking_0,
    eventIngest = l_AppEventIngestService_0,
    appAnalytics = l_RoactAnalytics_0
})(v34);


local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local l_AppLinking_0 = require(l_CorePackages_0.Workspace.Packages.RoactServiceTags).AppLinking;
local l_RoactServices_0 = require(l_CorePackages_0.Workspace.Packages.RoactServices).RoactServices;
local v4 = require(l_Modules_0.LuaApp.Enum.SocialMediaType);
local v5 = require(l_Modules_0.LuaApp.Components.DEPRECATED_ImageSetButton);
local v6 = require(l_Modules_0.LuaApp.Thunks.OpenCentralOverlayForLeaveRobloxAlert);
local v7 = require(l_Modules_0.LuaApp.Thunks.CloseCentralOverlay);
local l_Common_0 = l_Modules_0.Common;
local v9 = require(l_Common_0.Roact);
local v10 = require(l_Common_0.RoactRodux);
local v11 = require(l_Modules_0.LuaApp.withTheme_DEPRECATED);
local v12 = {
    [v4.Twitter] = "rbxasset://textures/ui/LuaApp/ExternalSite/twitter.png",
    [v4.Facebook] = "rbxasset://textures/ui/LuaApp/ExternalSite/facebook.png",
    [v4.Discord] = "rbxasset://textures/ui/LuaApp/ExternalSite/discord.png",
    [v4.RobloxGroup] = "LuaApp/icons/GameDetails/social/RobloxGroup",
    [v4.YouTube] = "rbxasset://textures/ui/LuaApp/ExternalSite/youtube.png",
    [v4.Twitch] = "rbxasset://textures/ui/LuaApp/ExternalSite/twitch.png",
    [v4.Amazon] = "rbxasset://textures/ui/LuaApp/ExternalSite/amazon.png",
    [v4.Guilded] = "rbxasset://textures/ui/LuaApp/ExternalSite/guilded.png"
};
local v13 = v9.PureComponent:extend("SocialMediaButton");
v13.init = function(v14)
    v14.state = {
        buttonPressed = false
    };
    v14.onInputBegan = function(_, v16)
        if not (not (v16.UserInputState == Enum.UserInputState.Begin and (not (v16.UserInputType ~= Enum.UserInputType.Touch) or v16.UserInputType == Enum.UserInputType.MouseButton1)) or v14.state.buttonPressed) then
            v14:setState({
                buttonPressed = true
            });
        end;
    end;
    v14.onInputEnded = function()
        if v14.state.buttonPressed then
            v14:setState({
                buttonPressed = false
            });
        end;
    end;
    v14.onActivated = function()
        v14.props.openLeaveRobloxAlertUIBlox(v14.openUrl);
    end;
    v14.getUriParams = function()
        if v14.props.socialType == v4.Twitter then
            local v17 = v14.props.socialUrl:match("twitter.com/+([a-zA-Z0-9_]+)/*");
            if v17 ~= nil then
                return {
                    app_uri = "twitter://user?screen_name=" .. v17,
                    web_uri = v14.props.socialUrl
                };
            end;
        end;
        return {
            app_uri = v14.props.socialUrl,
            web_uri = v14.props.socialUrl
        };
    end;
    v14.openUrl = function()
        local v18 = v14.getUriParams();
        v14.props.linking:openURL(v18.app_uri):andThen(function(v19)
            if v19 == false then
                v14.props.linking:openURL(v18.web_uri);
            end;
        end);
        v14.props.closeAlert();
    end;
end;
v13.render = function(v20)
    local l_Size_0 = v20.props.Size;
    local l_socialType_0 = v20.props.socialType;
    local l_LayoutOrder_0 = v20.props.LayoutOrder;
    local l_buttonPressed_0 = v20.state.buttonPressed;
    local l_SocialMediaButton_0 = v20.props.appTheme.GameDetails.SocialMediaButton;
    return v9.createElement(v5, {
        Size = l_Size_0,
        LayoutOrder = l_LayoutOrder_0,
        Image = v12[l_socialType_0],
        ImageTransparency = not not l_buttonPressed_0 and l_SocialMediaButton_0.OnPressTransparency or l_SocialMediaButton_0.Transparency,
        BorderSizePixel = 0,
        BackgroundTransparency = 1,
        [v9.Event.Activated] = v20.onActivated,
        [v9.Event.InputBegan] = v20.onInputBegan,
        [v9.Event.InputEnded] = v20.onInputEnded
    });
end;
return l_RoactServices_0.connect({
    linking = l_AppLinking_0
})((v10.connect(function(_)
end, function(v27)
    return {
        openLeaveRobloxAlertUIBlox = function(v28)
            v27(v6(v28));
        end,
        closeAlert = function()
            v27(v7());
        end
    };
end)((v11(v13)))));


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v1 = require(l_Modules_0.Common.Roact);
local v2 = require(l_Modules_0.Common.RoactRodux);
local v3 = require(l_Modules_0.LuaApp.Components.GameDetails.SocialMediaButton);
local v4 = v1.PureComponent:extend("SocialMediaGroup");
v4.render = function(v5)
    local l_LayoutOrder_0 = v5.props.LayoutOrder;
    local l_socialLinks_0 = v5.props.socialLinks;
    if not l_socialLinks_0 or #l_socialLinks_0 == 0 then
        return nil;
    else
        local v8 = {
            ListLayout = v1.createElement("UIListLayout", {
                FillDirection = Enum.FillDirection.Horizontal,
                HorizontalAlignment = Enum.HorizontalAlignment.Left,
                SortOrder = Enum.SortOrder.LayoutOrder,
                Padding = UDim.new(0, 20)
            })
        };
        for v9, v10 in ipairs(v5.props.socialLinks) do
            v8["SocialButton_" .. v10.type] = v1.createElement(v3, {
                Size = UDim2.new(0, 44, 0, 44),
                LayoutOrder = v9,
                socialType = v10.type,
                socialUrl = v10.url
            });
        end;
        return v1.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, 44),
            BackgroundTransparency = 1,
            LayoutOrder = l_LayoutOrder_0
        }, v8);
    end;
end;
return v2.connect(function(v11, v12)
    local v13 = v11.GameSocialLinks[v12.universeId];
    return {
        socialLinks = v13 and v13.externalLinks
    };
end)(v4);


local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v2 = require(l_Modules_0.Common.Roact);
local v3 = require(l_Modules_0.LuaApp.withLocalization);
local v4 = require(l_Modules_0.LuaApp.Components.FitTextLabel);
local v5 = require(l_Modules_0.LuaApp.Components.GenericIconButtonUIBlox);
local l_Images_0 = require(l_CorePackages_0.UIBlox).App.ImageSet.Images;
local v7 = require(l_Modules_0.Common.RoactRodux);
local v8 = UDim2.new(0, 44, 0, 44);
local v9 = UDim2.new(0, 37, 0, 37);
local v10 = v2.PureComponent:extend("SwapToSourceButton");
v10.init = function(v11)
    v11.onActivated = function()
        if v11.props.onSwapToSource ~= nil then
            v11.props.onSwapToSource();
        end;
    end;
end;
v10.render = function(v12)
    local l_layoutOrder_0 = v12.props.layoutOrder;
    local l_padding_0 = v12.props.padding;
    local l_font_0 = v12.props.font;
    local l_textColor_0 = v12.props.textColor;
    local l_textSize_0 = v12.props.textSize;
    local l_showSource_0 = v12.props.showSource;
    return v3({
        swapToSourceText = "Feature.GameDetails.Action.SwapToSource",
        swapToTranslatedText = {
            "Feature.GameDetails.Action.SwapToTranslation";
            userLanguage = v12.props.nativeLocaleName
        }
    })(function(v19)
        return v2.createElement("Frame", {
            LayoutOrder = l_layoutOrder_0,
            Size = UDim2.new(1, 20, 0, 0),
            BorderSizePixel = 0,
            AutomaticSize = Enum.AutomaticSize.X,
            BackgroundTransparency = 1
        }, {
            Layout = v2.createElement("UIListLayout", {
                SortOrder = Enum.SortOrder.LayoutOrder,
                FillDirection = Enum.FillDirection.Horizontal,
                VerticalAlignment = Enum.VerticalAlignment.Center,
                Padding = UDim.new(0, l_padding_0 / 2)
            }),
            Padding = v2.createElement("UIPadding", {
                PaddingTop = UDim.new(0, 2 * l_padding_0),
                PaddingBottom = UDim.new(0, 2 * l_padding_0),
                PaddingLeft = UDim.new(0, l_padding_0),
                PaddingRight = UDim.new(0, l_padding_0)
            }),
            SwapToSourceButton = v2.createElement(v5, {
                LayoutOrder = 1,
                Size = v8,
                iconImage = l_Images_0["icons/common/refresh"],
                iconSize = v9,
                onActivated = v12.onActivated,
                isLoading = false,
                isDisabled = false
            }),
            SwapToSourceTextLabel = v2.createElement(v4, {
                LayoutOrder = 2,
                Size = UDim2.new(1, 0, 0, 0),
                Text = not not l_showSource_0 and v19.swapToTranslatedText or v19.swapToSourceText,
                TextXAlignment = Enum.TextXAlignment.Left,
                TextWrapped = true,
                BackgroundTransparency = 1,
                Font = l_font_0,
                TextSize = l_textSize_0,
                TextColor3 = l_textColor_0
            })
        });
    end);
end;
return (v7.connect(function(v20, _)
    return {
        nativeLocaleName = v20.NativeLocaleName or ""
    };
end)(v10));


local l_CoreGui_0 = game:GetService("CoreGui");
local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = l_CoreGui_0.RobloxGui.Modules;
local v3 = require(l_Modules_0.Common.Roact);
local v4 = require(l_Modules_0.Common.RoactRodux);
local l_LoadableImage_0 = require(l_CorePackages_0.UIBlox).App.Loading.LoadableImage;
local l_GameIconReducer_0 = require(l_CorePackages_0.Workspace.Packages.GameIconRodux).GameIcons.GameIconReducer;
local v7 = v3.PureComponent:extend("GameThumbnail");
v7.render = function(v8)
    local l_image_0 = v8.props.image;
    return v3.createElement(l_LoadableImage_0, {
        Image = l_image_0 and l_image_0.url,
        Size = v8.props.Size,
        Position = v8.props.Position,
        BackgroundColor3 = v8.props.BackgroundColor3,
        loadingImage = v8.props.loadingImage
    });
end;
return v4.connect(function(v10, v11)
    return {
        image = v10[l_GameIconReducer_0.key][v11.universeId]
    };
end)(v7);


local l_CorePackages_0 = game:GetService("CorePackages");
local v1 = require(l_CorePackages_0.Packages.React);
local v2 = require(l_CorePackages_0.RoactRodux);
local v3 = require(l_CorePackages_0.Packages.t);
local l_withGridConfig_DEPRECATED_0 = require(l_CorePackages_0.UIBlox).Core.Layout.Grid.withGridConfig_DEPRECATED;
local l_RoactServices_0 = require(l_CorePackages_0.Workspace.Packages.RoactServices).RoactServices;
local l_withNavigation_0 = require(l_CorePackages_0.RoactNavigation).withNavigation;
local v7 = require(l_CorePackages_0.Workspace.Packages.GameTile);
local l_SponsoredGamesRecordClick_0 = v7.SponsoredGamesRecordClick;
local l_AppExperienceActionRow_0 = v7.AppExperienceActionRow;
local l_ApiFetchGameDetails_0 = require(l_CorePackages_0.Workspace.Packages.GameDetailRodux).GameDetails.ApiFetchGameDetails;
local l_ImpressionsTagUtility_0 = require(l_CorePackages_0.Workspace.Packages.Impressions).ImpressionsTagUtility;
local l_OpenGameDetails_0 = require(l_CorePackages_0.Workspace.Packages.GameDetail).OpenGameDetails;
local l_BigGameIconReducer_0 = require(l_CorePackages_0.Workspace.Packages.GameIconRodux).BigGameIcons.BigGameIconReducer;
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v15 = require(l_Modules_0.LuaApp.Services.RoactNetworking);
local v16 = require(l_Modules_0.LuaApp.Constants);
local v17 = require(l_Modules_0.LuaApp.Experiment.RoactAppExperiment);
local v18 = require(l_Modules_0.LuaApp.Experiment.AppUserLayers);
local v19 = require(l_Modules_0.LuaApp.getRatingText);
local v20 = require(l_Modules_0.LuaApp.Components.Games.AppFeaturedTile);
local v21 = require(l_Modules_0.LuaApp.Components.Games.FeaturedContentPanel);
local v22 = require(l_Modules_0.LuaApp.Components.Games.FeaturedStaticPanel);
local v23 = require(l_Modules_0.LuaApp.Flags.GetFFlagShowCreatorNameOnEmphasisSearchTileIXP);
local l_GAME_GRID_CHILD_PADDING_0 = v16.GAME_GRID_CHILD_PADDING;
local v25 = v16.GAME_GRID_CHILD_PADDING * 2;
local v26 = v1.PureComponent:extend("AppFeaturedGameTileTwoByTwo");
v26.validateProps = v3.strictInterface({
    entry = v3.table,
    index = v3.optional(v3.number),
    layoutOrder = v3.optional(v3.number),
    reportGameDetailOpened = v3.optional(v3.callback),
    reportExperienceLaunched = v3.optional(v3.callback),
    size = v3.optional(v3.Vector2),
    position = v3.optional(v3.Vector2),
    source = v3.optional(v3.string),
    referralSource = v3.optional(v3.string),
    hasBackground = v3.optional(v3.boolean),
    hasActionRow = v3.optional(v3.boolean),
    isDynamic = v3.optional(v3.boolean),
    impressionsTag = v3.optional(v3.string),
    launchExperienceEventContext = v3.optional(v3.string),
    universeId = v3.optional(v3.string),
    name = v3.optional(v3.string),
    creatorName = v3.optional(v3.string),
    placeId = v3.optional(v3.string),
    totalUpVotes = v3.optional(v3.number),
    totalDownVotes = v3.optional(v3.number),
    gameDetail = v3.optional(v3.table),
    thumbnail = v3.optional(v3.table),
    openGameDetails = v3.callback,
    fetchGameDetails = v3.callback,
    navigation = v3.any,
    networking = v3.callback,
    shouldShowFeaturedTileCreatorName = v3.optional(v3.boolean)
});
v26.init = function(v27)
    v27.isMounted = false;
    v27.gameTileRef = v1.createRef();
    v27.onActivated = function()
        if v27.isMounted then
            v27.props.openGameDetails(v27.props.universeId, {
                source = v27.props.source,
                index = v27.props.index,
                onPeekViewClosed = v27.props.onPeekViewClosed
            }, v27.props.navigation);
            local l_index_0 = v27.props.index;
            local l_reportGameDetailOpened_0 = v27.props.reportGameDetailOpened;
            if not (not l_index_0 or not l_reportGameDetailOpened_0) then
                l_reportGameDetailOpened_0(l_index_0);
            end;
            local l_networking_0 = v27.props.networking;
            local l_entry_0 = v27.props.entry;
            if l_entry_0.isSponsored then
                l_SponsoredGamesRecordClick_0(l_networking_0, l_entry_0.adId);
            end;
            return ;
        else
            return ;
        end;
    end;
    v27.renderActionRow = function()
        return v1.createElement(l_AppExperienceActionRow_0, {
            universeId = v27.props.universeId,
            referralSource = v27.props.referralSource,
            launchSource = "FeaturedSearchTile",
            reportExperienceLaunched = v27.props.reportExperienceLaunched,
            openGameDetails = v27.onActivated,
            entry = v27.props.entry,
            launchExperienceEventContext = v27.props.launchExperienceEventContext
        });
    end;
    v27.renderBottomPanel = function()
        local l_entry_1 = v27.props.entry;
        local l_name_0 = v27.props.name;
        local l_totalUpVotes_0 = v27.props.totalUpVotes;
        local l_totalDownVotes_0 = v27.props.totalDownVotes;
        local l_gameDetail_0 = v27.props.gameDetail;
        local v37 = (l_gameDetail_0 and l_gameDetail_0.creator) and l_gameDetail_0.creator.hasVerifiedBadge;
        local v38 = (l_gameDetail_0 and l_gameDetail_0.creator) and l_gameDetail_0.creator.id;
        local v39 = not not l_gameDetail_0 and l_gameDetail_0.description or "";
        local l_shouldShowFeaturedTileCreatorName_0 = v27.props.shouldShowFeaturedTileCreatorName;
        local l_isDynamic_0 = v27.props.isDynamic;
        return l_withGridConfig_DEPRECATED_0({
            featuredContentRows = 4
        })(function(v42)
            local v43 = {
                hasBackground = v27.props.hasBackground,
                contentRows = if not l_isDynamic_0 then nil else v42.featuredContentRows,
                padding = 8,
                title = l_name_0,
                creatorName = if not l_shouldShowFeaturedTileCreatorName_0 then nil else v27.props.creatorName,
                creatorVerified = v37,
                creatorId = v38,
                description = v39,
                footerData = {
                    rating = v19(l_totalUpVotes_0, l_totalDownVotes_0),
                    playingCount = l_entry_1.playerCount
                }
            };
            if not l_isDynamic_0 then
                return v1.createElement(v22, v43);
            else
                return v1.createElement(v21, v43);
            end;
        end);
    end;
end;
v26.didMount = function(v44)
    v44.isMounted = true;
    l_ImpressionsTagUtility_0.AddTag(v44.gameTileRef, v44.props.impressionsTag, v44.props.index);
    v44.props.fetchGameDetails(v44.props.networking, v44.props.universeId);
end;
v26.willUnmount = function(v45)
    v45.isMounted = false;
    l_ImpressionsTagUtility_0.RemoveTag(v45.gameTileRef, v45.props.impressionsTag, v45.props.index);
end;
v26.didUpdate = function(v46, v47)
    if not (v47.impressionsTag == v46.props.impressionsTag) or v47.index ~= v46.props.index then
        l_ImpressionsTagUtility_0.RemoveTag(v46.gameTileRef, v47.impressionsTag, v47.index);
        l_ImpressionsTagUtility_0.AddTag(v46.gameTileRef, v46.props.impressionsTag, v46.props.index);
    end;
end;
v26.render = function(v48)
    local l_layoutOrder_0 = v48.props.layoutOrder;
    local l_size_0 = v48.props.size;
    local l_position_0 = v48.props.position;
    local l_thumbnail_0 = v48.props.thumbnail;
    l_thumbnail_0 = l_thumbnail_0 and l_thumbnail_0.url;
    local v53 = if not l_size_0 then nil else l_size_0.X;
    local v54 = if not l_size_0 then nil else l_size_0.Y;
    local v55 = if not l_size_0 then nil else v53 * 2 + l_GAME_GRID_CHILD_PADDING_0;
    local v56 = if not l_size_0 then nil else v54 * 2 + v25;
    local l_hasBackground_0 = v48.props.hasBackground;
    local v58 = v1.createElement(v20, {
        hasBackground = l_hasBackground_0,
        hasOutline = l_hasBackground_0,
        thumbnail = l_thumbnail_0,
        renderActionRow = if not v48.props.hasActionRow then nil else v48.renderActionRow,
        renderBottomPanel = v48.renderBottomPanel,
        onActivated = v48.onActivated
    });
    return v1.createElement("Frame", {
        Position = if not not l_size_0 and l_position_0 then UDim2.fromOffset(l_position_0.X, l_position_0.Y) else nil,
        Size = if not l_size_0 then UDim2.new(1, 0, 1, 0) else UDim2.new(0, v53, 0, v54),
        BackgroundTransparency = 1,
        LayoutOrder = l_layoutOrder_0,
        ref = v48.gameTileRef
    }, {
        FeaturedTile = if not l_size_0 then v58 else v1.createElement("Frame", {
            Size = UDim2.new(0, v55, 0, v56),
            Position = UDim2.new(0, 0, 0, -v54 - v25),
            BackgroundTransparency = 1
        }, {
            Tile = v58
        })
    });
end;
return (v17.connectUserLayer({
    not not v23() and v18.PlayerAppSearchResultsPageUXLayer or nil
}, function(v59, _)
    return {
        shouldShowFeaturedTileCreatorName = (v59[v18.PlayerAppSearchResultsPageUXLayer] or {}).ShouldShowFeaturedTileCreatorName == true
    };
end)((l_RoactServices_0.connect({
    networking = v15
})((l_withNavigation_0((v2.connect(function(v61, v62)
    local l_universeId_0 = v62.entry.universeId;
    local v64 = v61.Games[l_universeId_0];
    return {
        universeId = l_universeId_0,
        name = v64.name,
        creatorName = v64.creatorName,
        placeId = v64.placeId,
        totalUpVotes = v64.totalUpVotes,
        totalDownVotes = v64.totalDownVotes,
        gameDetail = v61.GameDetails[l_universeId_0],
        thumbnail = v61[l_BigGameIconReducer_0.key][l_universeId_0]
    };
end, function(v65)
    return {
        openGameDetails = function(v66, v67, v68)
            v65(l_OpenGameDetails_0(v66, v68, v67));
        end,
        fetchGameDetails = function(v69, v70)
            v65(l_ApiFetchGameDetails_0.Fetch(v69, {
                v70
            }));
        end
    };
end)(v26))))))));


local l_CorePackages_0 = game:GetService("CorePackages");
local v1 = require(l_CorePackages_0.Packages.React);
local v2 = require(l_CorePackages_0.UIBlox);
local l_VerticalTile_0 = v2.App.Tile.VerticalTile;
local l_VerticalTileThumbnail_0 = v2.App.Tile.VerticalTileThumbnail;
return function(v5)
    local v6 = v5.hasBackground or false;
    local v7 = 0;
    if v5.renderActionRow then
        v7 = not v5.hasBackground and 40 or 48;
    end;
    return v1.createElement(l_VerticalTile_0, {
        hasOutline = v5.hasOutline,
        hasBackground = v6,
        isHoverEnabled = v6,
        isOverlayVisible = v6,
        onActivated = v5.onActivated,
        renderTopContent = v1.useCallback(function()
            return v1.createElement(l_VerticalTileThumbnail_0, {
                aspectRatio = 1,
                isTopRounded = true,
                isBottomRounded = not v6,
                thumbnail = v5.thumbnail
            });
        end, {
            v5.hasBackground,
            v5.thumbnail
        }),
        renderBottomContent = v5.renderBottomPanel,
        renderFooterRow = v5.renderActionRow,
        reservedBottomHeight = v7
    });
end;


local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v2 = require(l_CorePackages_0.Packages.React);
local l_useStyle_0 = require(l_CorePackages_0.UIBlox).Core.Style.useStyle;
local v4 = require(l_CorePackages_0.Packages.Dash);
local l_ExperienceFooter_0 = require(l_CorePackages_0.Workspace.Packages.GameTile).ExperienceFooter;
local v6 = require(l_Modules_0.LuaApp.Components.Common.ItemTileCreatorName);
return function(v7)
    local v8 = l_useStyle_0();
    local l_Font_0 = v8.Font;
    local l_Theme_0 = v8.Theme;
    local v11 = math.max(v7.contentRows or 1, 2);
    local v12 = math.max(0, v11 - 2);
    local v13 = v11 > 3;
    local v14 = v11 == 2;
    local v15 = v7.padding or 0;
    local v16 = math.ceil(l_Font_0.BaseSize * l_Font_0.Header2.RelativeSize);
    local v17 = v2.createElement(l_ExperienceFooter_0, (v4.join(v7.footerData, {
        size = UDim2.new(0, 132, 0, v16),
        position = if v13 or v14 then UDim2.new(1, 0, 0, 0) else nil,
        anchorPoint = if v13 or v14 then Vector2.new(1, 0) else nil,
        isStatsOnly = true
    })));
    return v2.createElement("Frame", {
        Size = UDim2.new(1, 0, 1, 0),
        BackgroundTransparency = 1,
        ClipsDescendants = true
    }, {
        UIPadding = v2.createElement("UIPadding", {
            PaddingLeft = if not v7.hasBackground then nil else UDim.new(0, v15),
            PaddingRight = UDim.new(0, v15),
            PaddingTop = UDim.new(0, (math.max(v15, 8))),
            PaddingBottom = UDim.new(0, v15)
        }),
        Layout = v2.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            FillDirection = Enum.FillDirection.Vertical,
            Padding = UDim.new(0, 8)
        }),
        TitleFrame = v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, v16),
            BackgroundTransparency = 1,
            LayoutOrder = 1
        }, {
            Title = if not not v7.title and string.len(v7.title) > 0 then v2.createElement("TextLabel", {
                Size = UDim2.new(1, not v13 and 0 or -132, 1, 0),
                BackgroundTransparency = 1,
                Text = v7.title,
                Font = l_Font_0.Header2.Font,
                TextSize = v16,
                TextTransparency = l_Theme_0.TextEmphasis.Transparency,
                TextColor3 = l_Theme_0.TextEmphasis.Color,
                TextWrapped = true,
                TextTruncate = Enum.TextTruncate.AtEnd,
                TextXAlignment = Enum.TextXAlignment.Left,
                TextYAlignment = Enum.TextYAlignment.Top
            }) else nil,
            InlineFooter = if not v13 then nil else v17
        }),
        SubtitleFrame = v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, v16),
            BackgroundTransparency = 1,
            LayoutOrder = 2
        }, {
            CreatorName = if not v7.creatorName then nil else v2.createElement("Frame", {
                Size = UDim2.new(1, not v14 and 0 or -132, 1, 0),
                BackgroundTransparency = 1
            }, {
                Text = v2.createElement(v6, {
                    name = v7.creatorName,
                    hasVerifiedBadge = v7.creatorVerified,
                    creatorId = v7.creatorId
                })
            }),
            InlineFooter = if not v14 then nil else v17
        }),
        BodyFrame = if v12 > 0 then v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, v16 * v12),
            BackgroundTransparency = 1,
            ClipsDescendants = true,
            LayoutOrder = 3
        }, {
            ExperienceInfo = if v12 > 1 then v2.createElement("TextLabel", {
                Size = UDim2.new(1, 0, 1, 0),
                BackgroundTransparency = 1,
                Text = v7.description,
                Font = l_Font_0.Body.Font,
                TextSize = l_Font_0.BaseSize * l_Font_0.Body.RelativeSize,
                TextTransparency = l_Theme_0.TextDefault.Transparency,
                TextColor3 = l_Theme_0.TextDefault.Color,
                TextWrapped = true,
                TextTruncate = Enum.TextTruncate.AtEnd,
                TextXAlignment = Enum.TextXAlignment.Left,
                TextYAlignment = Enum.TextYAlignment.Top
            }) else v17
        }) else nil
    });
end;


local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v2 = require(l_CorePackages_0.Packages.React);
local l_useStyle_0 = require(l_CorePackages_0.UIBlox).Core.Style.useStyle;
local v4 = require(l_CorePackages_0.Packages.Dash);
local l_ExperienceFooter_0 = require(l_CorePackages_0.Workspace.Packages.GameTile).ExperienceFooter;
local v6 = require(l_Modules_0.LuaApp.Components.Common.ItemTileCreatorName);
return function(v7)
    local v8 = l_useStyle_0();
    local l_Font_0 = v8.Font;
    local l_Theme_0 = v8.Theme;
    local v11 = v7.padding or 0;
    local v12 = math.ceil(l_Font_0.BaseSize * l_Font_0.Header2.RelativeSize);
    return v2.createElement("Frame", {
        Size = UDim2.new(1, 0, 1, 0),
        BackgroundTransparency = 1,
        ClipsDescendants = true
    }, {
        UIPadding = v2.createElement("UIPadding", {
            PaddingTop = UDim.new(0, v11),
            PaddingLeft = if not v7.hasBackground then nil else UDim.new(0, v11),
            PaddingRight = if not v7.hasBackground then nil else UDim.new(0, v11),
            PaddingBottom = if not v7.hasBackground then nil else UDim.new(0, v11)
        }),
        Layout = v2.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            FillDirection = Enum.FillDirection.Vertical,
            Padding = UDim.new(0, v11)
        }),
        Title = if not not v7.title and string.len(v7.title) > 0 then v2.createElement("TextLabel", {
            Size = UDim2.new(1, 0, 0, v12),
            BackgroundTransparency = 1,
            Text = v7.title,
            Font = l_Font_0.Header2.Font,
            TextSize = v12,
            TextTransparency = l_Theme_0.TextEmphasis.Transparency,
            TextColor3 = l_Theme_0.TextEmphasis.Color,
            TextWrapped = true,
            TextTruncate = Enum.TextTruncate.AtEnd,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top,
            LayoutOrder = 1
        }) else nil,
        Footer = v2.createElement(l_ExperienceFooter_0, (v4.join(v7.footerData, {
            size = UDim2.new(0, 132, 0, v12),
            layoutOrder = 2,
            isStatsOnly = true
        }))),
        CreatorName = if not v7.creatorName then nil else v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, v12),
            BackgroundTransparency = 1,
            LayoutOrder = 3
        }, {
            Text = v2.createElement(v6, {
                name = v7.creatorName,
                hasVerifiedBadge = v7.creatorVerified,
                creatorId = v7.creatorId
            })
        }),
        Description = if not not v7.description and string.len(v7.description) > 0 then v2.createElement("TextLabel", {
            Size = UDim2.new(1, 0, 0, v12 * 3),
            BackgroundTransparency = 1,
            Text = v7.description,
            Font = l_Font_0.Body.Font,
            TextSize = l_Font_0.BaseSize * l_Font_0.Body.RelativeSize,
            TextTransparency = l_Theme_0.TextDefault.Transparency,
            TextColor3 = l_Theme_0.TextDefault.Color,
            TextWrapped = true,
            TextTruncate = Enum.TextTruncate.AtEnd,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top,
            LayoutOrder = 4
        }) else nil
    });
end;


local l_CorePackages_0 = game:GetService("CorePackages");
local v1 = require(l_CorePackages_0.Roact);
local v2 = require(l_CorePackages_0.RoactRodux);
local l_memoize_0 = require(l_CorePackages_0.Workspace.Packages.AppCommonLib).memoize;
local l_UserIconList_0 = require(l_CorePackages_0.Workspace.Packages.GameTile).UserIconList;
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v6 = require(l_Modules_0.LuaApp.sortFriendsByPresenceAndRecency);
local v7 = require(l_Modules_0.LuaApp.withTheme_DEPRECATED);
local v8 = v1.PureComponent:extend("FriendFooter");
v8.defaultProps = {
    innerMargin = 0,
    outerMargin = 0,
    titleTextSize = 0,
    footerContentWidth = 0,
    footerContentHeight = 0,
    friends = {},
    gameName = ""
};
v8.render = function(v9)
    local l_appTheme_0 = v9.props.appTheme;
    local l_innerMargin_0 = v9.props.innerMargin;
    local l_outerMargin_0 = v9.props.outerMargin;
    local l_titleTextSize_0 = v9.props.titleTextSize;
    return v1.createElement("Frame", {
        Size = UDim2.new(1, 0, 1, 0),
        BackgroundTransparency = 1,
        BorderSizePixel = 0
    }, {
        Layout = v1.createElement("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            Padding = UDim.new(0, l_innerMargin_0)
        }),
        Padding = v1.createElement("UIPadding", {
            PaddingLeft = UDim.new(0, l_outerMargin_0),
            PaddingRight = UDim.new(0, l_outerMargin_0),
            PaddingTop = UDim.new(0, l_outerMargin_0)
        }),
        Title = v1.createElement("TextLabel", {
            LayoutOrder = 1,
            Size = UDim2.new(1, 0, 0, l_titleTextSize_0),
            BackgroundTransparency = 1,
            BorderSizePixel = 0,
            TextSize = l_titleTextSize_0,
            TextColor3 = l_appTheme_0.GameCard.Title.Color,
            Font = l_appTheme_0.GameCard.Title.Font,
            Text = v9.props.gameName,
            TextTruncate = Enum.TextTruncate.AtEnd,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextYAlignment = Enum.TextYAlignment.Top
        }),
        UserIconList = v1.createElement(l_UserIconList_0, {
            layoutOrder = 2,
            width = v9.props.footerContentWidth,
            height = v9.props.footerContentHeight,
            users = v9.props.friends
        })
    });
end;
v8 = v7(v8);
local v20 = l_memoize_0(function(v14, v15)
    if v14 and v15 then
        local v16 = {};
        for _, v18 in pairs(v15) do
            local v19 = v14[v18];
            if not (not v19 or not v19.isFriend) then
                table.insert(v16, v19);
            end;
        end;
        table.sort(v16, v6);
        return v16;
    else
        return {};
    end;
end);
return (v2.connect(function(v21, v22)
    local l_universeId_0 = v22.universeId;
    assert(typeof(l_universeId_0) == "string", "universeId must be provided as a valid string.");
    local v24 = v21.Games[l_universeId_0];
    local v25 = "";
    if v24 then
        v25 = v24.name;
    end;
    return {
        friends = v20(v21.Users, v21.InGameUsersByGame[l_universeId_0]),
        gameName = v25
    };
end)(v8));


local l_CorePackages_0 = game:GetService("CorePackages");
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v2 = require(l_CorePackages_0.Roact);
local v3 = require(l_Modules_0.LuaApp.Constants);
local v4 = require(l_CorePackages_0.UIBlox);
local l_withStyle_0 = v4.Style.withStyle;
local l_Images_0 = v4.App.ImageSet.Images;
local l_RoactAppPolicy_0 = require(l_CorePackages_0.Workspace.Packages.UniversalAppPolicy).RoactAppPolicy;
local l_usePlayerCountText_0 = require(l_CorePackages_0.Workspace.Packages.GameTile).usePlayerCountText;
local v9 = require(l_CorePackages_0.Cryo);
local l_useAbbreviatedNumberLocalization_0 = require(l_CorePackages_0.Workspace.Packages.Localization).Hooks.useAbbreviatedNumberLocalization;
local v11 = require(l_Modules_0.LuaApp.Components.FitImageTextFrame);
local v12 = l_Images_0["icons/status/games/rating_small"];
local v13 = l_Images_0["icons/status/games/people-playing_small"];
local v14 = l_Images_0["icons/status/games/sessions_large"];
local v15 = {
    [v3.GameBasicStatsLayoutType[v3.GameCardLayoutType.Small]] = {
        Padding = 6,
        TextSize = 14,
        IconSize = 10,
        IconTextPadding = 3
    },
    [v3.GameBasicStatsLayoutType[v3.GameCardLayoutType.Medium]] = {
        Padding = 12,
        TextSize = 14,
        IconSize = 10,
        IconTextPadding = 3
    },
    [v3.GameBasicStatsLayoutType[v3.GameCardLayoutType.Large]] = {
        Padding = 12,
        TextSize = 16,
        IconSize = 12,
        IconTextPadding = 3
    },
    [v3.GameBasicStatsLayoutType.GameDetails] = {
        Padding = 13,
        TextSize = 22,
        IconSize = 17,
        IconTextPadding = 5
    }
};
local v16 = v2.PureComponent:extend("GameBasicStats");
v16.init = function(v17)
    v17.getImageProps = function(v18, v19)
        local l_themeInfo_0 = v17.props.themeInfo;
        local v21 = v15[v17.props.layoutType];
        return not not v17.props.withNewThemeProvider and {
            Size = UDim2.new(0, v21.IconSize, 0, v21.IconSize),
            Image = v18,
            ImageColor3 = v19.Theme.TextMuted.Color,
            ImageTransparency = v19.Theme.TextMuted.Transparency
        } or {
            Size = UDim2.new(0, v21.IconSize, 0, v21.IconSize),
            Image = v18,
            ImageColor3 = l_themeInfo_0.Color,
            ImageTransparency = l_themeInfo_0.Transparency
        };
    end;
    v17.getTextProps = function(v22, v23)
        local l_themeInfo_1 = v17.props.themeInfo;
        local v25 = v15[v17.props.layoutType];
        return not not v17.props.withNewThemeProvider and {
            Text = v22,
            Font = v23.Font.SubHeader1.Font,
            TextSize = v25.TextSize,
            TextColor3 = v23.Theme.TextMuted.Color,
            TextTransparency = v23.Theme.TextMuted.Transparency
        } or {
            Text = v22,
            Font = l_themeInfo_1.Font,
            TextColor3 = l_themeInfo_1.Color,
            TextTransparency = l_themeInfo_1.Transparency,
            TextSize = v25.TextSize
        };
    end;
end;
v16.render = function(v26)
    local l_Position_0 = v26.props.Position;
    local l_LayoutOrder_0 = v26.props.LayoutOrder;
    local l_upVotes_0 = v26.props.upVotes;
    local l_downVotes_0 = v26.props.downVotes;
    local l_showGlobalCounters_0 = v26.props.showGlobalCounters;
    local l_visits_0 = v26.props.visits;
    local l_layoutType_0 = v26.props.layoutType;
    assert(l_layoutType_0 ~= nil, "GameBasicStats expects a layoutType props");
    local v34 = v15[l_layoutType_0];
    assert(v34 ~= nil, "GameBasicStats expects a supported layoutType props; was given: " .. l_layoutType_0);
    local l_playerCountText_0 = v26.props.playerCountText;
    local l_visitsText_0 = v26.props.visitsText;
    local v37 = "--";
    if not (l_upVotes_0 ~= nil) or l_upVotes_0 < 0 then
        l_upVotes_0 = 0;
    end;
    if not (l_downVotes_0 ~= nil) or l_downVotes_0 < 0 then
        l_downVotes_0 = 0;
    end;
    local v38 = l_upVotes_0 + l_downVotes_0;
    if v38 > 0 then
        v37 = math.floor((l_upVotes_0 / v38) * 100) .. "%";
    end;
    return l_withStyle_0(function(v39)
        return v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 0, v34.TextSize),
            Position = l_Position_0,
            LayoutOrder = l_LayoutOrder_0,
            BackgroundTransparency = 1,
            BorderSizePixel = 0
        }, {
            Layout = v2.createElement("UIListLayout", {
                SortOrder = Enum.SortOrder.LayoutOrder,
                FillDirection = Enum.FillDirection.Horizontal,
                VerticalAlignment = Enum.VerticalAlignment.Center,
                Padding = UDim.new(0, v34.Padding)
            }),
            VoteInfo = v2.createElement(v11, {
                LayoutOrder = 1,
                padding = v34.IconTextPadding,
                imageProps = v26.getImageProps(v12, v39),
                textProps = v26.getTextProps(v37, v39)
            }),
            PlayerCountInfo = v2.createElement(v11, {
                LayoutOrder = 2,
                padding = v34.IconTextPadding,
                imageProps = v26.getImageProps(v13, v39),
                textProps = v26.getTextProps(l_playerCountText_0, v39)
            }),
            VisitsInfo = (l_showGlobalCounters_0 and l_visits_0) and v2.createElement(v11, {
                LayoutOrder = 3,
                padding = v34.IconTextPadding,
                imageProps = v26.getImageProps(v14, v39),
                textProps = v26.getTextProps(l_visitsText_0, v39)
            })
        });
    end);
end;
local l_v16_0 = v16;
return (l_RoactAppPolicy_0.connect(function(v41, _)
    return {
        showGlobalCounters = v41.getShowGlobalCounters()
    };
end)(function(v43)
    return v2.createElement(l_v16_0, v9.Dictionary.join(v43, {
        playerCountText = l_usePlayerCountText_0(v43.playerCount),
        visitsText = l_useAbbreviatedNumberLocalization_0(v43.visits)
    }));
end));


local l_RunService_0 = game:GetService("RunService");
local l_CorePackages_0 = game:GetService("CorePackages");
local v2 = require(l_CorePackages_0.Cryo);
local l_LaunchErrorLocalizationKeys_0 = require(l_CorePackages_0.Workspace.Packages.GameLaunch).LaunchErrorLocalizationKeys;
local l_ApiFetchPlayabilityStatus_0 = require(l_CorePackages_0.Workspace.Packages.PlayabilityRodux).PlayabilityStatus.ApiFetchPlayabilityStatus;
local v5 = require(l_CorePackages_0.Workspace.Packages.GameTile);
local l_SponsoredGamesRecordClick_0 = v5.SponsoredGamesRecordClick;
local l_OpenCentralOverlayForPlacesList_0 = v5.OpenCentralOverlayForPlacesList;
local l_RoactServices_0 = require(l_CorePackages_0.Workspace.Packages.RoactServices).RoactServices;
local l_AppGame_0 = require(l_CorePackages_0.Workspace.Packages.RoactServiceTags).AppGame;
local l_ImpressionsTagUtility_0 = require(l_CorePackages_0.Workspace.Packages.Impressions).ImpressionsTagUtility;
local l_ExperienceService_0 = require(l_CorePackages_0.Workspace.Packages.ExperienceService).ExperienceService;
local l_UseExperienceService_0 = require(l_CorePackages_0.Workspace.Packages.ExperienceService).Flags.UseExperienceService;
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v14 = require(l_Modules_0.Common.Roact);
local v15 = require(l_Modules_0.Common.RoactRodux);
local v16 = require(l_Modules_0.Common.memoize);
local v17 = require(l_Modules_0.Common.RoactUtilities.ExternalEventConnection);
local v18 = require(l_Modules_0.LuaApp.Constants);
local v19 = require(l_Modules_0.LuaApp.RoactMotion);
local v20 = require(l_Modules_0.LuaApp.Enum.ToastType);
local v21 = require(l_Modules_0.LuaApp.Enum.RetrievalStatus);
local v22 = require(l_Modules_0.LuaApp.AppPage);
local v23 = require(l_Modules_0.LuaApp.withTheme_DEPRECATED);
local v24 = require(l_Modules_0.LuaApp.Thunks.NavigateDown);
local v25 = require(l_Modules_0.LuaApp.Thunks.NavigateSideways);
local v26 = require(l_Modules_0.LuaApp.Components.UIScaler);
local v27 = require(l_Modules_0.LuaApp.Components.Games.GameBasicStats);
local v28 = require(l_Modules_0.LuaApp.Components.Games.QuickLaunchAnimation);
local v29 = require(l_Modules_0.LuaApp.Components.GameThumbnail);
local v30 = require(l_Modules_0.LuaApp.Components.LocalizedTextLabel);
local v31 = require(l_Modules_0.LuaApp.Components.Games.FriendFooter);
local v32 = require(l_Modules_0.LuaApp.Actions.SetCurrentToastMessage);
local v33 = require(l_Modules_0.LuaApp.Services.RoactNetworking);
local l_FFlag_0 = settings():GetFFlag("EnableQuickGameLaunch");
local l_GRAY3_0 = v18.Color.GRAY3;
local l_WHITE_0 = v18.Color.WHITE;
local l_DEFAULT_GAME_ICON_0 = v18.DEFAULT_GAME_ICON;
local v38 = {
    [v18.GameCardLayoutType.Small] = {
        OuterMargin = 3,
        InnerMargin = 3,
        TitleTextSize = 16
    },
    [v18.GameCardLayoutType.Medium] = {
        OuterMargin = 6,
        InnerMargin = 3,
        TitleTextSize = 16
    },
    [v18.GameCardLayoutType.Large] = {
        OuterMargin = 6,
        InnerMargin = 3,
        TitleTextSize = 18
    }
};
local v39 = {
    GameCard = 2,
    Sponsor = 3,
    QuickLaunch = 4
};
local v40 = {
    HIDDEN = "Hidden",
    SHORT_PRESS = "ShortPress",
    PLAY_ANIMATION = "PlayAnimation",
    REWIND_ANIMATION_BUTTON_UP = "RewindAnimationButtonUp",
    REWIND_ANIMATION_BUTTON_DOWN = "RewindAnimationButtonDown",
    HIDDEN_BUTTON_DOWN = "HiddenButtonDown"
};
local v41 = false;
local v42 = v14.PureComponent:extend("GameCard");
v42.defaultProps = {
    friendFooterEnabled = false
};
v42.isQuickLaunchVisible = function(v43)
    local v44 = true;
    if v43.state.quickLaunchState ~= v40.PLAY_ANIMATION then
        v44 = true;
        if v43.state.quickLaunchState ~= v40.REWIND_ANIMATION_BUTTON_DOWN then
            v44 = v43.state.quickLaunchState == v40.REWIND_ANIMATION_BUTTON_UP;
        end;
    end;
    return v44;
end;
v42.isAnimationRewind = function(v45)
    local v46 = true;
    if v45.state.quickLaunchState ~= v40.REWIND_ANIMATION_BUTTON_DOWN then
        v46 = v45.state.quickLaunchState == v40.REWIND_ANIMATION_BUTTON_UP;
    end;
    return v46;
end;
v42.isGameCardPressed = function(v47)
    local v48 = true;
    if v47.state.quickLaunchState ~= v40.SHORT_PRESS then
        v48 = true;
        if v47.state.quickLaunchState ~= v40.PLAY_ANIMATION then
            v48 = true;
            if v47.state.quickLaunchState ~= v40.REWIND_ANIMATION_BUTTON_DOWN then
                v48 = v47.state.quickLaunchState == v40.HIDDEN_BUTTON_DOWN;
            end;
        end;
    end;
    return v48;
end;
v42.eventDisconnect = function(v49)
    if v49.onAbsolutePositionChanged then
        v49.onAbsolutePositionChanged:Disconnect();
        v49.onAbsolutePositionChanged = nil;
    end;
end;
v42.setQuickLaunchState = function(v50, v51, v52)
    v50:setState({
        quickLaunchState = v51,
        quickLaunchTriggerTime = not not l_FFlag_0 and v52 or 0
    });
end;
v42.Action_onButtonUp = function(v53)
    v53:eventDisconnect();
    v41 = false;
end;
v42.Action_onButtonDown = function(v54)
    v41 = true;
    v54:eventDisconnect();
    v54.onAbsolutePositionChanged = v54.gameCardRef.current and v54.gameCardRef.current:GetPropertyChangedSignal("AbsolutePosition"):Connect(function()
        v54.Event_buttonUp();
    end);
    if l_FFlag_0 and v54.props.playabilityFetchingStatus == v21.NotStarted then
        v54.props.fetchPlayabilityStatus(v54.props.networking, {
            v54.props.game.universeId
        });
    end;
end;
v42.Action_openGameDetails = function(v55)
    local l_universeId_0 = v55.props.game.universeId;
    if not v55.props.useSidewaysNavigation then
        v55.props.navigateDown({
            name = v22.GameDetail,
            detail = l_universeId_0
        });
    else
        v55.props.navigateSideways({
            name = v22.GameDetail,
            detail = l_universeId_0
        });
    end;
    v55.props.reportGameDetailOpened(v55.props.index);
    local l_networking_0 = v55.props.networking;
    local l_entry_0 = v55.props.entry;
    if l_entry_0.isSponsored then
        l_SponsoredGamesRecordClick_0(l_networking_0, l_entry_0.adId);
    end;
end;
v42.Action_launchGame = function(v59)
    if not l_UseExperienceService_0() then
        v59.props.game:launchGame({
            placeId = v59.props.game.placeId,
            referralPage = "LuaGameCard"
        });
        return ;
    else
        l_ExperienceService_0:LaunchExperience({
            placeId = v59.props.game.placeId,
            referralPage = "LuaGameCard"
        });
        return ;
    end;
end;
v42.Action_launchError = function(v60, v61)
    v60.props.setCurrentToastMessage({
        toastType = v20.QuickLaunchError,
        toastMessage = l_LaunchErrorLocalizationKeys_0[v61],
        toastSubMessage = "Feature.GamePage.QuickLaunch.ViewDetails",
        universeId = v60.props.game.universeId,
        placeId = v60.props.game.placeId
    });
end;
v42.init = function(v62)
    v62.gameCardRef = v14.createRef();
    v62.friendFooterRef = v14.createRef();
    v62.state = {
        quickLaunchState = v40.HIDDEN,
        quickLaunchTriggerTime = 0
    };
    v62.Event_buttonDown = function()
        if not (v41 or v62:isGameCardPressed()) then
            v62:Action_onButtonDown();
            v62:setQuickLaunchState(v40.SHORT_PRESS, tick() + 0.125);
        end;
    end;
    v62.Event_buttonUp = function()
        local l_quickLaunchState_0 = v62.state.quickLaunchState;
        if not (l_quickLaunchState_0 ~= v40.SHORT_PRESS) or l_quickLaunchState_0 == v40.HIDDEN_BUTTON_DOWN then
            v62:Action_onButtonUp();
            v62:setQuickLaunchState(v40.HIDDEN);
            return ;
        else
            if not (l_quickLaunchState_0 ~= v40.PLAY_ANIMATION) or l_quickLaunchState_0 == v40.REWIND_ANIMATION_BUTTON_DOWN then
                v62:Action_onButtonUp();
                v62:setQuickLaunchState(v40.REWIND_ANIMATION_BUTTON_UP);
            end;
            return ;
        end;
    end;
    v62.Event_buttonShortPressed = function(v64)
        local l_game_0 = v62.props.game;
        local l_size_0 = v62.props.size;
        local l_openContextualMenu_0 = v62.props.openContextualMenu;
        local v68 = false;
        if v62.friendFooterRef.current then
            local l_Position_0 = v64.Position;
            local l_AbsoluteSize_0 = v62.friendFooterRef.current.AbsoluteSize;
            local l_AbsolutePosition_0 = v62.friendFooterRef.current.AbsolutePosition;
            local v72 = false;
            if l_AbsolutePosition_0.X <= l_Position_0.X then
                v72 = false;
                if l_Position_0.X <= l_AbsolutePosition_0.X + l_AbsoluteSize_0.X then
                    v72 = false;
                    if l_AbsolutePosition_0.Y <= l_Position_0.Y then
                        v72 = l_Position_0.Y <= l_AbsolutePosition_0.Y + l_AbsoluteSize_0.Y;
                    end;
                end;
            end;
            v68 = v72;
        end;
        if v62:isGameCardPressed() then
            v62:Action_onButtonUp();
            if not v68 then
                v62:Action_openGameDetails();
            else
                l_openContextualMenu_0(l_game_0, l_size_0, v62.getCardPosition());
            end;
            v62:setQuickLaunchState(v40.HIDDEN);
        end;
    end;
    v62.Event_animationDone = function()
        local v73 = v62.props.playabilityFetchingStatus == v21.Failed;
        local l_playabilityStatus_0 = v62.props.playabilityStatus;
        local v75 = not v73;
        local v76 = v73 and v21.Failed;
        if l_playabilityStatus_0 then
            v75 = l_playabilityStatus_0.isPlayable;
            v76 = l_playabilityStatus_0.playabilityStatus;
        end;
        if not v75 then
            v62:Action_launchError(v76);
            v62:setQuickLaunchState(v40.REWIND_ANIMATION_BUTTON_DOWN);
            return ;
        else
            v62:Action_launchGame();
            v62:Action_onButtonUp();
            v62:setQuickLaunchState(v40.HIDDEN);
            return ;
        end;
    end;
    v62.Event_rewindDone = function()
        if v62.state.quickLaunchState == v40.REWIND_ANIMATION_BUTTON_UP then
            v62:setQuickLaunchState(v40.HIDDEN);
            return ;
        else
            if v62.state.quickLaunchState == v40.REWIND_ANIMATION_BUTTON_DOWN then
                v62:setQuickLaunchState(v40.HIDDEN_BUTTON_DOWN);
            end;
            return ;
        end;
    end;
    v62.Event_routeChanged = function()
        if v62.state.quickLaunchState ~= v40.HIDDEN then
            v62:Action_onButtonUp();
            v62:setQuickLaunchState(v40.HIDDEN);
        end;
    end;
    v62.onButtonInputBegan = function(_, v78)
        if v78.UserInputState == Enum.UserInputState.Begin and (not (v78.UserInputType ~= Enum.UserInputType.Touch) or v78.UserInputType == Enum.UserInputType.MouseButton1) then
            v62.Event_buttonDown();
        end;
    end;
    v62.onButtonInputEnded = function(_, v80)
        if (v62.state.quickLaunchState == v40.SHORT_PRESS and v80.UserInputState == Enum.UserInputState.End) and (not (v80.UserInputType ~= Enum.UserInputType.Touch) or v80.UserInputType == Enum.UserInputType.MouseButton1) then
            v62.Event_buttonShortPressed(v80);
            return ;
        else
            v62.Event_buttonUp();
            return ;
        end;
    end;
    v62.renderSteppedCallback = function(_)
        local l_quickLaunchTriggerTime_0 = v62.state.quickLaunchTriggerTime;
        if l_quickLaunchTriggerTime_0 > 0 and l_quickLaunchTriggerTime_0 <= tick() then
            v62:setQuickLaunchState(v40.PLAY_ANIMATION);
        end;
    end;
    v62.getCardPosition = function()
        if not v62.gameCardRef.current then
            return Vector2.new(0, 0);
        else
            return v62.gameCardRef.current.AbsolutePosition;
        end;
    end;
    v62.getLayoutType = function(v83)
        if v83 >= 148 then
            return v18.GameCardLayoutType.Large;
        elseif v83 >= 100 then
            return v18.GameCardLayoutType.Medium;
        else
            return v18.GameCardLayoutType.Small;
        end;
    end;
    v62.getLayoutInfo = function(v84, v85)
        local l_size_1 = v62.props.size;
        local v87 = v2.Dictionary.join(v38[v84]);
        v87.TitleHeight = not not v85 and v87.TitleTextSize or v87.TitleTextSize * 2;
        v87.FooterHeight = l_size_1.Y - l_size_1.X;
        v87.FriendFooterHeight = (v87.FooterHeight - v87.OuterMargin * 2) - v87.TitleHeight;
        v87.FooterContentWidth = l_size_1.X - v87.OuterMargin * 2;
        return v87;
    end;
end;
v42.render = function(v88)
    local l_appTheme_0 = v88.props.appTheme;
    local l_size_2 = v88.props.size;
    local l_layoutOrder_0 = v88.props.layoutOrder;
    local l_entry_1 = v88.props.entry;
    local l_game_1 = v88.props.game;
    local l_friendFooterEnabled_0 = v88.props.friendFooterEnabled;
    local l_hasInGameFriends_0 = v88.props.hasInGameFriends;
    local l_name_0 = l_game_1.name;
    local l_universeId_1 = l_game_1.universeId;
    local l_totalDownVotes_0 = l_game_1.totalDownVotes;
    local l_totalUpVotes_0 = l_game_1.totalUpVotes;
    local l_playerCount_0 = l_entry_1.playerCount;
    local l_isSponsored_0 = l_entry_1.isSponsored;
    local v102 = l_friendFooterEnabled_0 and l_hasInGameFriends_0;
    local v103 = not l_isSponsored_0 and not v102;
    local v104 = l_isSponsored_0 and not v102;
    local v105 = v88.getLayoutType(l_size_2.X);
    local v106 = v88.getLayoutInfo(v105, l_isSponsored_0 or v102);
    local v107 = v88:isQuickLaunchVisible();
    local v108 = v88:isAnimationRewind();
    local v109 = v88:isGameCardPressed();
    local v110 = v88.props.gameCardTheme or l_appTheme_0.GameCard;
    local l_createElement_0 = v14.createElement;
    local v112 = "Frame";
    local v113 = {
        Size = UDim2.new(0, l_size_2.X, 0, l_size_2.Y),
        BackgroundTransparency = 1,
        BorderSizePixel = 0,
        LayoutOrder = l_layoutOrder_0,
        [v14.Ref] = v88.gameCardRef
    };
    local v114 = {
        GameButton = v14.createElement("TextButton", {
            AnchorPoint = Vector2.new(0.5, 0.5),
            Position = UDim2.new(0.5, 0, 0.5, 0),
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            AutoButtonColor = false,
            ZIndex = v39.GameCard,
            [v14.Event.InputBegan] = v88.onButtonInputBegan,
            [v14.Event.InputEnded] = v88.onButtonInputEnded
        }, {
            UIScaler = v14.createElement(v26, {
                scaleValue = v19.spring(not v109 and 1 or 0.9, 1000, 50, 0.5)
            }),
            Icon = v14.createElement(v29, {
                Size = UDim2.new(0, l_size_2.X, 0, l_size_2.X),
                universeId = l_universeId_1,
                BackgroundColor3 = v18.Color.GRAY5,
                loadingImage = l_DEFAULT_GAME_ICON_0,
                ZIndex = v39.GameCard
            }),
            GameInfoFooter = not v102 and v14.createElement("Frame", {
                Size = UDim2.new(1, 0, 0, v106.FooterHeight),
                Position = UDim2.new(0, 0, 0, l_size_2.X),
                BackgroundTransparency = v110.Background.Transparency,
                BorderSizePixel = 0,
                BackgroundColor3 = v110.Background.Color,
                ZIndex = v39.GameCard
            }, {
                Layout = v14.createElement("UIListLayout", {
                    SortOrder = Enum.SortOrder.LayoutOrder,
                    Padding = UDim.new(0, v106.InnerMargin)
                }),
                Padding = v14.createElement("UIPadding", {
                    PaddingLeft = UDim.new(0, v106.OuterMargin),
                    PaddingRight = UDim.new(0, v106.OuterMargin),
                    PaddingTop = UDim.new(0, v106.OuterMargin)
                }),
                Title = v14.createElement("TextLabel", {
                    LayoutOrder = 1,
                    Size = UDim2.new(1, 0, 0, v106.TitleHeight),
                    BackgroundTransparency = 1,
                    BorderSizePixel = 0,
                    TextSize = v106.TitleTextSize,
                    TextColor3 = v110.Title.Color,
                    Font = v110.Title.Font,
                    Text = l_name_0,
                    TextTruncate = Enum.TextTruncate.AtEnd,
                    TextXAlignment = Enum.TextXAlignment.Left,
                    TextYAlignment = Enum.TextYAlignment.Top,
                    TextWrapped = true
                }),
                Info = v103 and v14.createElement(v27, {
                    LayoutOrder = 2,
                    playerCount = l_playerCount_0,
                    upVotes = l_totalUpVotes_0,
                    downVotes = l_totalDownVotes_0,
                    themeInfo = v110.GameBasicStats,
                    layoutType = v18.GameBasicStatsLayoutType[v105]
                })
            }),
            FriendFooter = v102 and v14.createElement("Frame", {
                Size = UDim2.new(0, l_size_2.X, 0, v106.FooterHeight),
                Position = UDim2.new(0, 0, 0, l_size_2.X),
                BackgroundTransparency = v110.Background.Transparency,
                BackgroundColor3 = v110.Background.Color,
                BorderSizePixel = 0,
                ZIndex = v39.GameCard,
                [v14.Ref] = v88.friendFooterRef
            }, {
                FriendFooter = v14.createElement(v31, {
                    universeId = l_universeId_1,
                    innerMargin = v106.InnerMargin,
                    outerMargin = v106.OuterMargin,
                    titleTextSize = v106.TitleTextSize,
                    footerContentWidth = v106.FooterContentWidth,
                    footerContentHeight = v106.FriendFooterHeight
                })
            }),
            Sponsor = v104 and v14.createElement("Frame", {
                Size = UDim2.new(1, 0, 0, 14 + v106.OuterMargin * 2),
                Position = UDim2.new(0, 0, 1, 0),
                AnchorPoint = Vector2.new(0, 1),
                BackgroundColor3 = l_GRAY3_0,
                BorderSizePixel = 0,
                ZIndex = v39.Sponsor
            }, {
                SponsorText = v14.createElement(v30, {
                    Size = UDim2.new(1, -v106.OuterMargin * 2, 0, 14),
                    Position = UDim2.new(0, v106.OuterMargin, 0, v106.OuterMargin),
                    BackgroundTransparency = 1,
                    BorderSizePixel = 0,
                    TextSize = 14,
                    TextColor3 = l_WHITE_0,
                    Font = Enum.Font.SourceSans,
                    Text = "Feature.GamePage.Label.Sponsored"
                })
            }),
            QuickLaunchAnimation = v107 and v14.createElement(v28, {
                Size = UDim2.new(1, 0, 1, 0),
                ZIndex = v39.QuickLaunch,
                gameCardHeight = l_size_2.Y,
                rewindAnimation = v108,
                onAnimationDoneCallback = v88.Event_animationDone,
                onRewindDoneCallback = v88.Event_rewindDone
            })
        })
    };
    local v115 = false;
    if v88.state.quickLaunchTriggerTime > 0 then
        v115 = v14.createElement(v17, {
            event = l_RunService_0.renderStepped,
            callback = v88.renderSteppedCallback
        });
    end;
    v114.renderStepped = v115;
    return l_createElement_0(v112, v113, v114);
end;
v42.didUpdate = function(v116, v117, _)
    if v117.currentRoute ~= v116.props.currentRoute then
        v116.Event_routeChanged();
    end;
    if not (v117.impressionsTag == v116.props.impressionsTag) or v117.index ~= v116.props.index then
        l_ImpressionsTagUtility_0.RemoveTag(v116.gameCardRef, v117.impressionsTag, v117.index);
        l_ImpressionsTagUtility_0.AddTag(v116.gameCardRef, v116.props.impressionsTag, v116.props.index);
    end;
end;
v42.didMount = function(v119)
    l_ImpressionsTagUtility_0.AddTag(v119.gameCardRef, v119.props.impressionsTag, v119.props.index);
end;
v42.willUnmount = function(v120)
    v120:Action_onButtonUp();
    l_ImpressionsTagUtility_0.RemoveTag(v120.gameCardRef, v120.props.impressionsTag, v120.props.index);
end;
v42 = v23(v42);
local v127 = v16(function(v121, v122, v123)
    if not (not v121 or not v122) and v123 then
        for _, v125 in pairs(v123) do
            if v125 ~= v121 then
                local v126 = v122[v125];
                if not (not v126 or not v126.isFriend) then
                    return true;
                end;
            end;
        end;
        return false;
    else
        return false;
    end;
end);
return l_RoactServices_0.connect({
    networking = v33,
    game = l_AppGame_0
})((v15.connect(function(v128, v129)
    local l_universeId_2 = v129.entry.universeId;
    return {
        game = v128.Games[l_universeId_2],
        hasInGameFriends = v127(v128.LocalUserId, v128.Users, v128.InGameUsersByGame[l_universeId_2]),
        playabilityFetchingStatus = l_ApiFetchPlayabilityStatus_0.GetFetchingStatus(v128, l_universeId_2),
        playabilityStatus = v128.PlayabilityStatus[l_universeId_2],
        currentRoute = v128.Navigation.history[#v128.Navigation.history]
    };
end, function(v131)
    return {
        fetchPlayabilityStatus = function(v132, v133)
            return v131(l_ApiFetchPlayabilityStatus_0.Fetch(v132, v133));
        end,
        setCurrentToastMessage = function(v134)
            return v131(v32(v134));
        end,
        navigateDown = function(v135)
            v131(v24(v135));
        end,
        navigateSideways = function(v136)
            v131(v25(v136));
        end,
        openContextualMenu = function(v137, v138, v139)
            v131(l_OpenCentralOverlayForPlacesList_0(v137, v138, v139));
        end
    };
end)(v42)));


local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local l_CorePackages_0 = game:GetService("CorePackages");
local v2 = require(l_CorePackages_0.Packages.React);
local v3 = require(l_CorePackages_0.Cryo);
local v4 = require(l_Modules_0.Personalization.OmniFeed.OmniFeedTypes);
local l_useSelector_0 = require(l_CorePackages_0.Workspace.Packages.RoactUtils).Hooks.RoactRodux.useSelector;
local l_useDesignTokens_0 = require(l_CorePackages_0.Workspace.Packages.Style).useDesignTokens;
local l_IconTabGroup_0 = require(l_CorePackages_0.UIBlox).App.Navigation.PrimaryNavBar.IconTabGroup;
local l_GetFFlagTenFootUiCategoryTabSafeArea_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).GetFFlagTenFootUiCategoryTabSafeArea;
return function(v9)
    local l_size_0 = v9.size;
    local l_onSelected_0 = v9.onSelected;
    local l_selectedSortIndex_0 = v9.selectedSortIndex;
    local l_selectedSortName_0 = v9.selectedSortName;
    local l_sortCategories_0 = v9.sortCategories;
    local v15 = l_useDesignTokens_0();
    local v17 = l_useSelector_0(function(v16)
        return v16.GameSorts;
    end);
    local v19 = l_useSelector_0(function(v18)
        return v18.GameSortGroups;
    end);
    local v21 = l_useSelector_0(function(v20)
        return v20.OmniRecommendationsSorts;
    end);
    local v32 = v2.useMemo(function()
        local v22 = {};
        local function _(v23, v24)
            table.insert(v22, {
                sort = v23,
                storeIndex = v24
            });
        end;
        for _, v27 in l_sortCategories_0, nil, nil do
            if not v27.isOmni then
                for v28, v29 in v19[v27.sortType].sorts, nil, nil do
                    table.insert(v22, {
                        sort = v17[v29],
                        storeIndex = v28
                    });
                end;
            elseif v21[v27.sortType] then
                for v30, v31 in v21[v27.sortType], nil, nil do
                    if v31.treatmentType == v4.Carousel then
                        table.insert(v22, {
                            sort = v31,
                            storeIndex = v30
                        });
                    end;
                end;
            end;
        end;
        return v22;
    end, {
        v17,
        v19,
        v21,
        l_sortCategories_0
    });
    local v36 = v2.useCallback(function(v33, v34)
        if l_onSelected_0 and v34 <= #v32 then
            local l_storeIndex_0 = v33.storeIndex;
            if l_storeIndex_0 then
                return l_onSelected_0(v33.sort, l_storeIndex_0, v34);
            end;
        end;
        return nil;
    end, {
        l_onSelected_0
    });
    return v2.createElement("ScrollingFrame", {
        Size = UDim2.new(1, 0, 1, 0),
        Selectable = false,
        ClipsDescendants = true,
        AutomaticCanvasSize = Enum.AutomaticSize.X,
        CanvasSize = UDim2.new(0, 0, 1, 0),
        CanvasPosition = Vector2.new(0, 0),
        ScrollBarThickness = 0,
        ScrollingDirection = Enum.ScrollingDirection.X,
        BackgroundTransparency = 1
    }, {
        Padding = if l_GetFFlagTenFootUiCategoryTabSafeArea_0() then nil else v2.createElement("UIPadding", {
            PaddingLeft = UDim.new(0, v15.Global.Space_250),
            PaddingRight = UDim.new(0, v15.Global.Space_250)
        }),
        TabGroup = v2.createElement(l_IconTabGroup_0, {
            size = l_size_0,
            fillDirection = Enum.FillDirection.Horizontal,
            horizontalAlignment = Enum.HorizontalAlignment.Left,
            sortOrder = Enum.SortOrder.LayoutOrder,
            items = v2.useMemo(function()
                return v3.List.map(v32, function(v37, v38)
                    local v39 = {
                        title = v37.sort.displayName,
                        onActivated = function()
                            v36(v37, v38);
                        end
                    };
                    local v40 = true;
                    if v37.sort.topicId ~= l_selectedSortName_0 then
                        v40 = v37.sort.name == l_selectedSortName_0;
                    end;
                    v39.showRoundedBackground = v40;
                    return v39;
                end);
            end, {
                v32,
                l_selectedSortName_0
            }),
            selection = {
                l_selectedSortIndex_0
            },
            padding = {
                left = 0,
                right = 0,
                top = 0,
                bottom = 0
            }
        })
    });
end;


local l_CorePackages_0 = game:GetService("CorePackages");
local v1 = require(l_CorePackages_0.UIBlox);
local l_GridMetrics_0 = v1.App.Grid.GridMetrics;
local l_useStyle_0 = v1.Core.Style.useStyle;
local l_getExperienceTileRelativeHeight_0 = v1.App.Tile.getExperienceTileRelativeHeight;
local l_AspectRatioModeEnum_0 = v1.App.Tile.AspectRatioModeEnum;
local v6 = require(l_CorePackages_0.Roact);
local v7 = require(l_CorePackages_0.Cryo);
local v8 = require(l_CorePackages_0.Workspace.Packages.GameTile);
local l_AppGameTile_0 = v8.AppGameTile;
local l_WideGameTileViewConfig_0 = v8.WideGameTileViewConfig;
local v11 = require(l_CorePackages_0.Symbol);
local v12 = require(l_CorePackages_0.RoactRodux);
local l_FormFactor_0 = require(l_CorePackages_0.Workspace.Packages.FormFactor).Enums.FormFactor;
local l_OpenGameDetails_0 = require(l_CorePackages_0.Workspace.Packages.GameDetail).OpenGameDetails;
local l_withNavigation_0 = require(l_CorePackages_0.RoactNavigation).withNavigation;
local l_useDesignTokens_0 = require(l_CorePackages_0.Workspace.Packages.Style).useDesignTokens;
local l_useUiModeInfo_0 = require(l_CorePackages_0.Workspace.Packages.RobloxAppHooks).useUiModeInfo;
local l_UiMode_0 = require(l_CorePackages_0.Workspace.Packages.RobloxAppEnums).UiMode;
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v20 = require(l_Modules_0.LuaApp.Constants);
local v21 = require(l_Modules_0.LuaApp.Components.Generic.GridView);
local v22 = require(l_Modules_0.LuaApp.Components.Games.AppFeaturedGameTileTwoByTwo);
local l_FFlagLuaAppGameTileProps_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).FFlagLuaAppGameTileProps;
local l_GetFFlagTenFootUiSeeAll_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).GetFFlagTenFootUiSeeAll;
local v25 = require(l_Modules_0.LuaApp.Flags.GetFFlagLuaAppUpdateGameSortGridRowHeight10ft);
local v26 = require(l_Modules_0.Personalization.Flags.getFFlagLuaAppGridTileTabletLayout);
local v27 = require(l_Modules_0.Personalization.Flags.FFlagLuaAppConsoleSupportRFY);
local l_FFlagLuaAppRefactorOpenGameDetail_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).FFlagLuaAppRefactorOpenGameDetail;
local l_FFlagLuaAppPlayButtonStyle_0 = require(l_CorePackages_0.Workspace.Packages.SharedFlags).FFlagLuaAppPlayButtonStyle;
local l_getFFlagLuaAppSingleHoveredGridTile_0 = v8.Flags.getFFlagLuaAppSingleHoveredGridTile;
local v31 = v6.PureComponent:extend("GameGrid");
local l_GAME_GRID_CHILD_PADDING_0 = v20.GAME_GRID_CHILD_PADDING;
local l_GAME_GRID_TILE_FOOTER_HEIGHT_0 = v20.GAME_GRID_TILE_FOOTER_HEIGHT;
local l_NarrowColumnCount_0 = v20.GridTiles.NarrowColumnCount;
local l_NarrowTileMargin_0 = v20.GridTiles.NarrowTileMargin;
local l_NarrowTileAdditionalOffset_0 = v20.GridTiles.NarrowTileAdditionalOffset;
local v37 = v11.named("TilePlaceHolder");
local l_Square_0 = l_AspectRatioModeEnum_0.Square;
v31.defaultProps = {
    friendFooterEnabled = false,
    useGridTiles = false,
    getItemMetrics = l_GridMetrics_0.getSmallMetrics,
    horizontalAlignment = Enum.HorizontalAlignment.Center,
    searchResultGrid = false,
    gameEmphasis = false,
    source = nil,
    showFriendActivity = false
};
if l_FFlagLuaAppRefactorOpenGameDetail_0 then
    v31.init = function(v39)
        v39.navigateToGameDetails = function(v40, v41)
            v39.props.openGameDetails(v40, v41, v39.props.navigation);
        end;
    end;
end;
v31.renderItem = function(v42, v43, v44, v45, v46)
    local l_reportGameDetailOpened_0 = v42.props.reportGameDetailOpened;
    local l_reportExperienceLaunched_0 = v42.props.reportExperienceLaunched;
    local l_source_0 = v42.props.source;
    local l_hideGameStats_0 = v42.props.hideGameStats;
    if not (type(v43) == "table") or not v43.featured then
        if type(v43) == "userdata" and v43 == v37 then
            return v6.createElement("Frame", {
                LayoutOrder = v45,
                Size = UDim2.new(0, v44.X, 0, v44.Y),
                BackgroundTransparency = 1
            });
        else
            return v6.createElement(l_AppGameTile_0, {
                layoutOrder = v45,
                entry = v43,
                size = if l_FFlagLuaAppGameTileProps_0 then nil else v44,
                Size = if not l_FFlagLuaAppGameTileProps_0 then nil else UDim2.new(0, v44.X, 0, v44.Y),
                index = v43.realGameEntryIndex or v45,
                source = l_source_0,
                reportGameDetailOpened = l_reportGameDetailOpened_0,
                reportExperienceLaunched = l_reportExperienceLaunched_0,
                hideGameStats = l_hideGameStats_0,
                referralSource = v42.props.referralSource,
                rowNum = v46,
                showFriendActivity = v42.props.showFriendActivity,
                impressionsTag = v42.props.impressionsTag,
                friendFooterEnabled = if not v42.props.useGridTiles then nil else v42.props.friendFooterEnabled,
                useGridTile = v42.props.useGridTiles,
                launchExperienceEventContext = v42.props.launchExperienceEventContext,
                playerCountStyle = v42.props.playerCountStyle,
                isSponsoredFooterAllowed = v42.props.isSponsoredFooterAllowed,
                topicId = v42.props.topicId,
                gameTileLayoutType = if not l_getFFlagLuaAppSingleHoveredGridTile_0() then nil else v42.props.gameTileLayoutType,
                navigateToGameDetails = if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else v42.navigateToGameDetails,
                playButtonStyle = if not l_FFlagLuaAppPlayButtonStyle_0 then nil else v42.props.playButtonStyle
            });
        end;
    else
        return v6.createElement(v22, {
            layoutOrder = v45,
            entry = v43,
            size = v44,
            index = v43.realGameEntryIndex or v45,
            source = l_source_0,
            reportGameDetailOpened = l_reportGameDetailOpened_0,
            reportExperienceLaunched = l_reportExperienceLaunched_0,
            impressionsTag = v42.props.impressionsTag,
            launchExperienceEventContext = v42.props.launchExperienceEventContext
        });
    end;
end;
v31.render = function(v51)
    local l_entries_0 = v51.props.entries;
    local l_LayoutOrder_0 = v51.props.LayoutOrder;
    local l_numberOfRowsToShow_0 = v51.props.numberOfRowsToShow;
    local l_windowSize_0 = v51.props.windowSize;
    local l_screenSize_0 = v51.props.screenSize;
    local l_horizontalAlignment_0 = v51.props.horizontalAlignment;
    local l_searchResultGrid_0 = v51.props.searchResultGrid;
    local v59 = nil;
    local v60 = not not l_searchResultGrid_0 and l_GridMetrics_0.getMediumMetrics or v51.props.getItemMetrics;
    local v61 = nil;
    local v62 = nil;
    local v63 = nil;
    if not v51.props.useGridTiles then
        local l_l_GAME_GRID_TILE_FOOTER_HEIGHT_0_0 = l_GAME_GRID_TILE_FOOTER_HEIGHT_0;
        v63 = Vector2.new(l_GAME_GRID_CHILD_PADDING_0, l_GAME_GRID_CHILD_PADDING_0 * 2);
        if l_GetFFlagTenFootUiSeeAll_0() and v51.props.uiModeInfo.uiMode == l_UiMode_0.TenFoot then
            v63 = Vector2.new(v51.props.cellSpacingHorizontal, v51.props.cellSpacingVertical);
            v61 = if not v27 then l_GridMetrics_0.getMetricsForFixedColumns(l_windowSize_0.X, l_GAME_GRID_CHILD_PADDING_0, 8).itemWidth else l_GridMetrics_0.getMetricsForFixedColumns(l_windowSize_0.X, v63.X, 8).itemWidth;
        else
            v61 = v60(l_windowSize_0.X, l_GAME_GRID_CHILD_PADDING_0).itemWidth;
        end;
        if v25() then
            l_l_GAME_GRID_TILE_FOOTER_HEIGHT_0_0 = l_getExperienceTileRelativeHeight_0(v51.props.style, l_Square_0, 2).Offset;
        end;
        v62 = math.floor(v61 + l_l_GAME_GRID_TILE_FOOTER_HEIGHT_0_0);
    else
        local v65 = nil;
        local v66 = nil;
        if not v26() then
            v61 = l_GridMetrics_0.getMetricsForFixedColumns(l_windowSize_0.X, l_NarrowTileMargin_0, l_NarrowColumnCount_0).itemWidth;
        elseif not v27 then
            v61 = l_GridMetrics_0.getMetricsForFixedColumns(l_windowSize_0.X, l_NarrowTileMargin_0, if v51.props.formFactor == l_FormFactor_0.WIDE then v20.GridTiles.WideColumnCount else v20.GridTiles.NarrowColumnCount).itemWidth;
        else
            local v67 = nil;
            if v51.props.uiModeInfo.uiMode == l_UiMode_0.TenFoot then
                v67 = 5;
                v65 = v51.props.designTokens.Global.Space_300;
                v66 = 51;
            elseif v51.props.formFactor == l_FormFactor_0.WIDE then
                v67 = v20.GridTiles.WideColumnCount;
                v65 = l_NarrowTileMargin_0;
                v66 = l_NarrowTileMargin_0 * 2 + l_NarrowTileAdditionalOffset_0;
            else
                v67 = v20.GridTiles.NarrowColumnCount;
                v65 = l_NarrowTileMargin_0;
                v66 = l_NarrowTileMargin_0 * 2 + l_NarrowTileAdditionalOffset_0;
            end;
            v61 = l_GridMetrics_0.getMetricsForFixedColumns(l_windowSize_0.X, v65, v67).itemWidth;
        end;
        v62 = l_WideGameTileViewConfig_0.getTileHeight(v51.props.designTokens, v61);
        v63 = if not v27 then Vector2.new(l_NarrowTileMargin_0, l_NarrowTileMargin_0 * 2 + l_NarrowTileAdditionalOffset_0) else Vector2.new(v65, v66);
    end;
    local v68 = Vector2.new(v61, v62);
    if not (not (l_searchResultGrid_0 and #l_entries_0 > 0) or not v51.props.gameEmphasis) then
        v59 = {};
        table.insert(v59, v37);
        table.insert(v59, v37);
        local v69 = math.floor((l_windowSize_0.X + v63.X) / (v68.X + v63.X)) - 2;
        local v70 = 2;
        while v70 < 2 + v69 do
            if v70 <= #l_entries_0 then
                table.insert(v59, v7.Dictionary.join(l_entries_0[v70], {
                    realGameEntryIndex = v70
                }));
            else
                table.insert(v59, v37);
            end;
            v70 = v70 + 1;
        end;
        table.insert(v59, v7.Dictionary.join(l_entries_0[1], {
            featured = true,
            realGameEntryIndex = 1
        }));
        table.insert(v59, v37);
        for v71 = v70, #l_entries_0 do
            table.insert(v59, v7.Dictionary.join(l_entries_0[v71], {
                realGameEntryIndex = v71
            }));
        end;
    end;
    return v6.createElement(v21, {
        layoutOrder = l_LayoutOrder_0,
        items = v59 or l_entries_0,
        renderItem = function(...)
            return v51:renderItem(...);
        end,
        windowAbsoluteSize = l_windowSize_0,
        screenSize = l_screenSize_0,
        itemAbsoluteSize = v68,
        cellPaddingOffset = v63,
        numberOfRowsToShow = l_numberOfRowsToShow_0,
        horizontalAlignment = l_horizontalAlignment_0,
        onItemsPerRowChanged = v51.props.onItemsPerRowChanged
    });
end;
if v26() then
    v31 = v12.connect(function(v72, _)
        return {
            formFactor = v72.FormFactor
        };
    end, if not l_FFlagLuaAppRefactorOpenGameDetail_0 then nil else function(v74)
        return {
            openGameDetails = function(v75, v76, v77)
                v74(l_OpenGameDetails_0(v75, v77, v76));
            end
        };
    end)(v31);
end;
if l_FFlagLuaAppRefactorOpenGameDetail_0 then
    v31 = l_withNavigation_0(v31);
end;
local l_v31_0 = v31;
local l_l_v31_0_0 = l_v31_0 --[[ copy: 39 -> 40 ]];
v31 = function(v80)
    local v81 = l_useDesignTokens_0();
    return v6.createElement(l_l_v31_0_0, (v7.Dictionary.join(v80, {
        uiModeInfo = l_useUiModeInfo_0(),
        cellSpacingHorizontal = v81.Global.Space_300,
        cellSpacingVertical = v81.Global.Space_400,
        designTokens = v81
    })));
end;
if v25() then
    l_v31_0 = v31;
    v31 = function(v82)
        return v6.createElement(l_v31_0, (v7.Dictionary.join(v82, {
            style = l_useStyle_0()
        })));
    end;
end;
return v31;


local l_CorePackages_0 = game:GetService("CorePackages");
local v1 = require(l_CorePackages_0.Packages.React);
local l_Modules_0 = game:GetService("CoreGui").RobloxGui.Modules;
local v3 = require(l_Modules_0.LuaApp.Components.Games.GameGrid);
local v4 = require(l_Modules_0.LuaApp.Components.Games.GameGridTable);
local v5 = require(l_Modules_0.LuaApp.Hooks.useAppPolicy);
local v6 = require(l_Modules_0.LuaApp.Experiment.useUserExperiment);
local v7 = require(l_Modules_0.LuaApp.Experiment.AppUserLayers);
local _ = require(l_CorePackages_0.Workspace.Packages.GameTile);
local v9 = require(l_Modules_0.LuaApp.Flags.FFlagLuaAppEnableGameGridTable);
local v10 = {
    v7.GridUILayer
};
local function v12(v11)
    return (v11[v7.GridUILayer] or {}).IsGameGridDesktopRefreshEnabled or false;
end;
return function(v13)
    local v14 = v13.currentSidePadding or 0;
    local v16 = v5(function(v15)
        return v15.useGridPageLayout();
    end);
    local v17 = not not v9 or v6(v10, v12);
    if not v16 or not v17 then
        return v1.createElement(v3, v13);
    else
        return v1.createElement("Frame", {
            Position = UDim2.fromOffset(-v14, 0),
            Size = UDim2.new(1, v14 * 2, 0, 0),
            AutomaticSize = Enum.AutomaticSize.Y,
            LayoutOrder = v13.LayoutOrder,
            BackgroundTransparency = 1
        }, {
            Layout = v1.createElement("UIListLayout", {
                HorizontalAlignment = Enum.HorizontalAlignment.Center
            }),
            GridTable = v1.createElement(v4, v13)
        });
    end;
end;