HIGH severity: Misleading liquidity value returned when adding liquidity. **Description:** When a user adds liquidity to a pool using either of the two hooks, the `addLiquidity()` function returns a value representing the amount of liquidity the user will receive in the `IncentivizedERC20` form; however, It can be seen in the below snippet that the returned value is the.....

Vulnerable code:
function addLiquidity(AddLiquidityParams calldata params)
    external
    payable
    nonReentrant
    ensure(params.deadline)
    returns (uint128 liquidity)
{
    ...
    liquidity = LiquidityAmounts.getLiquidityForAmounts(
        sqrtPriceX96,
        TickMath.getSqrtPriceAtTick(params.range.tickLower),
        TickMath.getSqrtPriceAtTick(params.range.tickUpper),
        params.amount0Desired,
        params.amount1Desired
    );

    if (rangeLiquidity == 0 && liquidity <= MINIMUM_LIQUIDITY) {
        revert LiquidityDoesntMeetMinimum();
    }
    // Add liquidity to the Pool
    BalanceDelta addedDelta = modifyLiquidity(
        params.key,
        params.range,
        IPoolManager.ModifyLiquidityParams({
            tickLower: params.range.tickLower,
            tickUpper: params.range.tickUpper,
            liquidityDelta: liquidity.toInt256(),
            salt: 0
        })
    );

    uint256 liquidityMinted;
    if (rangeLiquidity == 0) {
        // permanently lock the first MINIMUM_LIQUIDITY tokens
        liquidityMinted = liquidity - MINIMUM_LIQUIDITY;
        IncentivizedERC20(lpToken).mint(address(0), MINIMUM_LIQUIDITY);
        // Mint the LP tokens to the user
        IncentivizedERC20(lpToken).mint(params.to, liquidityMinted);
    } else {
        // Calculate the amount of LP tokens to mint
        (uint128 newRangeLiquidity,,) =
            poolManager.getPositionInfo(poolId, address(this), params.range.tickLower, params.range.tickUpper, 0);
        liquidityMinted =
            FullMath.mulDiv(IncentivizedERC20(lpToken).totalSupply(), liquidity, newRangeLiquidity - liquidity);
        // Mint the LP tokens to the user
        IncentivizedERC20(lpToken).mint(params.to, liquidityMinted);
    }

    ...
}

function test_MisleadingReturnedLiquidityValue() public {
    initPool(key.currency0, key.currency1, IHooks(hookAddress), 3000, SQRT_PRICE_1_1);

    uint128 liquidity = fullRange.addLiquidity(
        FullRangeHook.AddLiquidityParams(
            key.currency0, key.currency1, 3000, 10e6, 10e6, 0, 0, address(this), MAX_DEADLINE
        )
    );

    (, address liquidityToken) = fullRange.poolInfo(id);

    IncentivizedERC20(liquidityToken).approve(address(fullRange), type(uint256).max);

    // The returned liquidity is used to remove but it fails due to misleading value
    FullRangeHook.RemoveLiquidityParams memory removeLiquidityParams =
        FullRangeHook.RemoveLiquidityParams(key.currency0, key.currency1, 3000, liquidity, MAX_DEADLINE);

    vm.expectRevert();
    fullRange.removeLiquidity(removeLiquidityParams);
}

function addLiquidity(AddLiquidityParams calldata params)
        external
        payable
        nonReentrant
        ensure(params.deadline)
--      returns (uint128 liquidity)
++      returns (uint128 liquidityMinted)
    {
        ...

        // Calculate the amount of liquidity to be added based on Currencies amounts
--      liquidity = LiquidityAmounts.getLiquidityForAmounts(
++      uint128 liquidity = LiquidityAmounts.getLiquidityForAmounts(
            sqrtPriceX96,
            TickMath.getSqrtPriceAtTick(MIN_TICK),
            TickMath.getSqrtPriceAtTick(MAX_TICK),
            params.amount0Desired,
            params.amount1Desired
        );

        ...

        // @gas cache pool's liquidity token
        IncentivizedERC20 poolLiquidityToken = IncentivizedERC20(poolInfo[poolId].liquidityToken);

--      uint256 liquidityMinted;
        if (poolLiquidity == 0) {
            // permanently lock the first MINIMUM_LIQUIDITY tokens
            liquidityMinted = liquidity - MINIMUM_LIQUIDITY;
            poolLiquidityToken.mint(address(0), MINIMUM_LIQUIDITY);
            // Mint the LP tokens to the user
            poolLiquidityToken.mint(params.to, liquidityMinted);
        } else {
            // Calculate the amount of LP tokens to mint
--          liquidityMinted = FullMath.mulDiv(
++          liquidityMinted = uint128(FullMath.mulDiv(
                poolLiquidityToken.totalSupply(),
                liquidity,
                poolManager.getLiquidity(poolId) - liquidity
--          );
++          ));
            // Mint the LP tokens to the user
            poolLiquidityToken.mint(params.to, liquidityMinted);
        }

        ...
    }