local l_UserInputService_0 = game:GetService("UserInputService");
local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_Parent_2 = l_Parent_1.Parent;
local v4 = require(l_Parent_2.Roact);
local v5 = require(l_Parent_2.Cryo);
local v6 = require(l_Parent_2.t);
local v7 = require(l_Parent_2.RoactGamepad);
local v8 = require(l_Parent_0.ImageSet.ImageSetComponent);
local v9 = require(l_Parent_1.App.SelectionCursor.useCursorByType);
local v10 = require(l_Parent_1.App.SelectionCursor.CursorType);
local v11 = require(l_Parent_1.Utility.lerp);
local v12 = require(l_Parent_1.App.SelectionImage.CursorKind);
local v13 = require(l_Parent_1.App.SelectionImage.withSelectionCursorProvider);
local v14 = require(l_Parent_2.UIBlox.UIBloxConfig);
local v15 = v4.PureComponent:extend("GenericSlider");
v15.validateProps = v6.strictInterface({
    lowerValue = v6.number,
    upperValue = v6.optional(v6.number),
    min = v6.number,
    max = v6.number,
    stepInterval = v6.numberPositive,
    isDisabled = v6.optional(v6.boolean),
    onValueChanged = v6.callback,
    onDragStartLower = v6.optional(v6.callback),
    onDragStartUpper = v6.optional(v6.callback),
    onDragEnd = v6.optional(v6.callback),
    trackImage = v6.union(v6.string, v6.table),
    trackColor = v6.union(v6.Color3, v6.table),
    trackTransparency = v6.union(v6.number, v6.table),
    trackSliceCenter = v6.optional(v6.Rect),
    trackFillImage = v6.union(v6.string, v6.table),
    trackFillColor = v6.union(v6.Color3, v6.table),
    trackFillTransparency = v6.union(v6.number, v6.table),
    trackFillSliceCenter = v6.optional(v6.Rect),
    knobImage = v6.union(v6.string, v6.table),
    knobColorLower = v6.union(v6.Color3, v6.table),
    knobColorUpper = v6.optional(v6.union(v6.Color3, v6.table)),
    knobTransparency = v6.union(v6.number, v6.table),
    knobImagePadding = v6.optional(v6.numberMin(0)),
    knobShadowImage = v6.union(v6.string, v6.table),
    knobShadowTransparencyLower = v6.union(v6.number, v6.table),
    knobShadowTransparencyUpper = v6.optional(v6.union(v6.number, v6.table)),
    width = v6.optional(v6.UDim),
    position = v6.optional(v6.UDim2),
    anchorPoint = v6.optional(v6.Vector2),
    layoutOrder = v6.optional(v6.integer),
    imageButtonRef = v6.optional(v6.table),
    NextSelectionUp = v6.optional(v6.table),
    NextSelectionDown = v6.optional(v6.table),
    focusController = v6.optional(v6.table),
    customTrack = v6.optional(v6.table),
    customKnobHeight = v6.optional(v6.number),
    customKnobBorderColor = v6.optional(v6.Color3),
    customKnobBorderSize = v6.optional(v6.number),
    selectedCursor = if not v14.migrateToNewSelectionCursor then nil else v6.optional(v6.any),
    unselectedCursor = if not v14.migrateToNewSelectionCursor then nil else v6.optional(v6.any)
});
v15.defaultProps = {
    width = UDim.new(1, 0),
    knobImagePadding = 0,
    customKnobBorderColor = Color3.new(0, 0, 0)
};
v15.init = function(v16)
    v16.rootRef = v16.props.imageButtonRef or v4.createRef();
    v16.lowerKnobRef = v4.createRef();
    v16.upperKnobRef = v4.createRef();
    v16.moveDirection = 0;
    v16.lowerKnobDrag = false;
    v16.upperKnobDrag = false;
    v16.totalMoveTime = 0;
    v16.isFirstMove = true;
    v16.unhandledTime = 0;
    v16.state = {
        lowerKnobIsSelected = false,
        upperKnobIsSelected = false
    };
end;
v15.getKnobVisibleHeight = function(v17)
    if not v17.props.customKnobHeight then
        return 44 - v17.props.knobImagePadding * 2;
    else
        return ((44 - v17.props.knobImagePadding * 2) / 44) * v17.props.customKnobHeight;
    end;
end;
v15.getKnobHeight = function(v18)
    if not v18.props.customKnobHeight then
        return 44;
    else
        return (44 / (44 - v18.props.knobImagePadding * 2)) * v18.props.customKnobHeight;
    end;
end;
v15.onMoveStep = function(v19, v20, v21)
    if v19.state.lowerKnobIsSelected or v19.state.upperKnobIsSelected then
        local l_Position_0 = v20[Enum.KeyCode.Thumbstick1].Position;
        local v23 = l_Position_0.Magnitude > 0.2;
        local v24 = 0;
        local v25 = nil;
        local v26 = nil;
        local v27 = nil;
        v19.totalMoveTime = v19.totalMoveTime + v21;
        if not v23 then
            v26 = (v20[Enum.KeyCode.DPadLeft].UserInputState == Enum.UserInputState.Begin and -1 or 0) + (v20[Enum.KeyCode.DPadRight].UserInputState == Enum.UserInputState.Begin and 1 or 0);
            v25 = 0.5;
            v27 = 8;
        else
            v26 = l_Position_0.x > 0 and 1 or -1;
            v25 = 0.2;
            v27 = 12;
        end;
        if v26 ~= 0 then
            if not v19.isFirstMove then
                if v25 < v19.totalMoveTime then
                    local v28 = (v21 - math.max((v25 - v19.totalMoveTime) - v21, 0)) + v19.unhandledTime;
                    v24 = math.floor(v27 * v28);
                    v19.unhandledTime = v28 - v24 / v27;
                else
                    v24 = 0;
                    v19.unhandledTime = 0;
                end;
            else
                v19.isFirstMove = false;
                v19.totalMoveTime = 0;
                v19.unhandledTime = 0;
                v24 = 1;
            end;
        else
            v19.totalMoveTime = 0;
            v19.isFirstMove = true;
        end;
        if v24 > 0 then
            v19:processGamepadInput(v26, v24);
        end;
        return ;
    else
        return ;
    end;
end;
v15.processGamepadInput = function(v29, v30, v31)
    if not v29:hasTwoKnobs() then
        v29:processOneKnobGamepadInput(v30, v31);
        return ;
    else
        v29:processTwoKnobGamepadInput(v30, v31);
        return ;
    end;
end;
v15.processTwoKnobGamepadInput = function(v32, v33, v34)
    local v35 = v32.props.stepInterval * v33;
    local l_lowerValue_0 = v32.props.lowerValue;
    local l_upperValue_0 = v32.props.upperValue;
    if not (l_lowerValue_0 == l_upperValue_0) or v32.state.processingGamepad then
        if not v32.state.processingGamepad then
            v32:setState({
                processingGamepad = true
            });
        end;
    elseif (v32.state.lowerKnobIsSelected and v33 == 1) and l_lowerValue_0 ~= v32.props.max then
        v32:setState({
            lowerKnobIsSelected = false,
            upperKnobIsSelected = true,
            processingGamepad = true
        });
        v32.props.focusController.moveFocusTo(v32.upperKnobRef);
    elseif (v32.state.upperKnobIsSelected and v33 == -1) and l_upperValue_0 ~= v32.props.min then
        v32:setState({
            lowerKnobIsSelected = true,
            upperKnobIsSelected = false,
            processingGamepad = true
        });
        v32.props.focusController.moveFocusTo(v32.lowerKnobRef);
    end;
    if not v32.state.lowerKnobIsSelected then
        if v32.state.upperKnobIsSelected then
            local v38 = math.max(math.min(l_upperValue_0 + v35 * v34, v32.props.max), v32.props.min);
            l_upperValue_0 = if l_lowerValue_0 <= v38 then v38 else l_lowerValue_0;
        end;
    else
        local v39 = math.max(math.min(l_lowerValue_0 + v35 * v34, v32.props.max), v32.props.min);
        l_lowerValue_0 = if v39 <= l_upperValue_0 then v39 else l_upperValue_0;
    end;
    if not (l_upperValue_0 == v32.props.upperValue) or l_lowerValue_0 ~= v32.props.lowerValue then
        v32.props.onValueChanged(l_lowerValue_0, l_upperValue_0);
    end;
end;
v15.processOneKnobGamepadInput = function(v40, v41, v42)
    local v43 = v40.props.stepInterval * v41;
    local l_lowerValue_1 = v40.props.lowerValue;
    if v40.state.lowerKnobIsSelected then
        l_lowerValue_1 = math.max(math.min(l_lowerValue_1 + v43 * v42, v40.props.max), v40.props.min);
    end;
    if l_lowerValue_1 ~= v40.props.lowerValue then
        v40.props.onValueChanged(l_lowerValue_1);
    end;
end;
v15.renderTrack = function(v45, v46, v47, v48)
    if not v45.props.customTrack then
        return v4.createElement(v8.Label, {
            AnchorPoint = Vector2.new(0.5, 0.5),
            BackgroundTransparency = 1,
            ImageColor3 = v45.props.trackColor,
            ImageTransparency = v45.props.trackTransparency,
            Image = v45.props.trackImage,
            Size = UDim2.new(1, 0, 0, 4),
            Position = UDim2.fromScale(0.5, 0.5),
            ScaleType = Enum.ScaleType.Slice,
            SliceCenter = v45.props.trackSliceCenter
        }, {
            TrackFill = v4.createElement(v8.Label, {
                BackgroundTransparency = 1,
                ImageColor3 = v45.props.trackFillColor,
                ImageTransparency = v45.props.trackFillTransparency,
                Image = v45.props.trackFillImage,
                Size = v46,
                Position = not not v47 and UDim2.new(v48, 0, 0, 0) or UDim2.new(0, 0, 0, 0),
                ScaleType = Enum.ScaleType.Slice,
                SliceCenter = v45.props.trackFillSliceCenter
            })
        });
    else
        return v45.props.customTrack;
    end;
end;
v15.wrapKnobWithBorder = function(v49, v50, v51)
    local v52 = if not v49.props.customKnobHeight then v49:getKnobVisibleHeight() else v49.props.customKnobHeight;
    return v4.createElement("Frame", {
        AnchorPoint = Vector2.new(0.5, 0.5),
        Size = UDim2.fromOffset(v52, v52),
        Position = v51,
        BackgroundColor3 = v49.props.customKnobBorderColor,
        ZIndex = 3
    }, {
        UICorner = v4.createElement("UICorner", {
            CornerRadius = UDim.new(0.5, 0)
        }),
        KnobContent = v50
    });
end;
v15.renderUpperKnob = function(v53, v54, v55, v56, v57)
    if v56 then
        local v58 = v53:getKnobHeight();
        local l_v54_0 = v54;
        if v53.props.customKnobBorderSize and v53.props.customKnobBorderSize > 0 then
            v58 = v58 - 2 * (v53.props.customKnobBorderSize + 2);
            l_v54_0 = UDim2.fromScale(0.5, 0.5);
        end;
        local v65 = v4.createElement(v7.Focusable[v8.Button], {
            AnchorPoint = Vector2.new(0.5, 0.5),
            BackgroundTransparency = 1,
            ImageColor3 = v53.props.knobColorUpper,
            ImageTransparency = v53.props.knobTransparency,
            Image = v53.props.knobImage,
            Size = UDim2.fromOffset(v58, v58),
            Position = l_v54_0,
            ZIndex = 3,
            NextSelectionLeft = (not v55 and v53.props.upperValue ~= v53.props.lowerValue) and v53.lowerKnobRef or nil,
            NextSelectionRight = not not v55 and v53.upperKnobRef or nil,
            NextSelectionUp = not not v55 and v53.upperKnobRef or nil,
            NextSelectionDown = not not v55 and v53.upperKnobRef or nil,
            SelectionImageObject = not not v55 and if not v14.migrateToNewSelectionCursor then v57(v12.SelectedKnob) else v53.props.selectedCursor or if v14.migrateToNewSelectionCursor then v53.props.unselectedCursor else v57(v12.UnselectedKnob),
            [v4.Ref] = v53.upperKnobRef,
            [v4.Event.InputBegan] = function(_, v61)
                if not v53.props.isDisabled then
                    v53:onInputBegan(v61, true);
                    return ;
                else
                    return ;
                end;
            end,
            inputBindings = {
                OnMoveStep = v7.Input.onMoveStep(function(v62, v63)
                    v53:onMoveStep(v62, v63);
                end),
                SelectUpperKnob = v7.Input.onBegin(Enum.KeyCode.ButtonA, function()
                    v53:setState(function(v64)
                        return {
                            upperKnobIsSelected = not v64.upperKnobIsSelected,
                            processingGamepad = false
                        };
                    end);
                end),
                UnselectUpperKnob = not not v55 and v7.Input.onBegin(Enum.KeyCode.ButtonB, function()
                    v53:setState({
                        upperKnobIsSelected = false,
                        processingGamepad = false
                    });
                end) or nil
            }
        });
        if v53.props.customKnobBorderSize and v53.props.customKnobBorderSize > 0 then
            return v53:wrapKnobWithBorder(v65, v54);
        else
            return v65;
        end;
    else
        return nil;
    end;
