Program: 175893
Project: 175893
Buggy source:
private void importMesh(int index){
  LoopL<Point3d> polies=blocks.get(index);
  List<Vector2D> verts=polies.stream().flatMap(ll -> ll.streamAble()).map(x -> {
    Line3d l=new Line3d(x.get(),x.getNext().get());
    l.move(perp(l.dir(),EXPAND_MESH));
    return new Vector2D(l.start.x,l.start.z);
  }
).collect(Collectors.toList());
  ConvexHull2D chull=new MonotoneChain(false,0.0001).generate(verts);
  Loop<Point3d> hull=new Loop<Point3d>((Arrays.stream(chull.getLineSegments()).map(x -> new Point3d(x.getStart().getX(),0,x.getStart().getY())).collect(Collectors.toList())));
  File root=new File(Tweed.SCRATCH + "String_Node_Str" + File.separator);
  int i=0;
  File l;
  while ((l=new File(root,"String_Node_Str" + i)).exists())   i++;
  l.mkdirs();
  File croppedFile=new File(l,CROPPED_OBJ);
  boolean found=false;
  for (  Gen gen : tweed.frame.gens(MiniGen.class)) {
    ((MiniGen)gen).clip(hull,croppedFile);
    found=true;
  }
  if (!found)   for (  Gen gen : tweed.frame.gens(ObjGen.class)) {
    ObjGen objg=(ObjGen)gen;
    try {
      Files.asByteSource(objg.getFile()).copyTo(Files.asByteSink(croppedFile));
      objg.setVisible(false);
      found=true;
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
  }
  if (found) {
    Graph2D g2=new Graph2D();
    polies.stream().flatMap(ll -> ll.streamAble()).forEach(x -> g2.add(new Point2d(x.get().x,x.get().z),new Point2d(x.getNext().get().x,x.getNext().get().z)));
    g2.removeInnerEdges();
    UnionWalker uw=new UnionWalker();
    for (    Point2d p : g2.map.keySet())     for (    Line line : g2.map.get(p))     uw.addEdge(line.end,line.start);
    Loopz.writeXZObj(uw.findAll(),new File(l,"String_Node_Str"),true);
    Loopz.writeXZObj(Loopz.to2dLoop(polies,1,null),new File(l,"String_Node_Str"),false);
    BlockGen bg=new BlockGen(l,tweed,polies);
    lastMesh.put(index,bg);
    tweed.frame.addGen(bg,true);
  }
 else   JOptionPane.showMessageDialog(tweed.frame(),"String_Node_Str");
}

Fixed version (ground truth):
private void importMesh(int index){
  LoopL<Point3d> polies=blocks.get(index);
  List<Vector2D> verts=polies.stream().flatMap(ll -> ll.streamAble()).map(x -> {
    Line3d l=new Line3d(x.get(),x.getNext().get());
    l.move(perp(l.dir(),EXPAND_MESH));
    return new Vector2D(l.start.x,l.start.z);
  }
).collect(Collectors.toList());
  ConvexHull2D chull=new MonotoneChain(false,0.0001).generate(verts);
  Loop<Point3d> hull=new Loop<Point3d>((Arrays.stream(chull.getLineSegments()).map(x -> new Point3d(x.getStart().getX(),0,x.getStart().getY())).collect(Collectors.toList())));
  File root=new File(Tweed.SCRATCH + "String_Node_Str" + File.separator);
  int i=0;
  File l;
  while ((l=new File(root,"String_Node_Str" + i)).exists())   i++;
  l.mkdirs();
  File croppedFile=new File(l,CROPPED_OBJ);
  boolean found=false;
  for (  Gen gen : tweed.frame.gens(MiniGen.class)) {
    ((MiniGen)gen).clip(hull,croppedFile);
    found=true;
  }
  if (!found)   for (  Gen gen : tweed.frame.gens(MeshGen.class)) {
    ObjGen objg=(ObjGen)gen;
    try {
      Files.asByteSource(objg.getFile()).copyTo(Files.asByteSink(croppedFile));
      objg.setVisible(false);
      found=true;
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
  }
  if (found) {
    Graph2D g2=new Graph2D();
    polies.stream().flatMap(ll -> ll.streamAble()).forEach(x -> g2.add(new Point2d(x.get().x,x.get().z),new Point2d(x.getNext().get().x,x.getNext().get().z)));
    g2.removeInnerEdges();
    UnionWalker uw=new UnionWalker();
    for (    Point2d p : g2.map.keySet())     for (    Line line : g2.map.get(p))     uw.addEdge(line.end,line.start);
    Loopz.writeXZObj(uw.findAll(),new File(l,"String_Node_Str"),true);
    Loopz.writeXZObj(Loopz.to2dLoop(polies,1,null),new File(l,"String_Node_Str"),false);
    BlockGen bg=new BlockGen(l,tweed,polies);
    lastMesh.put(index,bg);
    tweed.frame.addGen(bg,true);
  }
 else   JOptionPane.showMessageDialog(tweed.frame(),"String_Node_Str");
}