bp1 = Plane.ByThreePoints(Point.ByCoordinates(-6,-10,0),Point.ByCoordinates(-6,6,2),Point.ByCoordinates(0,-10,0));
bc1 = NurbsCurve.ByPoints(Point.ByCoordinates([-7.5,-6,-5.5,-6,-7.5],[-12.5,-10,-4.5,1,3.5],2)).PullOntoPlane(bp1);
tp1 = Plane.ByThreePoints(Point.ByCoordinates(-6,-10,10.5),Point.ByCoordinates(-6,6.5,8.5),Point.ByCoordinates(0,-10,10.5));
tc1 = NurbsCurve.ByPoints(Point.ByCoordinates([-14.25,-6,-5.75,-7.5],[-11.75,-10,0.5,6.5],8.5)).PullOntoPlane(tp1);
fc1 = NurbsCurve.ByPoints([bc1.StartPoint,Point.ByCoordinates(-10,-11,8),tc1.StartPoint]);
rc1 = NurbsCurve.ByPoints([bc1.EndPoint,Point.ByCoordinates(-7,4,8),tc1.EndPoint]);
ic1 = NurbsCurve.ByPoints([fc1.PointAtParameter(0.5),Point.ByCoordinates(-8.15,-11.5,5.75),rc1.PointAtParameter(0.5)]);
mp1 = Plane.ByOriginNormal(Point.ByCoordinates(-0.5,0,0),Vector.XAxis());
ls1 = Surface.ByLoft([bc1,ic1,tc1],[fc1,rc1]);
fc2 = NurbsCurve.ByPoints(List.Flatten([tc1.StartPoint,Point.ByCoordinates([-6,0.5,5.5],[-11.75,-11,-11.75],8.5),tc1.StartPoint.Mirror(mp1)],-1));
tc2 = fc2.Project(tp1,Vector.ZAxis());
ts1 = PolyCurve.ByJoinedCurves(List.Flatten([tc2,tc1,Line.ByStartPointEndPoint(tc1.EndPoint,tc1.Mirror(mp1).EndPoint),tc1.Mirror(mp1)],-1)).Patch();
tc3 = Line.ByStartPointEndPoint(Point.ByCoordinates(14.625,-12.516,11.583),Point.ByCoordinates(-14.625,-12.516,11.583));
ts2 = Surface.ByLoft(List.Flatten([tc2,tc3],-1));
fs1 = tc3.Extrude(Vector.ZAxis(),23);
ps1 = PolySurface.ByJoinedSurfaces(List.Flatten([ls1,ts1,rs1,ts2,fs1],-1));
pl1 = Plane.ByOriginNormal(Point.ByCoordinates(7.5,3.5,2),Vector.ByCoordinates(0,-1,1)).Translate(Vector.ByCoordinates(0,-1,1),0..40..1);
pc1 = List.Clean(PolyCurve.ByJoinedCurves(ps1.Intersect(pl1)),false);
pc2 = List.AddItemToEnd(List.LastItem(pc1).Translate(0,4,3),pc1);
pt1 = List.Transpose(pc2<1>.PointAtParameter(0..1..#10));
nc1 = NurbsCurve.ByPoints(List.TakeEveryNthItem(pt1<1>,2,0),3);
sr1 = Surface.ByLoft(nc1);
pt2 = sr1<1>.PointAtParameter((0.1..0.825..#15)<2>,(0.15..0.85..#10)<3>);
nr1 = sr1<1>.NormalAtParameter((0.1..0.85..#15)<2>,(0.15..0.85..#10)<3>);
cr1 = Solid.ByUnion(List.Flatten(Circle.ByCenterPointRadiusNormal(pt2,0.75,nr1).Patch().Thicken(0.25),-1));
fd1 = sr1.SubtractFrom(cr1).Thicken(0.1);