end;
v15.renderLowerKnob = function(v66, v67, v68, v69, v70)
    local v71 = v66:getKnobHeight();
    local l_v67_0 = v67;
    if v66.props.customKnobBorderSize and v66.props.customKnobBorderSize > 0 then
        v71 = v71 - 2 * (v66.props.customKnobBorderSize + 2);
        l_v67_0 = UDim2.fromScale(0.5, 0.5);
    end;
    local v78 = v4.createElement(v7.Focusable[v8.Button], {
        AnchorPoint = Vector2.new(0.5, 0.5),
        BackgroundTransparency = 1,
        ImageColor3 = v66.props.knobColorLower,
        ImageTransparency = v66.props.knobTransparency,
        Image = v66.props.knobImage,
        Size = UDim2.fromOffset(v71, v71),
        Position = l_v67_0,
        ZIndex = 3,
        inputBindings = {
            OnMoveStep = v7.Input.onMoveStep(function(v73, v74)
                v66:onMoveStep(v73, v74);
            end),
            SelectLowerKnob = v7.Input.onBegin(Enum.KeyCode.ButtonA, function()
                v66:setState(function(v75)
                    return {
                        lowerKnobIsSelected = not v75.lowerKnobIsSelected,
                        processingGamepad = false
                    };
                end);
            end),
            UnselectLowerKnob = not not v68 and v7.Input.onBegin(Enum.KeyCode.ButtonB, function()
                v66:setState({
                    lowerKnobIsSelected = false,
                    processingGamepad = false
                });
            end) or nil
        },
        NextSelectionLeft = not not v68 and v66.lowerKnobRef or nil,
        NextSelectionRight = (not (not v69 or v68) and v66.props.upperValue ~= v66.props.lowerValue) and v66.upperKnobRef or nil,
        NextSelectionUp = not not v68 and v66.lowerKnobRef or nil,
        NextSelectionDown = not not v68 and v66.lowerKnobRef or nil,
        SelectionImageObject = not not v68 and if not v14.migrateToNewSelectionCursor then v70(v12.SelectedKnob) else v66.props.selectedCursor or if v14.migrateToNewSelectionCursor then v66.props.unselectedCursor else v70(v12.UnselectedKnob),
        [v4.Ref] = v66.lowerKnobRef,
        [v4.Event.InputBegan] = function(_, v77)
            if not v66.props.isDisabled then
                v66:onInputBegan(v77, true);
                return ;
            else
                return ;
            end;
        end
    });
    if v66.props.customKnobBorderSize and v66.props.customKnobBorderSize > 0 then
        return v66:wrapKnobWithBorder(v78, v67);
    else
        return v78;
    end;
end;
v15.renderKnobShadow = function(v79, v80, v81)
    return v4.createElement(v8.Label, {
        AnchorPoint = Vector2.new(0.5, 0.5),
        BackgroundTransparency = 1,
        ImageTransparency = v80,
        Image = v79.props.knobShadowImage,
        Size = UDim2.fromOffset(v79:getKnobHeight(), v79:getKnobHeight()),
        Position = v81,
        ZIndex = 2
    });
end;
v15.render = function(v82)
    local v83 = v82.state.lowerKnobIsSelected or v82.state.upperKnobIsSelected;
    local v84 = v82:hasTwoKnobs();
    local v85 = (v82.props.lowerValue - v82.props.min) / (v82.props.max - v82.props.min);
    local v86 = not not v84 and (v82.props.upperValue - v82.props.min) / (v82.props.max - v82.props.min) or nil;
    local v87 = v82:getKnobVisibleHeight();
    local v88 = v11(v87 / 2, -v87 / 2, v85);
    local v89 = not not v84 and v11(v87 / 2, -v87 / 2, v86) or nil;
    local v90 = UDim2.new(v85, v88, 0.5, 0);
    local v91 = not not v84 and UDim2.new(v86, v89, 0.5, 0) or nil;
    local v92 = not not v84 and UDim2.fromScale(v86 - v85, 1) or UDim2.fromScale(v85, 1);
    local v93 = v82.state.lowerKnobIsSelected or v82.state.upperKnobIsSelected;
    return v13(function(v94)
        return v4.createElement(v7.Focusable[v8.Button], {
            BackgroundTransparency = 1,
            AnchorPoint = v82.props.anchorPoint,
            Size = UDim2.new(v82.props.width.Scale, v82.props.width.Offset, 0, 36),
            LayoutOrder = v82.props.layoutOrder,
            Position = v82.props.position,
            [v4.Event.InputBegan] = function(_, v96)
                if not v82.props.isDisabled then
                    v82:onInputBegan(v96, false);
                    return ;
                else
                    return ;
                end;
            end,
            [v4.Ref] = v82.rootRef,
            NextSelectionLeft = not not v93 and v82.rootRef or nil,
            NextSelectionRight = not not v93 and v82.rootRef or nil,
            NextSelectionUp = not v93 and v82.props.NextSelectionUp or v82.rootRef,
            NextSelectionDown = not v93 and v82.props.NextSelectionDown or v82.rootRef,
            defaultChild = (v82.props.upperValue ~= v82.props.min and v82.lowerKnobRef or v82.upperKnobRef) or nil,
            onFocusLost = function()
                if not (not v82.state.lowerKnobIsSelected and not v82.state.upperKnobIsSelected) then
                    v82:setState({
                        lowerKnobIsSelected = false,
                        upperKnobIsSelected = false
                    });
                end;
            end
        }, {
            Track = v82:renderTrack(v92, v84, v85),
            LowerKnob = v82:renderLowerKnob(v90, v83, v84, v94),
            LowerKnobShadow = v82:renderKnobShadow(v82.props.knobShadowTransparencyLower, v90),
            UpperKnob = v82:renderUpperKnob(v91, v83, v84, v94),
            UpperKnobShadow = not not v84 and v82:renderKnobShadow(v82.props.knobShadowTransparencyUpper, v91) or nil
        });
    end);
end;
v15.didMount = function(v97)
    local l_current_0 = v97.rootRef.current;
    local v99 = nil;
    v99 = l_current_0.AncestryChanged:Connect(function()
        if l_current_0:IsDescendantOf(game) then
            v99:Disconnect();
            v97.canUseUserInputService = l_current_0:FindFirstAncestorWhichIsA("PluginGui") == nil;
            return ;
        else
            return ;
        end;
    end);
    if l_current_0:IsDescendantOf(game) then
        v99:Disconnect();
        v97.canUseUserInputService = l_current_0:FindFirstAncestorWhichIsA("PluginGui") == nil;
    end;
end;
v15.didUpdate = function(v100, _, v102)
    if v100.props.disabled then
        v100:stopListeningForDrag();
    end;
    if v14.sliderGamepadDragStartAndEnd then
        local v103 = v102.lowerKnobIsSelected and not v100.state.lowerKnobIsSelected;
        local v104 = v102.upperKnobIsSelected and not v100.state.upperKnobIsSelected;
        if not (v100.props.onDragEnd ~= nil) or not v103 and not v104 then
            if (not (v100.props.onDragStartLower ~= nil) or v102.lowerKnobIsSelected) or not v100.state.lowerKnobIsSelected then
                if not ((not (v100.props.onDragStartUpper ~= nil) or v102.upperKnobIsSelected) or not v100.state.upperKnobIsSelected) then
                    v100.props.onDragStartUpper();
                end;
            else
                v100.props.onDragStartLower();
                return ;
            end;
        else
            v100.props.onDragEnd();
            return ;
        end;
    end;
end;
v15.willUnmount = function(v105)
    v105:stopListeningForDrag();
end;
v15.onInputBegan = function(v106, v107, v108)
    if not v106.props.disabled then
        if v107.UserInputState ~= Enum.UserInputState.Begin then
            return ;
        else
            local l_UserInputType_0 = v107.UserInputType;
            if l_UserInputType_0 ~= Enum.UserInputType.MouseButton1 and l_UserInputType_0 ~= Enum.UserInputType.Touch then
                return ;
            elseif not (l_UserInputType_0 == Enum.UserInputType.Touch) or v108 then
                v106:processDrag(v107.Position.X);
                v106:startListeningForDrag();
                return ;
            else
                return ;
            end;
        end;
    else
        return ;
    end;
end;
v15.startListeningForDrag = function(v110)
    local l_current_1 = v110.rootRef.current;
    if l_current_1 == nil then
        return ;
    elseif not v110.dragging then
        if not v110.canUseUserInputService then
            local l_l_current_1_FirstAncestorWhichIsA_0 = l_current_1:FindFirstAncestorWhichIsA("PluginGui");
            local l_ImageButton_0 = Instance.new("ImageButton");
            l_ImageButton_0.BackgroundTransparency = 1;
            l_ImageButton_0.Image = "";
            l_ImageButton_0.Name = "SliderPluginGuiInputCapturer";
            l_ImageButton_0.Size = UDim2.new(1, 0, 1, 0);
            l_ImageButton_0.ZIndex = 100000;
            v110.moveConnection = l_ImageButton_0.MouseMoved:Connect(function(v114)
                v110:processDrag(v114);
            end);
            v110.releaseConnection = l_ImageButton_0.MouseButton1Up:Connect(function(v115)
                v110:stopListeningForDrag();
                v110:processOneKnobDrag(v115);
            end);
            v110.focusLostConnection = l_ImageButton_0.MouseLeave:Connect(function(v116)
                v110:stopListeningForDrag();
                v110:processOneKnobDrag(v116);
            end);
            l_ImageButton_0.Parent = l_l_current_1_FirstAncestorWhichIsA_0;
            v110.inputCapturerButton = l_ImageButton_0;
        else
            v110.moveConnection = l_UserInputService_0.InputChanged:Connect(function(v117)
                if v110.dragging then
                    local l_UserInputType_1 = v117.UserInputType;
                    if l_UserInputType_1 ~= Enum.UserInputType.MouseMovement and l_UserInputType_1 ~= Enum.UserInputType.Touch then
                        return ;
                    elseif v117.UserInputState ~= Enum.UserInputState.Change then
                        return ;
                    else
                        v110:processDrag(v117.Position.X);
                        return ;
                    end;
                else
                    return ;
                end;
            end);
            v110.releaseConnection = l_UserInputService_0.InputEnded:Connect(function(v119)
                local l_UserInputType_2 = v119.UserInputType;
                if l_UserInputType_2 ~= Enum.UserInputType.MouseButton1 and l_UserInputType_2 ~= Enum.UserInputType.Touch then
                    return ;
                else
                    v110:stopListeningForDrag();
                    v110:processOneKnobDrag(v119.Position.X);
                    return ;
                end;
            end);
            v110.focusLostConnection = l_UserInputService_0.WindowFocusReleased:Connect(function()
                v110:stopListeningForDrag();
            end);
        end;
        v110.dragging = true;
        if v110.lowerKnobDrag and v110.props.onDragStartLower ~= nil then
            v110.props.onDragStartLower();
        end;
        if v110.upperKnobDrag and v110.props.onDragStartUpper ~= nil then
            v110.props.onDragStartUpper();
        end;
        return ;
    else
        return ;
    end;
end;
v15.getSteppedValue = function(v121, v122)
    local l_current_2 = v121.rootRef.current;
    if l_current_2 == nil then
        return 0;
    else
        local l_min_0 = v121.props.min;
        local l_max_0 = v121.props.max;
        local l_stepInterval_0 = v121.props.stepInterval;
        local l_X_0 = l_current_2.AbsoluteSize.X;
        return math.floor(((math.clamp(v122 - l_current_2.AbsolutePosition.X, 0, l_X_0) / l_X_0) * (l_max_0 - l_min_0) + l_min_0) / l_stepInterval_0 + 0.5) * l_stepInterval_0;
    end;
end;
v15.processDrag = function(v128, v129)
    if not v128:hasTwoKnobs() then
        v128:processOneKnobDrag(v129);
        return ;
    else
        v128:processTwoKnobDrag(v129);
        return ;
    end;
end;
v15.processOneKnobDrag = function(v130, v131)
    if not v130:hasTwoKnobs() then
        local v132 = v130:getSteppedValue(v131);
        v130.lowerKnobDrag = true;
        if v132 ~= v130.props.lowerValue then
            v130.props.onValueChanged(v132);
        end;
        return ;
    else
        return ;
    end;
