BRepOffsetAPI_ThruSections with a set of TopoDS_Face with holes

How does one call BRepOffsetAPI_ThruSections with a set of TopoDS_Face that are simple shapes, but with holes in them?

My code works well running BRepOffsetAPI_ThruSections twice, with the outside shapes first, and then the inside shapes later and boolean the two together.

But I want to test is running it once, with the holes included would be faster, but I can't figure out how to pass the holes to BRepOffsetAPI_ThruSections.

Here's what I have tried (BTW, I'm using the c# wrapper) This just adds all the TopoDS_Wires, but that of cause can't be right.

I have uploaded a snapshot of my faces for reference, going from left to right.

public static TopoDS_Shape CreateSolidFromSections(List<TopoDS_Shape> shapeSections)
{
    try
    {
        if (shapeSections == null || shapeSections.Count < 2)
        {
            throw new ArgumentException("At least two shape sections are required to create a solid.");
        }

        // Validate each shape before proceeding
        for (int i = 0; i < shapeSections.Count; i++)
        {
            var shape = shapeSections[i];
            BRepCheck_Analyzer analyzer = new BRepCheck_Analyzer(shape);
            if (!analyzer.IsValid())
            {
                throw new InvalidOperationException($"Shape is not valid: {shape.ShapeType()} - shape#{i}");
            }
        }

        // Initialize the BRepOffsetAPI_ThruSections object
        BRepOffsetAPI_ThruSections thruSections = new BRepOffsetAPI_ThruSections(true, false, 0.01);

        thruSections.SetSmoothing(true);
        thruSections.SetContinuity(GeomAbs_Shape.GeomAbs_C2); // For smooth curvature
        thruSections.CheckCompatibility(true); // Ensure the sections are compatible

        // Add wires to the ThruSections object
        foreach (TopoDS_Shape shape in shapeSections)
        {
            if (shape.ShapeType() == TopAbs_ShapeEnum.TopAbs_FACE)
            {
                TopoDS_Face face = TopoDS.ToFace(shape);
                TopoDS_Wire outerWire = GetOuterWire(face);

                if (outerWire == null || outerWire.IsNull())
                {
                    throw new InvalidOperationException("Failed to get the outer wire from the face.");
                }

                // Ensure the outer wire is oriented correctly
//                BRepLib.OrientClosedWire(face, outerWire);

                thruSections.AddWire(outerWire);

                // Add inner wires (holes)
                TopExp_Explorer explorer = new TopExp_Explorer(face, TopAbs_ShapeEnum.TopAbs_WIRE);
                while (explorer.More())
                {
                    TopoDS_Wire wire = TopoDS.ToWire(explorer.Current());
                    if (!wire.IsNull() && !wire.IsEqual(outerWire))
                    {
                        thruSections.AddWire(wire);
                    }
                    explorer.Next();
                }
            }
            else
            {
                throw new ArgumentException("All input shapes must be of type TopoDS_Face.");
            }
        }

        // Build the solid
        thruSections.Build();

        if (!thruSections.IsDone())
        {
            throw new InvalidOperationException("Failed to create the solid from the shape sections.");
        }

        return thruSections.Shape();
    }
    catch (Exception ex)
    {
        // Simplified error handling
        Debug.LogError($"Error in CreateSolidFromSections: {ex.Message}");
        return null;
    }
}

PS: how do you tag code as csharp? (or as c++?)