end;
v15.processTwoKnobDrag = function(v133, v134)
    local v135 = v133:getSteppedValue(v134);
    local l_lowerValue_2 = v133.props.lowerValue;
    local l_upperValue_1 = v133.props.upperValue;
    if v133.lowerKnobDrag or v133.upperKnobDrag then
        if not v133.lowerKnobDrag or not v133.upperKnobDrag then
            if not v133.lowerKnobDrag then
                if v133.upperKnobDrag and l_lowerValue_2 <= v135 then
                    l_upperValue_1 = v135;
                end;
            elseif v135 <= l_upperValue_1 then
                l_lowerValue_2 = v135;
            end;
        elseif l_upperValue_1 <= v135 - v133.props.stepInterval then
            v133.upperKnobDrag = true;
            v133.lowerKnobDrag = false;
            l_upperValue_1 = v135;
        elseif v135 + v133.props.stepInterval <= l_lowerValue_2 then
            v133.upperKnobDrag = false;
            v133.lowerKnobDrag = true;
            l_lowerValue_2 = v135;
        end;
    else
        if v135 == l_lowerValue_2 then
            v133.lowerKnobDrag = true;
        end;
        if v135 == l_upperValue_1 then
            v133.upperKnobDrag = true;
        end;
    end;
    if not (l_upperValue_1 == v133.props.upperValue) or l_lowerValue_2 ~= v133.props.lowerValue then
        v133.props.onValueChanged(l_lowerValue_2, l_upperValue_1);
    end;
end;
v15.stopListeningForDrag = function(v138)
    if v138.moveConnection ~= nil then
        v138.moveConnection:Disconnect();
        v138.moveConnection = nil;
    end;
    if v138.releaseConnection ~= nil then
        v138.releaseConnection:Disconnect();
        v138.releaseConnection = nil;
    end;
    if v138.focusLostConnection ~= nil then
        v138.focusLostConnection:Disconnect();
        v138.focusLostConnection = nil;
    end;
    if v138.inputCapturerButton ~= nil then
        v138.inputCapturerButton:Destroy();
        v138.inputCapturerButton = nil;
    end;
    v138.dragging = false;
    v138.lowerKnobDrag = false;
    v138.upperKnobDrag = false;
    if v138.props.onDragEnd ~= nil then
        v138.props.onDragEnd();
    end;
end;
v15.hasTwoKnobs = function(v139)
    return v139.props.upperValue ~= nil;
end;
return v4.forwardRef(function(v140, v141)
    local v142 = v9(v10.SelectedKnob);
    local v143 = v9(v10.UnselectedKnob);
    if v14.migrateToNewSelectionCursor then
        v140 = v5.Dictionary.join({
            selectedCursor = v142,
            unselectedCursor = v143
        }, v140);
    end;
    return v4.createElement(v15, v5.Dictionary.join(v140, {
        imageButtonRef = v141
    }));
end);


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local v1 = require(l_Parent_0.React);
local v2 = require(l_Parent_0.ReactRoblox);
local l_shallowEqual_0 = require(l_Parent_0.Shared).shallowEqual;
local v4 = v1.createContext(nil);
return v1.memo(function(v5)
    local v6 = v5.name or "Unnamed";
    local v7 = v5.detached or false;
    local l_adorneeProps_0 = v5.adorneeProps;
    local l_surfaceGuiProps_0 = v5.surfaceGuiProps;
    local v10 = v1.useRef(nil);
    local v11 = v1.useRef(nil);
    local v12 = v1.useRef(nil);
    local v13 = v1.useContext(v4);
    local v14 = v7 or v13 == nil;
    local v15 = v1.createElement("SurfaceGui", {
        Name = ("%*_SurfaceGui"):format(v6),
        Adornee = v10,
        Active = true,
        Enabled = l_surfaceGuiProps_0.Enabled,
        CanvasSize = l_surfaceGuiProps_0.CanvasSize,
        ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
        AlwaysOnTop = true,
        LightInfluence = 0,
        Shape = l_surfaceGuiProps_0.Shape,
        HorizontalCurvature = l_surfaceGuiProps_0.HorizontalCurvature,
        ZOffset = l_surfaceGuiProps_0.ZOffset
    }, v5.children);
    return v1.createElement(v4.Provider, {
        value = if not v5.detached then v12 else nil
    }, {
        SurfaceGui = if l_surfaceGuiProps_0.Parent ~= nil then v2.createPortal(v15, l_surfaceGuiProps_0.Parent) else v15,
        AdorneePortal = v2.createPortal({
            Adornee = v1.createElement("Part", {
                Name = ("%*_Part"):format(v6),
                ref = v10,
                Transparency = 1,
                Size = l_adorneeProps_0.Size,
                CFrame = if not v14 then nil else l_adorneeProps_0.CFrame,
                CanCollide = false,
                CanTouch = false,
                Anchored = v14
            }, {
                ParentAttachment = if not v14 then v1.createElement(v1.Fragment, nil, {
                    SelfAttachment = v1.createElement("Attachment", {
                        Name = ("%*_SelfAttachment"):format(v6),
                        CFrame = l_adorneeProps_0.CFrame,
                        ref = v11
                    }),
                    ParentConstraint = v1.createElement("RigidConstraint", {
                        Name = ("%*_ParentConstraint"):format(v6),
                        Enabled = true,
                        Attachment0 = v13,
                        Attachment1 = v11
                    })
                }) else nil,
                ChildrenAttachment = v1.createElement("Attachment", {
                    Name = ("%*_ChildrenAttachment"):format(v6),
                    CFrame = CFrame.identity,
                    ref = v12
                })
            })
        }, l_adorneeProps_0.Parent or workspace)
    });
end, function(v16, v17)
    local v18 = false;
    if v16.name == v17.name then
        v18 = false;
        if v16.detached == v17.detached then
            v18 = (l_shallowEqual_0(v16.adorneeProps, v17.adorneeProps) and l_shallowEqual_0(v16.surfaceGuiProps, v17.surfaceGuiProps)) and v16.children == v17.children;
        end;
    end;
    return v18;
end);


local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent.Parent;
local l_Style_0 = l_Parent_1.App.Style;
local v3 = require(l_Parent_1.Parent.Roact);
local v4 = require(l_Parent_1.Parent.t);
local v5 = require(l_Style_0.Validator.validateStyle);
local v6 = require(l_Parent_0.StyleContext);
local _ = require(l_Style_0.StyleTypes);
local v8 = require(l_Style_0.Themes);
local v9 = require(l_Style_0.Constants);
local v10 = require(l_Style_0.Fonts.Gotham);
local l_getTokens_0 = require(l_Style_0.Tokens).getTokens;
local l_Object_0 = require(l_Parent_1.Parent.LuauPolyfill).Object;
local v13 = v3.Component:extend("StyleProvider");
v13.validateProps = v4.strictInterface({
    style = v4.optional(v5),
    [v3.Children] = v4.table
});
local v14 = {
    Theme = v8.DarkTheme,
    Font = v10,
    Settings = {
        PreferredTransparency = 1,
        ReducedMotion = false
    }
};
v13.init = function(v15)
    v15:setState({
        style = v15.props.style
    });
end;
v13.render = function(v16)
    local v17 = l_Object_0.assign({}, v14, v16.state.style);
    if v17.Tokens == nil then
        v17.Tokens = l_getTokens_0(v9.DefaultDeviceType, if v17.Theme == v8.LightTheme then v9.ThemeName.Light else v9.ThemeName.Dark);
    end;
    return v3.createElement(v6.Provider, {
        value = {
            style = v17,
            update = function(_, v19)
                if v16.mounted then
                    v16:setState({
                        style = v19
                    });
                end;
            end
        }
    }, v3.oneChild(v16.props[v3.Children]));
end;
v13.didMount = function(v20)
    v20.mounted = true;
end;
v13.willUnmount = function(v21)
    v21.mounted = false;
end;
return v13;


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color = v0.Color3,
    Transparency = v0.numberConstrained(0, 1)
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color3 = v0.Color3,
    Transparency = v0.numberConstrained(0, 1)
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    RelativeSize = v0.numberMinExclusive(0),
    RelativeMinSize = v0.numberMinExclusive(0),
    Font = v0.EnumItem
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color = v0.ColorSequence,
    Transparency = v0.NumberSequence,
    Rotation = v0.number,
    Offset = v0.optional(v0.Vector2)
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color = v0.Color3,
    AnimatedColor = v0.Color3,
    Transparency = v0.numberConstrained(0, 1),
    GradientRotationSpeed = v0.number,
    GradientColorSequence = v0.ColorSequence,
    GradientTransparencySequence = v0.NumberSequence
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color = v0.Color3,
    AnimatedColor = v0.Color3,
    Transparency = v0.numberConstrained(0, 1),
    GradientRotationSpeed = v0.number,
    GradientColorSequence = v0.ColorSequence,
    GradientTransparencySequence = v0.NumberSequence,
    Rotation = v0.number
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Color = v0.Color3,
    Transparency = v0.numberConstrained(0, 1),
    Image = v0.string
});


local v0 = require(script.Parent.Parent.Parent.Parent.Parent.t);
return v0.strictInterface({
    Font = v0.EnumItem,
    FontSize = v0.numberMinExclusive(0),
    LineHeight = v0.numberMinExclusive(0),
    LetterSpacing = v0.number
});


local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent.Parent.Parent;
local v2 = require(l_Parent_0.StyleContext);
local v3 = require(l_Parent_1.React);
return function()
    return v3.useContext(v2).style;
end;


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.Parent.Parent.Parent.Roact);
local v2 = require(l_Parent_0.StyleConsumer);
return function(v3)
    assert(type(v3) == "function", "Expect renderCallback to be a function.");
    return v1.createElement(v2, {
        render = function(v4)
            return v3(v4.style);
        end
    });
end;


return function(v0)
    local v1 = "";
    local v2 = 0;
    for v3 = 1, #v0 do
        local v4 = string.sub(v0, v3, v3);
        if v4 == "<" then
            v2 = v2 + 1;
        elseif v4 == ">" and v2 > 0 then
            v2 = v2 - 1;
        elseif v2 == 0 then
            v1 = v1 .. v4;
        end;
    end;
    if v2 ~= 0 then
        return v0;
    else
        return v1;
    end;
end;


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_1.React);
local v3 = require(l_Parent_1.Cryo);
local _ = require(l_Parent_0.App.Style.StyleTypes);
local _ = require(l_Parent_0.Core.Style.Validator.validateFontInfo);
local _ = require(l_Parent_0.Core.Style.Validator.validateColorInfo);
local v7 = require(l_Parent_0.Core.Style.useStyle);
local v8 = require(l_Parent_0.Core.Text.GetTextSize);
local l_Emoji_0 = l_Parent_0.Core.Emoji;
local v10 = require(l_Emoji_0.Emoji);
local v11 = require(l_Emoji_0.Enum.Emoji);
local v12 = require(l_Parent_0.Core.Text.GenericTextLabel.GenericTextLabel);
local v13 = {
    maxSize = Vector2.new(10000, 10000),
    fluidSizing = false
};
return function(v14)
    v14 = v3.Dictionary.join(v13, v14);
    local v15 = v7();
    local v16 = v11.isEnumValue(v14.emoji);
    local l_BaseSize_0 = v15.Font.BaseSize;
    local l_fontStyle_0 = v14.fontStyle;
    local l_Font_0 = l_fontStyle_0.Font;
    local v20 = if not l_fontStyle_0.RelativeSize then l_fontStyle_0.FontSize else l_BaseSize_0 * l_fontStyle_0.RelativeSize;
    local l_maxSize_0 = v14.maxSize;
    local v22 = v8(v14.Text, v20, l_Font_0, l_maxSize_0);
    return v2.createElement(v12, v3.Dictionary.join(v14, {
        emoji = v3.None,
        emojiOnActivated = v3.None,
        Size = UDim2.fromOffset(math.min(v22.X, l_maxSize_0.X - v20), v22.Y)
    }), {
        Emoji = v16 and v2.createElement(v10, {
            emoji = v14.emoji,
            onActivated = v14.emojiOnActivated,
            textFont = l_Font_0,
            textSize = v20,
            Position = UDim2.fromScale(1, 0)
        })
    });
end;


local v0 = require(script.Parent.Parent.GetTextHeight);
return {
    getExpandableTextHeights = function(v1, v2, v3, v4)
        local v5 = v1.BaseSize * v1.Body.RelativeSize;
        return v0(v3, v1.Body.Font, v5, v2), v4 * v5;
    end,
    getCanExpand = function(v6, v7, v8, v9)
        local v10 = v6.BaseSize * v6.Body.RelativeSize;
        return v9 * v10 < v0(v8, v6.Body.Font, v10, v7);
    end
};


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_1.Roact);
local v3 = require(l_Parent_1.Cryo);
local v4 = require(l_Parent_1.t);
local v5 = require(l_Parent_0.Core.Text.GetTextSize);
local v6 = require(l_Parent_0.Core.Style.Validator.validateFontInfo);
local v7 = require(l_Parent_0.Core.Style.Validator.validateTypographyInfo);
local v8 = require(l_Parent_0.Core.Style.Validator.validateColorInfo);
local v9 = require(l_Parent_0.Core.Style.Validator.validateColorToken);
local v10 = require(l_Parent_0.Core.Style.withStyle);
local v11 = require(l_Parent_0.UIBloxConfig);
local v12 = v2.PureComponent:extend("GenericTextLabel");
v12.validateProps = v4.interface({
    maxSize = v4.optional(v4.Vector2),
    fontStyle = v4.union(v6, v7),
    colorStyle = v4.union(v8, v9),
    fluidSizing = v4.optional(v4.boolean)
});
v12.defaultProps = {
    maxSize = Vector2.new(10000, 10000),
    fluidSizing = false
};
v12.render = function(v13)
    local l_Text_0 = v13.props.Text;
    local l_fluidSizing_0 = v13.props.fluidSizing;
    return v10(function(v16)
        local l_fontStyle_0 = v13.props.fontStyle;
        local l_colorStyle_0 = v13.props.colorStyle;
        local v19 = l_colorStyle_0.Color or l_colorStyle_0.Color3;
        local l_Transparency_0 = l_colorStyle_0.Transparency;
        local l_RichText_0 = v13.props.RichText;
        local l_BaseSize_0 = v16.Font.BaseSize;
        local v23 = if not l_fontStyle_0.RelativeMinSize then l_fontStyle_0.FontSize else l_BaseSize_0 * l_fontStyle_0.RelativeMinSize;
        local v24 = if not l_fontStyle_0.RelativeSize then l_fontStyle_0.FontSize else l_BaseSize_0 * l_fontStyle_0.RelativeSize;
        local l_Font_0 = l_fontStyle_0.Font;
        local l_Size_0 = v13.props.Size;
        if l_Size_0 == nil then
            local l_l_Text_0_0 = l_Text_0;
            if v13.props.TextTruncate == Enum.TextTruncate.AtEnd then
                l_l_Text_0_0 = l_l_Text_0_0 .. "...";
            end;
            local v28 = v5(l_l_Text_0_0, if not not v11.fixGenericTextLabelTextBound and v13.props.LineHeight then v24 * v13.props.LineHeight else v24, l_Font_0, v13.props.maxSize);
            l_Size_0 = UDim2.new(0, v28.X, 0, v28.Y);
        end;
        return v2.createElement("TextLabel", v3.Dictionary.join(v13.props, {
            [v2.Children] = v3.None,
            fluidSizing = v3.None,
            fontStyle = v3.None,
            colorStyle = v3.None,
            maxSize = v3.None,
            Size = if not (v13.props.AutomaticSize ~= nil) or v13.props.AutomaticSize == Enum.AutomaticSize.None then l_Size_0 else nil,
            Text = l_Text_0,
            Font = l_Font_0,
            TextSize = v13.props.TextSize or v24,
            AutomaticSize = v13.props.AutomaticSize or nil,
            TextColor3 = v19,
            TextTransparency = l_Transparency_0,
            TextWrapped = v13.props.TextWrapped == nil and true or v13.props.TextWrapped,
            TextScaled = l_fluidSizing_0,
            BackgroundTransparency = 1,
            RichText = l_RichText_0
        }), v3.Dictionary.join({
            UITextSizeConstraint = l_fluidSizing_0 and v2.createElement("UITextSizeConstraint", {
                MaxTextSize = v24,
                MinTextSize = v23
            } or nil)
        }, v13.props[v2.Children] or {}));
    end);
end;
return v12;


local v0 = require(script.Parent.GetTextSize);
return function(v1, v2, v3, v4)
    return v0(v1, v3, v2, (Vector2.new(v4, 10000))).Y;
end;


local l_TextService_0 = game:GetService("TextService");
local v1 = require(script.Parent.CleanRichTextTags);
local l_Parent_0 = script.Parent.Parent.Parent;
local v3 = require(l_Parent_0.UIBloxConfig);
local v4 = require(l_Parent_0.Logger);
local v5 = Vector2.new(2, 2);
return function(v6, v7, v8, v9, v10)
    if not v3.useGetTextBoundsAsync then
        if not (not v3.ignoreRichTextTagsForTextSizeCalculation or not v10) then
            v6 = v1(v6);
        end;
        return l_TextService_0:GetTextSize(v6, v7, v8, v9) + v5;
    else
        if not (not v3.ignoreRichTextTagsForTextSizeCalculation or not v10) then
            v6 = v1(v6);
        end;
        local l_GetTextBoundsParams_0 = Instance.new("GetTextBoundsParams");
        l_GetTextBoundsParams_0.Font = Font.fromEnum(v8);
        l_GetTextBoundsParams_0.Size = v7;
        l_GetTextBoundsParams_0.Text = v6;
        l_GetTextBoundsParams_0.Width = v9.X;
        local l_status_0, l_result_0 = pcall(function()
            return l_TextService_0:GetTextBoundsAsync(l_GetTextBoundsParams_0);
        end);
        if not l_status_0 then
            v4:warning("GetTextBoundsAsync call failed, falling back to frame size. Error: ", l_result_0);
            return v9;
        else
            return Vector2.new(l_result_0.X, (math.min(l_result_0.Y, v9.Y))) + v5;
        end;
    end;
end;


local v0 = require(script.Parent.GetTextSize);
return function(v1, v2, v3, v4, v5)
    return string.rep(" ", (math.ceil((v4 + v5) / (v0("  ", v2, v3, Vector2.new(0, 0)) - v0(" ", v2, v3, Vector2.new(0, 0))).X))) .. v1;
end;


local l_Parent_0 = script.Parent.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v2 = require(l_Parent_1.Roact);
local v3 = require(l_Parent_1.Cryo);
local v4 = require(l_Parent_1.t);
local v5 = require(l_Parent_0.Core.ImageSet.ImageSetComponent);
local v6 = require(l_Parent_0.Core.Text.GenericTextLabel.GenericTextLabel);
local v7 = require(l_Parent_0.Core.Text.GetTextSize);
local v8 = require(l_Parent_0.Core.Text.GetWrappedTextWithIcon);
local v9 = require(l_Parent_0.Core.Style.Validator.validateFontInfo);
local v10 = require(l_Parent_0.Core.Style.Validator.validateTypographyInfo);
local v11 = require(l_Parent_0.Core.Style.Validator.validateColorInfo);
local v12 = require(l_Parent_0.Core.Style.withStyle);
local v13 = v2.PureComponent:extend("ImageTextLabel");
v13.validateProps = v4.interface({
    imageProps = v4.optional(v4.interface({
        Size = v4.UDim2
    })),
    genericTextLabelProps = v4.interface({
        Text = v4.string,
        fontStyle = v4.union(v9, v10),
        colorStyle = v11,
        fluidSizing = v4.optional(v4.boolean),
        AnchorPoint = v4.None,
        Position = v4.None,
        Size = v4.None,
        TextXAlignment = v4.None,
        TextYAlignment = v4.None,
        TextScaled = v4.None,
        maxSize = v4.None
    }),
    frameProps = v4.optional(v4.interface({
        Size = v4.None
    })),
    maxSize = v4.optional(v4.Vector2),
    padding = v4.optional(v4.number)
});
v13.defaultProps = {
    maxSize = Vector2.new(10000, 10000),
    frameProps = {},
    padding = 0
};
v13.render = function(v14)
    local l_genericTextLabelProps_0 = v14.props.genericTextLabelProps;
    local l_imageProps_0 = v14.props.imageProps;
    local l_frameProps_0 = v14.props.frameProps;
    local l_padding_0 = v14.props.padding;
    local l_Text_0 = v14.props.genericTextLabelProps.Text;
    local l_maxSize_0 = v14.props.maxSize;
    local l_useMaxHeight_0 = v14.props.useMaxHeight;
    return v12(function(v22)
        local l_fontStyle_0 = l_genericTextLabelProps_0.fontStyle;
        local v24 = if not l_fontStyle_0.RelativeSize then l_fontStyle_0.FontSize else v22.Font.BaseSize * l_fontStyle_0.RelativeSize;
        local l_Font_0 = l_fontStyle_0.Font;
        if l_imageProps_0 then
            l_Text_0 = v8(l_Text_0, v24, l_Font_0, l_imageProps_0.Size.X.Offset, l_padding_0);
        end;
        local v26 = v7(l_Text_0, v24, l_Font_0, Vector2.new(l_maxSize_0.X, l_maxSize_0.Y));
        return v2.createElement("Frame", v3.Dictionary.join(l_frameProps_0, {
            Size = UDim2.new(0, v26.X, 0, not not l_useMaxHeight_0 and l_maxSize_0.Y or v26.Y)
        }), {
            Icon = if not l_imageProps_0 then nil else v2.createElement(v5.Label, l_imageProps_0),
            Name = v2.createElement(v6, v3.Dictionary.join(l_genericTextLabelProps_0, {
                Text = l_Text_0,
                AnchorPoint = Vector2.new(0, 0),
                Position = UDim2.new(0, 0, 0, 0),
                Size = UDim2.new(1, 0, 1, 0),
                TextXAlignment = Enum.TextXAlignment.Left,
                TextYAlignment = Enum.TextYAlignment.Top,
                fluidSizing = if not l_imageProps_0 then v14.props.fluidSizing else false,
                maxSize = l_maxSize_0
            }))
        });
    end);
end;
return v13;


return function(v0)
    local l_status_0, l_result_0 = pcall(function()
        return game:GetEngineFeature(v0);
    end);
    return l_status_0 and l_result_0;
end;


return function(v0)
    return function(v1)
        local v2 = string.match(tostring(v1), "RoactBinding");
        if typeof(v1) == "table" and v2 then
            local l_status_0, l_result_0 = pcall(function()
                return v1:getValue();
            end);
            if l_status_0 then
                local v5, v6 = v0(l_result_0);
                if v5 then
                    return true;
                else
                    warn(string.format("RoactBinding value: %s", v6));
                    return false;
                end;
            else
                warn("getValue() not defined");
                return false;
            end;
        else
            warn(string.format("RoactBinding expected, got %s", (typeof(v1))));
            return false;
        end;
    end;
end;


return {
    AnchoringTypes = {
        Head = "Head",
        Wrist = "Wrist",
        World = "World"
    }
};


local l_RunService_0 = game:GetService("RunService");
local l_Parent_0 = script.Parent;
local v2 = require(l_Parent_0.Constants);
local v3 = require(l_Parent_0.usePanel3DRenderStep);
local l_Parent_1 = l_Parent_0.Parent;
local l_Parent_2 = l_Parent_1.Parent;
local l_Parent_3 = l_Parent_2.Parent;
local v7 = require(l_Parent_3.React);
local v8 = require(l_Parent_3.Roact);
local l_Object_0 = require(l_Parent_3.LuauPolyfill).Object;
local v10 = require(l_Parent_2.Core.Utility.GetEngineFeatureSafe);
local v11 = require(l_Parent_1.Spatial.SurfaceGuiWithAdornee);
local v12 = require(l_Parent_2.UIBloxConfig);
local v13 = v10("CurvedSurfaceGuisEnabled");
local v14 = {
    partSize = Vector2.new(10, 10),
    virtualScreenSize = Vector2.new(10, 10),
    offset = CFrame.new(0, 0, 0),
    lerp = false,
    tilt = 0,
    anchoring = v2.AnchoringTypes.World,
    faceCamera = false,
    panelName = "PanelBase",
    movementUpdateEvent = l_RunService_0.RenderStepped,
    vrService = game:GetService("VRService"),
    alwaysOnTop = true,
    parent = workspace,
    hidden = false,
    curvature = 1,
    zOffset = 0
};
return function(v15)
    local v16 = l_Object_0.assign({}, v14, v15);
    if not v12.refactorPanel3D then
        local v17 = v7.useRef(nil);
        local v18 = v7.useRef(nil);
        local v19 = v7.useRef(nil);
        v3(v16, v17);
        return (v7.createElement("Folder", {
            ref = v19,
            Archivable = false
        }, {
            WorkspacePortal = v7.createElement(v8.Portal, {
                target = v16.parent
            }, {
                GUIPart = if not v16.hidden then v7.createElement("Part", {
                    Name = v16.panelName .. "_Part",
                    ref = v17,
                    Anchored = true,
                    CFrame = v16.offset * CFrame.Angles(math.rad(v16.tilt), 0, 0),
                    Size = Vector3.new(v16.partSize.X, v16.partSize.Y, 0.05),
                    Transparency = 1,
                    Color = Color3.new(0, 0, 0),
                    CanCollide = false,
                    CanTouch = false
                }) else nil
            }),
            AppUI = v7.createElement("SurfaceGui", {
                Name = v16.panelName .. "_SurfaceGui",
                ref = v18,
                Adornee = v17,
                Active = true,
                Enabled = not v16.hidden,
                CanvasSize = v16.virtualScreenSize,
                ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
                LightInfluence = 0,
                children = v16.children,
                AlwaysOnTop = v16.alwaysOnTop,
                Shape = if not not v13 and v16.curvature ~= 0 then Enum.SurfaceGuiShape.CurvedHorizontally else nil,
                HorizontalCurvature = if not v13 then nil else v16.curvature,
                ZOffset = v16.zOffset
            })
        }));
    else
        local v20, v21 = v3(v16, nil);
        return v7.createElement(v11, {
            name = v16.panelName,
            detached = true,
            adorneeProps = {
                Size = v20,
                CFrame = v21,
                Parent = v16.parent
            },
            surfaceGuiProps = {
                Enabled = not v16.hidden,
                CanvasSize = v16.virtualScreenSize,
                Shape = if not not v13 and v16.curvature ~= 0 then Enum.SurfaceGuiShape.CurvedHorizontally else nil,
                HorizontalCurvature = if not v13 then nil else v16.curvature,
                ZOffset = v16.zOffset
            }
        }, v16.children);
    end;
end;


local l_RunService_0 = game:GetService("RunService");
local l_ContextActionService_0 = game:GetService("ContextActionService");
local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent.Parent.Parent;
local v4 = require(l_Parent_1.React);
local v5 = require(l_Parent_1.Roact);
local l_EventConnection_0 = require(l_Parent_1.ReactUtils).EventConnection;
local l_Object_0 = require(l_Parent_1.LuauPolyfill).Object;
local _ = require(l_Parent_0.Constants);
local v9 = {
    VRService = game:GetService("VRService"),
    UpdateEvent = l_RunService_0.Heartbeat
};
return function(v10)
    local v11 = l_Object_0.assign({}, v9, v10);
    local l_LaserPointer_0 = v11.LaserPointer;
    local l_VRControllerModel_0 = v11.VRControllerModel;
    local l_VRService_0 = v11.VRService;
    local v15 = v4.useRef(nil);
    local v16 = v4.useRef(nil);
    local v17 = v4.useRef(nil);
    local l_status_0, l_result_0 = pcall(function()
        return l_VRService_0:GetPropertyChangedSignal("VRSessionState");
    end);
    local v20 = v4.useCallback(function()
        if not v15.current then
            v15.current = l_LaserPointer_0.new();
            v15.current:setMode(v15.current.Mode.DualPointer);
            v15.current:setEnableAmbidexterousPointer(true);
            v16.current = l_VRControllerModel_0.new(Enum.UserCFrame.LeftHand);
            v17.current = l_VRControllerModel_0.new(Enum.UserCFrame.RightHand);
        end;
        v16.current:setEnabled(l_VRService_0.VREnabled);
        v17.current:setEnabled(l_VRService_0.VREnabled);
        if l_VRService_0.VREnabled then
            l_ContextActionService_0:BindActivate(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonA, Enum.KeyCode.ButtonX, Enum.KeyCode.ButtonR2, Enum.KeyCode.ButtonL2);
        end;
    end, {
        v16,
        v17,
        v15,
        l_LaserPointer_0,
        l_VRControllerModel_0
    });
    local v21 = nil;
    v21 = v4.useCallback(function()
        if v16.current then
            v16.current:setEnabled(false);
        end;
        if v17.current then
            v17.current:setEnabled(false);
        end;
        if v15.current then
            v15.current:setMode(v15.current.Mode.Disabled);
        end;
        l_ContextActionService_0:UnbindActivate(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonA);
        l_ContextActionService_0:UnbindActivate(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonR2);
    end, {
        v16,
        v17,
        v15,
        l_LaserPointer_0,
        l_VRControllerModel_0
    });
    local v24 = v4.useCallback(function()
        local v22 = true;
        if l_VRService_0.VRSessionState ~= Enum.VRSessionState.Idle then
            v22 = l_VRService_0.VRSessionState == Enum.VRSessionState.Visible;
        end;
        local v23 = not v22;
        if v15.current then
            if not v23 then
                v15.current:setMode(v15.current.Mode.Disabled);
            else
                v15.current:setMode(v15.current.Mode.DualPointer);
            end;
        end;
        if v16.current then
            v16.current:setEnabled(v23);
        end;
        if v17.current then
            v17.current:setEnabled(v23);
        end;
    end, {
        v16,
        v17,
        v15,
        l_LaserPointer_0,
        l_VRControllerModel_0
    });
    v4.useEffect(function()
        if l_VRService_0.VREnabled then
            v20();
        end;
        return v21;
    end, {});
    return v4.createElement(v5.Portal, {
        target = workspace
    }, {
        UserCFrameChangedConnection = v4.createElement(l_EventConnection_0, {
            event = v11.UpdateEvent,
            callback = function()
                if v15.current then
                    v15.current:update();
                end;
                if v16.current then
                    v16.current:update();
                end;
                if v17.current then
                    v17.current:update();
                end;
            end
        }),
        VREnabledConnection = v4.createElement(l_EventConnection_0, {
            event = l_VRService_0:GetPropertyChangedSignal("VREnabled"),
            callback = v20
        }),
        VRSessionStateConnection = if not l_status_0 then nil else v4.createElement(l_EventConnection_0, {
            event = l_result_0,
            callback = v24
        })
    });
end;


local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent.Parent;
local v2 = require(l_Parent_1.Parent.React);
local v3 = require(l_Parent_0.Constants);
local v4 = require(l_Parent_1.UIBloxConfig);
local function v9(v5, v6)
    local l_v6_UserCFrame_0 = v6:GetUserCFrame(v5);
    local l_CurrentCamera_0 = workspace.CurrentCamera;
    if not l_CurrentCamera_0.HeadLocked then
        l_v6_UserCFrame_0 = v6:GetUserCFrame(Enum.UserCFrame.Head):Inverse() * l_v6_UserCFrame_0;
    end;
    return l_CurrentCamera_0.CFrame * (CFrame.new(l_v6_UserCFrame_0.p * l_CurrentCamera_0.HeadScale) * (l_v6_UserCFrame_0 - l_v6_UserCFrame_0.p));
end;
return function(v10, v11)
    local v12 = nil;
    local v13 = nil;
    local v14 = nil;
    local v15 = nil;
    if v4.refactorPanel3D then
        local v16, v17 = v2.useBinding((Vector3.new(v10.partSize.X, v10.partSize.Y, 0.05)));
        v12 = v16;
        v13 = v17;
        v16, v17 = v2.useBinding(v10.offset * CFrame.Angles(math.rad(v10.tilt), 0, 0));
        v14 = v16;
        v15 = v17;
    end;
    local v18 = v2.useRef(v10.offset);
    local v19 = v2.useRef(nil);
    local v20 = v2.useRef(false);
    local l_vrService_0 = v10.vrService;
    v2.useEffect(function()
        v18.current = v10.offset;
    end, {});
    local v35 = v2.useCallback(function(v22)
        local l_CurrentCamera_1 = workspace.CurrentCamera;
        local v24 = nil;
        local l_CFrame_0 = l_CurrentCamera_1.CFrame;
        local l_HeadScale_0 = l_CurrentCamera_1.HeadScale;
        local v27 = nil;
        if v10.anchoring == v3.AnchoringTypes.Head then
            v27 = l_vrService_0:GetUserCFrame(Enum.UserCFrame.Head);
            local v28 = v9(Enum.UserCFrame.Head, l_vrService_0);
            if v19.current == nil then
                v19.current = v28;
            end;
            assert(v19.current ~= nil, "lastLookCFrame should not be nil.");
            if v19.current.LookVector:Dot(v28.LookVector) < 0.85 then
                v20.current = true;
            elseif v19.current.LookVector:Dot(v28.LookVector) > 0.99 then
                v20.current = false;
            end;
            if v20.current then
                v19.current = v19.current:Lerp(v28, 7.2 * v22);
            end;
            v24 = v28.Position + (v19.current.LookVector * l_HeadScale_0) * 2;
            v24 = Vector3.new(v24.X, v28.Position.Y, v24.Z);
            local l_alignedPanel_0 = v10.alignedPanel;
            if l_alignedPanel_0 then
                local l_l_alignedPanel_0_Part_0 = l_alignedPanel_0:GetPart();
                if (l_l_alignedPanel_0_Part_0 and l_alignedPanel_0:IsPositionLockedType()) and (l_alignedPanel_0:IsVisible() or l_alignedPanel_0.alwaysUpdatePosition) then
                    v24 = Vector3.new(l_l_alignedPanel_0_Part_0.Position.X, v28.Position.Y - 0.4 * l_HeadScale_0, l_l_alignedPanel_0_Part_0.Position.Z);
                end;
            end;
        elseif v10.anchoring == v3.AnchoringTypes.Wrist then
            if l_vrService_0:GetUserCFrameEnabled(Enum.UserCFrame.RightHand) and l_vrService_0.GuiInputUserCFrame == Enum.UserCFrame.LeftHand then
                v27 = l_vrService_0:GetUserCFrame(Enum.UserCFrame.RightHand);
            elseif l_vrService_0:GetUserCFrameEnabled(Enum.UserCFrame.LeftHand) then
                v27 = l_vrService_0:GetUserCFrame(Enum.UserCFrame.LeftHand);
            end;
            if not v27 then
                v27 = l_vrService_0:GetUserCFrame(Enum.UserCFrame.Head);
            end;
            v24 = (l_CFrame_0 * CFrame.new(v27.Position * l_HeadScale_0)).Position;
        else
            return ;
        end;
        if v10.offsetCallback then
            v24 = v10.offsetCallback({
                finalPosition = v24,
                cameraHeadScale = l_HeadScale_0
            });
        end;
        if v10.lerp and v18.current ~= nil then
            v18.current = v18.current:Lerp(v10.offset, 7.2 * v22);
        else
            v18.current = v10.offset;
        end;
        local v31 = nil;
        if v18.current ~= nil then
            if not v10.faceCamera then
                local v32, v33, v34 = v27:ToOrientation();
                v31 = (CFrame.new(v24) * CFrame.Angles(-v32, v33, -v34)) * CFrame.new(v18.current.Position * l_HeadScale_0);
            else
                v31 = CFrame.new(v24 + v18.current.Position * l_HeadScale_0, v9(Enum.UserCFrame.Head, l_vrService_0).Position);
            end;
        end;
        if v10.tiltCallback then
            v31 = v10.tiltCallback({
                panelCFrame = v31,
                cameraHeadScale = l_HeadScale_0
            });
        end;
        if not v4.refactorPanel3D then
            if v11.current ~= nil then
                v11.current.CFrame = v31;
                v11.current.Size = Vector3.new(v10.partSize.X * l_HeadScale_0, v10.partSize.Y * l_HeadScale_0, 0.05);
            end;
            return ;
        else
            v15(v31);
            v13((Vector3.new(v10.partSize.X * l_HeadScale_0, v10.partSize.Y * l_HeadScale_0, 0.05)));
            return ;
        end;
    end, {
        v10.anchoring,
        v10.faceCamera,
        v10.lerp,
        v10.offset,
        v10.partSize,
        v10.alignedPanel,
        v10.offsetCallback,
        v10.tiltCallback
    });
    v2.useEffect(function()
        if v10.anchoring ~= v3.AnchoringTypes.World then
            local v36 = nil;
            local v37 = nil;
            local v38 = nil;
            local function v39()
                if v36 then
                    v36:Disconnect();
                end;
                if workspace.CurrentCamera then
                    v36 = workspace.CurrentCamera:GetPropertyChangedSignal("CFrame"):Connect(function()
                        v35(0);
                    end);
                end;
            end;
            v38 = workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(v39);
            v39();
            if v10.alignedPanel then
                local l_Part_0 = v10.alignedPanel:GetPart();
                if l_Part_0 then
                    v37 = l_Part_0:GetPropertyChangedSignal("CFrame"):Connect(function()
                        v35(0);
                    end);
                end;
            end;
            local v41 = v10.movementUpdateEvent:Connect(v35);
            return function()
                v41:Disconnect();
                v38:Disconnect();
                if v36 then
                    v36:Disconnect();
                end;
                if v37 then
                    v37:Disconnect();
                end;
            end;
        else
            return function()
            end;
        end;
    end, {
        v10.anchoring,
        v35
    });
    return v12, v14;
end;


return {
    MouseAndKeyboard = "MouseAndKeyboard",
    Gamepad = "Gamepad",
    Touch = "Touch"
};


local v0 = require(script.Parent.Parent.Lumberyak);
local l_Logger_0 = v0.Logger;
local v5 = {
    maxLevel = l_Logger_0.Levels.Info,
    log = function(_, v3, v4)
        if not (v4.level ~= l_Logger_0.Levels.Error) or v4.level == l_Logger_0.Levels.Warning then
            warn(v3);
            return ;
        else
            print(v3);
            return ;
        end;
    end
};
local function _(v6)
    local v7 = v0.Logger.new(nil, v6);
    v7:setContext({
        prefix = "[{loggerName} - {level}] - "
    });
    v7:addSink(v5);
    return v7;
end;
local v9 = v0.Logger.new(nil, "UIBlox");
v9:setContext({
    prefix = "[{loggerName} - {level}] - "
});
v9:addSink(v5);
local l_v9_0 = v9;
v9 = {
    uibloxSink = v5,
    setLogLevel = function(v11, v12)
        v11.uibloxSink.maxLevel = v12;
        v11:addSink(v11.uibloxSink);
    end,
    enableTraceLog = function(v13)
        v13:setLogLevel(l_Logger_0.Levels.Trace);
    end
};
setmetatable(v9, {
    __index = l_v9_0
});
return v9;


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Otter);
local v2 = require(l_Parent_0.Roact);
local v3 = require(l_Parent_0.Cryo);
local v4 = require(l_Parent_0.t);
local v5 = require(l_Parent_0.UIBlox.Core.Style.withStyle);
local v6 = require(script.Parent.ModalBottomSheetButton);
local v7 = v2.PureComponent:extend("ModalBottomSheet");
local v8 = {
    frequency = 4,
    dampingRatio = 1
};
v7.validateProps = v4.strictInterface({
    buttonModels = v4.array(v4.table),
    screenWidth = v4.number,
    onDismiss = v4.callback,
    showImages = v4.optional(v4.boolean),
    bottomGap = v4.optional(v4.number),
    sheetContentXSize = v4.optional(v4.UDim),
    sheetContentXPosition = v4.optional(v4.UDim)
});
v7.defaultProps = {
    bottomGap = 0,
    showImages = true,
    sheetContentXSize = UDim.new(1, 0),
    sheetContentXPosition = UDim.new(0, 0)
};
v7.init = function(v9)
    v9.motor = v1.createSingleMotor(0);
    v9.ref = v2.createRef();
    v9.active = true;
end;
v7.render = function(v10)
    local l_sheetContentXPosition_0 = v10.props.sheetContentXPosition;
    local l_sheetContentXSize_0 = v10.props.sheetContentXSize;
    v10.sheetHeight = #v10.props.buttonModels * 56;
    if #v10.props.buttonModels >= 7 then
        v10.sheetHeight = 420;
    end;
    local v13 = {};
    for v14, v15 in ipairs(v10.props.buttonModels) do
        v13["button " .. v14] = v2.createElement(v6, (v3.Dictionary.join(v15, {
            hasRoundTop = v14 == 1,
            hasRoundBottom = v14 == #v10.props.buttonModels,
            isFixed = v10.props.screenWidth > 600,
            elementHeight = 56,
            showImage = v10.props.showImages,
            LayoutOrder = v14,
            onActivatedAndDismissed = function(v16)
                if v15.onActivated then
                    v15.onActivated(v16);
                end;
                if not v15.stayOnActivated then
                    v10.props.onDismiss();
                end;
            end
        })));
    end;
    v13.layout = v2.createElement("UIListLayout", {
        HorizontalAlignment = Enum.HorizontalAlignment.Center,
        FillDirection = Enum.FillDirection.Vertical,
        SortOrder = Enum.SortOrder.LayoutOrder
    });
    return v5(function(v17)
        return v2.createElement("Frame", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            BorderSizePixel = 0
        }, {
            Background = v2.createElement("TextButton", {
                ZIndex = 0,
                AutoButtonColor = false,
                BackgroundColor3 = v17.Theme.Overlay.Color,
                BackgroundTransparency = v17.Theme.Overlay.Transparency,
                BorderSizePixel = 0,
                Size = UDim2.new(1, 0, 1, 0),
                Text = "",
                [v2.Event.Activated] = function()
                    v10.active = false;
                    v10.motor:setGoal(v1.spring(0, v8));
                end
            }),
            SheetContent = v2.createElement("ScrollingFrame", {
                BackgroundTransparency = 1,
                Size = UDim2.new(l_sheetContentXSize_0.Scale, l_sheetContentXSize_0.Offset, 0, v10.sheetHeight),
                Position = UDim2.new(l_sheetContentXPosition_0.Scale, l_sheetContentXPosition_0.Offset, 1, 0),
                ScrollBarThickness = 0,
                CanvasSize = UDim2.new(l_sheetContentXSize_0.Scale, l_sheetContentXSize_0.Offset, 0, #v10.props.buttonModels * 56),
                ClipsDescendants = true,
                [v2.Ref] = v10.ref
            }, v13)
        });
    end);
end;
v7.didMount = function(v18)
    local l_sheetContentXPosition_1 = v18.props.sheetContentXPosition;
    v18.motor:onStep(function(v20)
        if v18.ref.current then
            v18.ref.current.Position = UDim2.new(l_sheetContentXPosition_1.Scale, l_sheetContentXPosition_1.Offset, 1, -(v18.sheetHeight + v18.props.bottomGap) * v20);
        end;
    end);
    v18.motor:setGoal(v1.spring(1, v8));
    v18.motor:onComplete(function()
        if not v18.active then
            v18.props.onDismiss();
        end;
    end);
    v18.motor:start();
end;
v7.wilUnmount = function(v21)
    v21.motor:destroy();
end;
return v7;


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Roact);
local v2 = require(l_Parent_0.t);
local v3 = require(l_Parent_0.UIBlox.Core.Style.withStyle);
local v4 = require(l_Parent_0.UIBlox.Core.ImageSet.ImageSetComponent);
local v5 = require(l_Parent_0.UIBlox.App.ImageSet.Images);
local v6 = v1.PureComponent:extend("ModalBottomSheetButton");
local l_ImageRectSize_0 = v5["component_assets/circle_17"].ImageRectSize;
local l_ImageRectOffset_0 = v5["component_assets/circle_17"].ImageRectOffset;
local v9 = 8 * v5.ImagesResolutionScale;
local v10 = 8 * v5.ImagesResolutionScale;
local v11 = Rect.new(v9, v10, l_ImageRectSize_0.x - v9, l_ImageRectSize_0.y - v10);
v6.validateProps = v2.strictInterface({
    icon = v2.optional(v2.union(v2.table, v2.string)),
    text = v2.optional(v2.string),
    onActivated = v2.optional(v2.callback),
    renderRightElement = v2.optional(v2.callback),
    showImage = v2.boolean,
    isFixed = v2.boolean,
    onActivatedAndDismissed = v2.callback,
    elementHeight = v2.integer,
    hasRoundBottom = v2.boolean,
    hasRoundTop = v2.boolean,
    LayoutOrder = v2.integer,
    stayOnActivated = v2.optional(v2.boolean)
});
v6.defaultProps = {
    icon = {},
    text = "",
    onActivated = function()
    end
};
v6.init = function(v12)
    v12.ref = v1.createRef();
    v12.onColorChange = function(v13)
        if v12.ref.current then
            v12.ref.current.ImageColor3 = v13;
            return ;
        else
            return ;
        end;
    end;
    v12.onInputBegan = function(v14)
        local v15 = true;
        if v14.UserInputType ~= Enum.UserInputType.MouseButton1 then
            v15 = v14.UserInputType == Enum.UserInputType.Touch;
        end;
        return v15;
    end;
    v12.onInputEnd = function(v16)
        local v17 = true;
        if v16.UserInputType ~= Enum.UserInputType.MouseButton1 then
            v17 = v16.UserInputType == Enum.UserInputType.Touch;
        end;
        return v17;
    end;
end;
v6.render = function(v18)
    local l_hasRoundTop_0 = v18.props.hasRoundTop;
    local l_hasRoundBottom_0 = v18.props.hasRoundBottom;
    local v21 = nil;
    local v22 = nil;
    local v23 = nil;
    local l_X_0 = l_ImageRectSize_0.X;
    local v25 = l_X_0 / 2;
    if not l_hasRoundTop_0 or not l_hasRoundBottom_0 then
        if not l_hasRoundTop_0 then
            if not l_hasRoundBottom_0 then
                v21 = Vector2.new(1, 1);
                v22 = l_ImageRectOffset_0 + Vector2.new(v25, v25);
            else
                v21 = Vector2.new(l_X_0, v25);
                v22 = l_ImageRectOffset_0 + Vector2.new(0, v25);
                v23 = Rect.new(v25 - 1, 0, v25 + 1, 1);
            end;
        else
            v21 = Vector2.new(l_X_0, v25);
            v22 = l_ImageRectOffset_0;
            v23 = Rect.new(v25 - 1, v25 - 1, v25 + 1, v25);
        end;
    else
        v21 = l_ImageRectSize_0;
        v22 = l_ImageRectOffset_0;
        v23 = v11;
    end;
    local l_elementHeight_0 = v18.props.elementHeight;
    local v27 = nil;
    v27 = if not v18.props.isFixed then UDim2.new(1, -32, 0, l_elementHeight_0) else UDim2.new(0, 300, 0, l_elementHeight_0);
    local v28 = 24;
    if not (not v18.props.showImage and not v18.props.renderRightElement) then
        v28 = 12;
    end;
    local l_v28_0 = v28;
    local v30 = l_elementHeight_0 * 0.8;
    if v18.props.showImage then
        l_v28_0 = (l_v28_0 + v30) + v28;
    end;
    if v18.props.renderRightElement then
        l_v28_0 = (l_v28_0 + v30) + v28;
    end;
    return v3(function(v31)
        local l_Theme_0 = v31.Theme;
        local l_Font_0 = v31.Font;
        local l_Transparency_0 = l_Theme_0.BackgroundUIDefault.Transparency;
        local l_Color_0 = l_Theme_0.TextEmphasis.Color;
        return v1.createElement("ImageButton", {
            AutoButtonColor = false,
            BackgroundTransparency = 1,
            BorderSizePixel = 0,
            ScaleType = Enum.ScaleType.Slice,
            SliceCenter = v23,
            Image = v5["component_assets/circle_17"].Image,
            ImageColor3 = l_Theme_0.BackgroundUIDefault.Color,
            ImageRectSize = v21,
            ImageRectOffset = v22,
            ImageTransparency = l_Transparency_0,
            Size = v27,
            LayoutOrder = v18.props.LayoutOrder,
            [v1.Ref] = v18.ref,
            [v1.Event.Activated] = v18.props.onActivatedAndDismissed,
            [v1.Event.InputBegan] = function(_, v37)
                if v18.onInputBegan(v37) then
                    v18.onColorChange(l_Theme_0.BackgroundOnPress.Color);
                end;
            end,
            [v1.Event.InputEnded] = function(_, v39)
                if v18.onInputEnd(v39) then
                    v18.onColorChange(l_Theme_0.BackgroundUIDefault.Color);
                end;
            end
        }, {
            buttonContents = v1.createElement("Frame", {
                Size = UDim2.new(1, 0, 1, 0),
                BackgroundTransparency = 1
            }, {
                horizontalLayout = v1.createElement("UIListLayout", {
                    FillDirection = Enum.FillDirection.Horizontal,
                    SortOrder = Enum.SortOrder.LayoutOrder,
                    Padding = UDim.new(0, v28)
                }),
                padding = v1.createElement("UIPadding", {
                    PaddingLeft = UDim.new(0, v28),
                    PaddingTop = UDim.new(0.1, 0),
                    PaddingBottom = UDim.new(0.1, 0)
                }),
                icon = not not v18.props.showImage and v1.createElement(v4.Label, {
                    Image = v18.props.icon,
                    ImageColor3 = l_Color_0,
                    ImageTransparency = l_Transparency_0,
                    BackgroundTransparency = 1,
                    Size = UDim2.new(0, v30, 0, v30),
                    LayoutOrder = 1
                }) or nil,
                textLabel = v1.createElement("TextLabel", {
                    TextXAlignment = Enum.TextXAlignment.Left,
                    BackgroundTransparency = 1,
                    Size = UDim2.new(1, -l_v28_0, 1, 0),
                    Text = v18.props.text,
                    TextTransparency = l_Transparency_0,
                    Font = l_Font_0.Header2.Font,
                    TextColor3 = l_Color_0,
                    TextSize = l_Font_0.Header2.RelativeSize * l_Font_0.BaseSize,
                    TextTruncate = Enum.TextTruncate.AtEnd,
                    LayoutOrder = 2
                }),
                rightContainer = v18.props.renderRightElement and v1.createElement("Frame", {
                    BackgroundTransparency = 1,
                    Size = UDim2.new(0, v30, 0, v30),
                    LayoutOrder = 3
                }, {
                    hint = v18.props.renderRightElement()
                })
            }),
            bottomBorder = not l_hasRoundBottom_0 and v1.createElement("Frame", {
                LayoutOrder = 0,
                BackgroundTransparency = 1,
                BackgroundColor3 = l_Theme_0.Divider.Color,
                BorderSizePixel = 0,
                Size = UDim2.new(1, 0, 0, 1),
                AnchorPoint = Vector2.new(0, 1),
                Position = UDim2.new(0, 0, 1, 0)
            })
        });
    end);
end;
return v6;


local v0 = require(script.Parent.Parent.Parent.Cryo);
local v1 = {};
v1.__index = v1;
local function _(v2, v3)
    local v4 = typeof(v2);
    local v5 = true;
    if v4 ~= "string" then
        v5 = v4 == "userdata";
    end;
    assert(v5, string.format("%s '%s' must be a string or userdata but is a %s", v3, tostring(v2), v4));
end;
v1.new = function(v7, v8, v9, v10)
    assert(typeof(v7) == "string", "name must be a string");
    assert(#v7 > 0, "name must not be an empty string");
    local v11 = typeof(v8);
    local v12 = true;
    if v11 ~= "string" then
        v12 = v11 == "userdata";
    end;
    assert(v12, string.format("%s '%s' must be a string or userdata but is a %s", "initialState", tostring(v8), v11));
    v12 = true;
    if v9 ~= nil then
        v12 = typeof(v9) == "table";
    end;
    assert(v12, "initialContext must be a table or nil");
    assert(typeof(v10) == "table", "transitionTable must be a table");
    assert(typeof(v10[v8]) == "table", "initialState must be present in transitionTable");
    v11 = {};
    setmetatable(v11, v1);
    v11.name = v7;
    v11.currentState = v8;
    v11.currentContext = v9 or {};
    v11.transitionTable = {};
    v11.events = {};
    for v13, v14 in pairs(v10) do
        local v15 = typeof(v13);
        local v16 = true;
        if v15 ~= "string" then
            v16 = v15 == "userdata";
        end;
        assert(v16, string.format("%s '%s' must be a string or userdata but is a %s", "state", tostring(v13), v15));
        assert(typeof(v14) == "table", string.format("state '%s' must map to a table", (tostring(v13))));
        v15 = {};
        for v17, v18 in pairs(v14) do
            local v19 = typeof(v17);
            local v20 = true;
            if v19 ~= "string" then
                v20 = v19 == "userdata";
            end;
            assert(v20, string.format("%s '%s' must be a string or userdata but is a %s", "event", tostring(v17), v19));
            assert(typeof(v18) == "table", string.format("event '%s' must map to a table", (tostring(v17))));
            v19 = v18.nextState;
            v20 = v18.action;
            if v19 ~= nil then
                local v21 = typeof(v19);
                local v22 = true;
                if v21 ~= "string" then
                    v22 = v21 == "userdata";
                end;
                assert(v22, string.format("%s '%s' must be a string or userdata but is a %s", "nextState", tostring(v19), v21));
                assert(v10[v19] ~= nil, string.format("nextState '%s' does not exist in transitionTable", (tostring(v19))));
            end;
            local v23 = true;
            if v20 ~= nil then
                v23 = typeof(v20) == "function";
            end;
            assert(v23, "action must be a function");
            v15[v17] = v18;
            if v11.events[v17] == nil then
                v11.events[v17] = function(v24)
                    return v11:handleEvent(v17, v24);
                end;
            end;
        end;
        v11.transitionTable[v13] = v15;
    end;
    setmetatable(v11.events, {
        __index = function(_, v26)
            error(string.format("'%s' is not a valid event in StateTable '%s'", tostring(v26), v11.name), 2);
        end
    });
    return v11;
end;
v1.handleEvent = function(v27, v28, v29)
    local v30 = typeof(v28);
    local v31 = true;
    if v30 ~= "string" then
        v31 = v30 == "userdata";
    end;
    assert(v31, string.format("%s '%s' must be a string or userdata but is a %s", "event", tostring(v28), v30));
    v31 = true;
    if v29 ~= nil then
        v31 = typeof(v29) == "table";
    end;
    assert(v31, "args must be nil or valid table");
    v30 = v27.currentState;
    v31 = v27.transitionTable[v30];
    assert(v31 ~= nil, "no transition events for current state");
    if v31[v28] ~= nil then
        local v32 = v31[v28];
        local v33 = v32.nextState or v30;
        local l_action_0 = v32.action;
        local l_currentContext_0 = v27.currentContext;
        if l_action_0 ~= nil then
            l_currentContext_0 = v0.Dictionary.join(v27.currentContext, l_action_0(v30, v33, v29, v27.currentContext) or {});
            v27.currentContext = l_currentContext_0;
        end;
        v27.currentState = v33;
        if v27.stateChangeHandler ~= nil then
            v27.stateChangeHandler(v30, v33, l_currentContext_0);
        end;
    end;
end;
v1.onStateChange = function(v36, v37)
    local v38 = true;
    if v37 ~= nil then
        v38 = typeof(v37) == "function";
    end;
    assert(v38, "stateChangeHandler must be nil or a function");
    v36.stateChangeHandler = v37;
end;
return v1;


local l_LocalizationService_0 = game:GetService("LocalizationService");
local l_GuiService_0 = game:GetService("GuiService");
local l_Parent_0 = script.Parent;
local v3 = require(l_Parent_0.Constants);
local v4 = require(l_Parent_0.GeneratedTranslations);
local function _(v5)
    if not l_GuiService_0:FindFirstChild(v3.LOCALIZATION_TABLE_NAME) then
        local l_LocalizationTable_0 = Instance.new("LocalizationTable");
        l_LocalizationTable_0.Name = v3.LOCALIZATION_TABLE_NAME;
        l_LocalizationTable_0.Archivable = false;
        l_LocalizationTable_0.SourceLocaleId = "en-us";
        l_LocalizationTable_0:SetEntries(v4);
        l_LocalizationTable_0.Parent = v5;
        return ;
    else
        return ;
    end;
end;
if not l_GuiService_0:FindFirstChild(v3.LOCALIZATION_TABLE_NAME) then
    local l_LocalizationTable_1 = Instance.new("LocalizationTable");
    l_LocalizationTable_1.Name = v3.LOCALIZATION_TABLE_NAME;
    l_LocalizationTable_1.Archivable = false;
    l_LocalizationTable_1.SourceLocaleId = "en-us";
    l_LocalizationTable_1:SetEntries(v4);
    l_LocalizationTable_1.Parent = l_GuiService_0;
end;
local l_Translator_0 = l_GuiService_0.UIBloxLocalization:GetTranslator("en-us");
local v10 = {};
local function _(v11)
    local v12 = v10[v11];
    if not v12 then
        v12 = l_GuiService_0.UIBloxLocalization:GetTranslator(v11);
        v10[v11] = v12;
        return v12;
    else
        return v12;
    end;
end;
local function _()
    local l_RobloxLocaleId_0 = l_LocalizationService_0.RobloxLocaleId;
    local v15 = v10[l_RobloxLocaleId_0];
    if not v15 then
        v15 = l_GuiService_0.UIBloxLocalization:GetTranslator(l_RobloxLocaleId_0);
        v10[l_RobloxLocaleId_0] = v15;
        return v15;
    else
        return v15;
    end;
end;
local function v22(v17, v18, v19)
    local l_status_0, l_result_0 = pcall(function()
        return v19:FormatByKey(v17, v18);
    end);
    if not l_status_0 then
        if v19.LocaleId == "zh-cjv" then
            return "";
        else
            return l_Translator_0:FormatByKey(v17, v18);
        end;
    else
        return l_result_0;
    end;
end;
return {
    FormatByKey = function(_, v24, v25)
        local l_v22_0 = v22;
        local l_v24_0 = v24;
        local l_v25_0 = v25;
        local l_RobloxLocaleId_1 = l_LocalizationService_0.RobloxLocaleId;
        local v30 = v10[l_RobloxLocaleId_1];
        local v31;
        if not v30 then
            v30 = l_GuiService_0.UIBloxLocalization:GetTranslator(l_RobloxLocaleId_1);
            v10[l_RobloxLocaleId_1] = v30;
            v31 = v30;
        else
            v31 = v30;
        end;
        return l_v22_0(l_v24_0, l_v25_0, v31);
    end,
    FormatByKeyForLocale = function(_, v33, v34, v35)
        local l_v22_1 = v22;
        local l_v33_0 = v33;
        local l_v35_0 = v35;
        local v39 = v10[v34];
        local v40;
        if not v39 then
            v39 = l_GuiService_0.UIBloxLocalization:GetTranslator(v34);
            v10[v34] = v39;
            v40 = v39;
        else
            v40 = v39;
        end;
        return l_v22_1(l_v33_0, l_v35_0, v40);
    end
};


local v0 = require(script.Parent.Parent.Parent.Roact);
local v1 = {};
v1.__index = v1;
v1.new = function(v2)
    local v3 = {};
    setmetatable(v3, {
        __index = v1
    });
    v3.callback = v2;
    v3.connected = true;
    v3.isMock = 231;
    return v3;
end;
v1.Fire = function(v4, v5)
    if v4.connected then
        v4.callback(v5);
    end;
end;
v1.Disconnect = function(v6)
    v6.connected = false;
end;
local v7 = {};
v7.__index = v7;
v7.new = function()
    local v8 = {};
    setmetatable(v8, {
        __index = v7
    });
    v8.connections = {};
    return v8;
end;
v7.Connect = function(v9, v10)
    local v11 = v1.new(v10);
    table.insert(v9.connections, v11);
    return v11;
end;
v7.Fire = function(v12, v13)
    for _, v15 in v12.connections, nil, nil do
        v15:Fire(v13);
    end;
end;
local v16 = {};
v16.__index = v16;
v16.new = function(v17, v18, v19)
    local v20 = {};
    setmetatable(v20, {
        __index = v16
    });
    v20.mockContentProviderProceedWithLoad = false;
    v20.contentResolved = false;
    v20.assetFetchStatuses = {};
    v20.signals = {};
    v20.preloadAsyncCalled = false;
    v20.isMock = true;
    v20.ultimatelySuccessfulContentIds = v17 or {};
    v20.ultimatelyTimedOutContentIds = v18 or {};
    v20.ultimatelyFailedContentIds = v19 or {};
    return v20;
end;
v16.mockReload = function(v21, v22, v23)
    v21.mockContentProviderProceedWithLoad = false;
    v21:_staggeredProgress(nil, v22, v23 or Enum.AssetFetchStatus.Success);
end;
v16.proceedWithLoad = function(v24)
    v24.mockContentProviderProceedWithLoad = true;
    v0.act(function()
        task.wait(0.1);
    end);
end;
v16._setAssetFetchStatus = function(v25, v26, v27)
    v25.assetFetchStatuses[v26] = v27;
    if v25.signals[v26] then
        v25.signals[v26]:Fire(v27);
    end;
end;
v16._staggeredProgress = function(v28, v29, v30, v31)
    v28.contentResolved = false;
    task.spawn(function()
        while true do
            if not v28.mockContentProviderProceedWithLoad then
                goto label0;
            end;
            if not v28.contentResolved then
                v28:_setAssetFetchStatus(v30, Enum.AssetFetchStatus.Loading);
                if v29 then
                    v29(v30, Enum.AssetFetchStatus.Loading);
                end;
                v28.contentResolved = true;
                v28.mockContentProviderProceedWithLoad = false;
            else
                break;
            end;
            ::label0::;
            task.wait();
        end;
        v28:_setAssetFetchStatus(v30, v31);
        if v29 then
            v29(v30, v31);
        end;
        v28.mockContentProviderProceedWithLoad = false;
    end);
end;
v16._makeMockSignal = function(_)
    return (v7.new());
end;
v16.GetAssetFetchStatusChangedSignal = function(v33, v34)
    if v33.signals[v34] == nil then
        v33.signals[v34] = v33:_makeMockSignal();
    end;
    return v33.signals[v34];
end;
v16.GetAssetFetchStatus = function(v35, v36)
    if v35.assetFetchStatuses[v36] ~= nil then
        return v35.assetFetchStatuses[v36];
    else
        return Enum.AssetFetchStatus.None;
    end;
end;
v16.PreloadAsync = function(v37, v38, v39)
    v37.preloadAsyncCalled = true;
    for _, v41 in ipairs(v38) do
        if not v37.ultimatelySuccessfulContentIds[v41] then
            if not v37.ultimatelyTimedOutContentIds[v41] then
                if not v37.ultimatelyFailedContentIds[v41] then
                    task.delay(0, function()
                        v37:_setAssetFetchStatus(v41, Enum.AssetFetchStatus.Success);
                        if v39 then
                            v39(v41, Enum.AssetFetchStatus.Success);
                        end;
                    end);
                else
                    v37:_staggeredProgress(v39, v41, Enum.AssetFetchStatus.Failure);
                end;
            else
                v37:_staggeredProgress(v39, v41, Enum.AssetFetchStatus.TimedOut);
            end;
        else
            v37:_staggeredProgress(v39, v41, Enum.AssetFetchStatus.Success);
        end;
    end;
end;
return v16;


local function v0(v1, v2)
    v2 = v2 or "";
    assert(v2 ~= nil, "indent must be a string");
    if v1 == nil then
        print(v2 .. "[nil Instance]");
        return ;
    else
        assert(v1 ~= nil, "instance must be non-nil");
        print(v2 .. v1.Name);
        v2 = v2 .. "  ";
        for _, v4 in ipairs(v1:GetChildren()) do
            v0(v4, v2);
        end;
        return ;
    end;
end;
return v0;


local l_CoreGui_0 = game:GetService("CoreGui");
local l_HttpService_0 = game:GetService("HttpService");
local l_Parent_0 = script.Parent;
local v3 = require(l_Parent_0.Parent.Parent.Roact);
local v4 = require(l_Parent_0.dumpInstanceTree);
local function v6(v5)
    return v3.createElement("ScreenGui", {
        ZIndexBehavior = Enum.ZIndexBehavior.Sibling
    }, v5[v3.Children]);
end;
return function(v7, v8)
    local v9 = v3.createElement(v6, nil, {
        TestComponent = v7
    });
    local v10 = ("TestApp-%s"):format(l_HttpService_0:GenerateGUID(false));
    local v11 = v3.mount(v9, l_CoreGui_0, v10);
    local v12 = ("game.CoreGui.%s.TestComponent"):format(v10);
    local l_status_0, l_result_0 = pcall(function()
        v8(v12);
    end);
    if not l_status_0 then
        print("Test instance tree:");
        v4(l_CoreGui_0:FindFirstChild(v10));
        print("Test instance tree end\n");
    end;
    v3.unmount(v11);
    if not l_status_0 then
        error(l_result_0);
    end;
end;


local l_CoreGui_0 = game:GetService("CoreGui");
local l_HttpService_0 = game:GetService("HttpService");
local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v4 = require(l_Parent_1.Parent.Roact);
local v5 = require(l_Parent_0.dumpInstanceTree);
local v6 = require(l_Parent_1.Utility.mockStyleComponent);
return function(v7, v8, v9)
    local v10 = v4.createElement("ScreenGui", {
        ZIndexBehavior = Enum.ZIndexBehavior.Sibling
    }, {
        StyleProvider = v6({
            TestComponent = v4.createElement(v7, v8)
        })
    });
    local v11 = ("TestApp-%s"):format(l_HttpService_0:GenerateGUID());
    local v12 = v4.mount(v10, l_CoreGui_0, v11);
    local v13 = ("game.CoreGui.%s.StyleProvider.TestComponent"):format(v11);
    local l_status_0, l_result_0 = pcall(function()
        v9(v13);
    end);
    if not l_status_0 then
        print("Test instance tree:");
        v5(l_CoreGui_0:FindFirstChild(v11));
        print("Test instance tree end\n");
    end;
    v4.unmount(v12);
    if not l_status_0 then
        error(l_result_0);
    end;
end;


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Otter);
local v2 = require(l_Parent_0.Roact);
local v3 = require(l_Parent_0.Cryo);
local v4 = require(l_Parent_0.t);
local v6 = v4.intersection(v4.strictInterface({
    animatedValues = v4.table,
    mapValuesToProps = v4.callback,
    springOptions = v4.optional(v4.table),
    onComplete = v4.optional(v4.callback),
    regularProps = v4.table,
    [v2.Children] = v4.optional(v4.table)
}), function(v5)
    if v5[v2.Children] ~= nil and v5.regularProps[v2.Children] ~= nil then
        return false, "Children must be specified in one place, but the [Roact.Children] key was found" .. " in both props and props.regularProps on SpringAnimatedItem.";
    else
        return true;
    end;
end);
local v27 = {
    wrap = function(v7)
        local v8 = v2.PureComponent:extend(string.format("SpringAnimatedItem(%s)", (tostring(v7))));
        v8.defaultProps = {
            regularProps = {}
        };
        v8.init = function(v9)
            v9.ref = v9.props.regularProps[v2.Ref] or v2.createRef();
            v9.applyAnimatedValues = function(v10)
                local l_current_0 = v9.ref.current;
                if l_current_0 == nil then
                    return ;
                else
                    for v12, v13 in pairs((v9.props.mapValuesToProps(v10))) do
                        l_current_0[v12] = v13;
                    end;
                    return ;
                end;
            end;
            v9.onComplete = function()
                if v9.props.onComplete then
                    v9.props.onComplete();
                end;
            end;
            v9.motor = nil;
        end;
        v8.didMount = function(v14)
            local l_animatedValues_0 = v14.props.animatedValues;
            v14.applyAnimatedValues(l_animatedValues_0);
            v14.motor = v1.createGroupMotor(l_animatedValues_0);
            v14.motor:onStep(function(v16)
                v14.applyAnimatedValues(v16);
            end);
            v14.motor:onComplete(v14.onComplete);
            v14.motor:start();
        end;
        v8.willUpdate = function(v17, v18)
            if v17.props.regularProps[v2.Ref] ~= v18.regularProps[v2.Ref] and v18.regularProps[v2.Ref] ~= nil then
                v17.ref = v18.regularProps[v2.Ref];
            end;
        end;
        v8.render = function(v19)
            assert(v6(v19.props));
            return v2.createElement(v7, (v3.Dictionary.join(v19.props.regularProps, {
                [v2.Ref] = v19.ref,
                [v2.Children] = v19.props[v2.Children]
            })));
        end;
        v8.didUpdate = function(v20, v21)
            if v20.props.animatedValues ~= v21.animatedValues then
                local v22 = {};
                local v23 = false;
                for v24, v25 in pairs(v20.props.animatedValues) do
                    v22[v24] = v1.spring(v25, v20.props.springOptions);
                    if v25 ~= v21.animatedValues[v24] then
                        v23 = true;
                    end;
                end;
                if v23 then
                    v20.motor:setGoal(v22);
                end;
            end;
        end;
        v8.willUnmount = function(v26)
            if v26.motor then
                v26.motor:destroy();
                v26.motor = nil;
            end;
        end;
        return v8;
    end
};
v27.AnimatedFrame = v27.wrap("Frame");
v27.AnimatedScrollingFrame = v27.wrap("ScrollingFrame");
v27.AnimatedImageLabel = v27.wrap("ImageLabel");
v27.AnimatedTextButton = v27.wrap("TextButton");
v27.AnimatedUIScale = v27.wrap("UIScale");
return v27;


return function(v0, v1)
    return function(v2, ...)
        if v2 == v1 then
            return v0(v1, ...);
        else
            return v0(v1, v2, ...);
        end;
    end;
end;


return function()
    local v0 = {};
    local v1 = {};
    local v2 = false;
    return {
        subscribe = function(_, v4)
            assert(typeof(v4) == "function", "Can only subscribe to signals with a function.");
            local v5 = {
                callback = v4,
                disconnected = false
            };
            if not (not v2 or v0[v4]) then
                v1[v4] = v5;
            end;
            v0[v4] = v5;
            return function()
                assert(not v5.disconnected, "Listeners can only be disconnected once.");
                v5.disconnected = true;
                v0[v4] = nil;
                v1[v4] = nil;
            end;
        end,
        fire = function(_, ...)
            v2 = true;
            for v7, v8 in pairs(v0) do
                if not (v8.disconnected or v1[v7]) then
                    v7(...);
                end;
            end;
            v2 = false;
            for v9, _ in pairs(v1) do
                v1[v9] = nil;
            end;
        end
    };
end;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Core.Control.Enum.ControlState);
local _ = require(l_Parent_0.App.Style.StyleTypes);
return function(v3, v4)
    if v3 == v1.Initialize then
        return v4.Initialize;
    elseif v3 == v1.Default then
        return v4.Default;
    elseif v3 == v1.Pressed then
        return v4.Pressed;
    elseif v3 == v1.Hover then
        return v4.Hover;
    elseif v3 == v1.Selected then
        return v4.Selected;
    elseif v3 == v1.SelectedPressed then
        return v4.SelectedPressed;
    elseif v3 == v1.Disabled then
        return v4.Disabled;
    else
        return nil;
    end;
end;


local v0 = require(script.Parent.Parent.Parent.t);
return (v0.intersection(v0.Vector2, function(v1)
    if not (v1.X >= 0) or v1.Y < 0 then
        return false, ("each component of the Vector2 must be >= 0; component values are: %d, %d"):format(v1.X, v1.Y);
    else
        return true;
    end;
end));


local v0 = require(script.Parent.Parent.Parent.t);
return v0.optional(v0.string);


local function v0(...)
    return {
        ...
    }, select("#", ...);
end;
return function(v1)
    assert(type(v1) == "function", "memoize requires a function to memoize");
    local v2 = nil;
    local v3 = nil;
    local v4 = nil;
    local v5 = nil;
    return function(...)
        local v6 = select("#", ...);
        while v6 > 0 and select(v6, ...) == nil do
            v6 = v6 - 1;
        end;
        if v6 ~= v3 then
            v2 = {
                ...
            };
            v3 = v6;
            local v7, v8 = v0(v1(...));
            v4 = v7;
            v5 = v8;
            return unpack(v4, 1, v5);
        else
            for v9 = 1, v3 do
                if select(v9, ...) ~= v2[v9] then
                    v2 = {
                        ...
                    };
                    local v10, v11 = v0(v1(...));
                    v4 = v10;
                    v5 = v11;
                    break;
                end;
            end;
            return unpack(v4, 1, v5);
        end;
    end;
end;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.Roact);
local v2 = require(l_Parent_0.App.Style.AppStyleProvider);
return function(v3)
    return v1.createElement(v2, {
        style = {
            themeName = "Dark",
            fontName = "Gotham"
        }
    }, {
        Content = v1.createElement("Frame", {
            Size = UDim2.new(1, 0, 1, 0)
        }, v3)
    });
end;


return function(v0, v1)
    v1 = v1 or tostring(v0);
    return (setmetatable(v0, {
        __index = function(_, v3)
            error(("%q (%s) is not a valid member of %s"):format(tostring(v3), typeof(v3), v1), 2);
        end,
        __newindex = function(_, v5, _)
            error(("%q (%s) is not a valid member of %s"):format(tostring(v5), typeof(v5), v1), 2);
        end
    }));
end;


local l_UserInputService_0 = game:GetService("UserInputService");
local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local v3 = require(l_Parent_0.Enums.InputType);
local v4 = require(l_Parent_1.React);
local l_useEventConnection_0 = require(l_Parent_1.ReactUtils).useEventConnection;
local v6 = {
    [Enum.UserInputType.Gamepad1] = v3.Gamepad,
    [Enum.UserInputType.Gamepad2] = v3.Gamepad,
    [Enum.UserInputType.Gamepad3] = v3.Gamepad,
    [Enum.UserInputType.Gamepad4] = v3.Gamepad,
    [Enum.UserInputType.Gamepad5] = v3.Gamepad,
    [Enum.UserInputType.Gamepad6] = v3.Gamepad,
    [Enum.UserInputType.Gamepad7] = v3.Gamepad,
    [Enum.UserInputType.Gamepad8] = v3.Gamepad,
    [Enum.UserInputType.MouseButton1] = v3.MouseAndKeyboard,
    [Enum.UserInputType.MouseButton2] = v3.MouseAndKeyboard,
    [Enum.UserInputType.MouseButton3] = v3.MouseAndKeyboard,
    [Enum.UserInputType.MouseWheel] = v3.MouseAndKeyboard,
    [Enum.UserInputType.MouseMovement] = v3.MouseAndKeyboard,
    [Enum.UserInputType.Keyboard] = v3.MouseAndKeyboard,
    [Enum.UserInputType.TextInput] = v3.MouseAndKeyboard,
    [Enum.UserInputType.Touch] = v3.Touch
};
return function(v7)
    local v8 = v7 or l_UserInputService_0;
    local function _()
        return v6[v8:GetLastInputType()];
    end;
    local v10, v11 = v4.useState(v6[v8:GetLastInputType()]);
    l_useEventConnection_0(v8.LastInputTypeChanged, (v4.useCallback(function(v12)
        local v13 = v6[v12];
        if v13 ~= nil then
            v11(v13);
        end;
    end)));
    v4.useEffect(function()
        v11(v6[v8:GetLastInputType()]);
    end, {});
    return v10;
end;


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.Parent.Enums.InputType);
local v2 = require(l_Parent_0.useInputType);
return function()
    return v2() == v1.Gamepad;
end;


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.Parent.Enums.InputType);
local v2 = require(l_Parent_0.useInputType);
return function()
    return v2() == v1.MouseAndKeyboard;
end;


return {
    testMatch = {
        "**/*.spec"
    },
    setupFilesAfterEnv = {
        script.Parent.Parent.Utilities.UIBloxInitializer
    }
};