docs: private void balance16(
      NodeStack     stack,
      GBSNode       bparent,         /* Parent of fringe balance point        */
      GBSNode       fpoint,          /* Fringe balance point                  */
      int           fpidx,           /* Index within stack of fpoint          */
      int           maxBal)          /* Maximum allowed fringe imbalance      */
    {
      /*
              k = 16,    2k-1 = 31,    k-1 = 15
  
       [A-B-C-D-E-F-G-H-I-J-K-L-M-N-O]             [15 children]
  
                  becomes:
  
  
             *--------H--------*
             |                 |
         *---D---*         *---L---*
         |       |         |       |
       *-B-*   *-F-*     *-J-*   *-N-*
       |   |   |   |     |   |   |   |
       A   C   E   G     I   K   M   O
  
    -----------------------------------------------
  
             *--------H--------*
             |                 |
         *---D---*         *---L---*
         |       |         |       |
       *-B-*   *-F-*     *-J-*   *-N-*           [17 children]
       |   |   |   |     |   |   |   |
       A   C   E   G     I   K   M   O - P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4
  
  
                    becomes:
  
                   *-----------------P-----------------*
                   |                                   |
          *--------H--------*                 *--------X--------*
          |                 |                 |                 |
      *---D---*         *---L---*         *---T---*         *---1---*
      |       |         |       |         |       |         |       |
    *-B-*   *-F-*     *-J-*   *-N-*     *-R-*   *-V-*     *-Z-*   *-3-*
    |   |   |   |     |   |   |   |     |   |   |   |     |   |   |   |
    A   C   E   G     I   K   M   O     Q   S   U   W     Y   0   2   4
  
  
     ----------------------------------------------
  
             *--------H--------*
             |                 |
         *---D---*         *---L---*
         |       |         |       |
       *-B-*   *-F-*     *-J-*   *-N-*           [17 children]
       |   |   |   |     |   |   |   |
       A   C   E   G     I   K   M   O - A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P
  
  
                    becomes:
  
                   *-----------------A-----------------*
                   |                                   |
          *--------H--------*                 *--------I--------*
          |                 |                 |                 |
      *---D---*         *---L---*         *---E---*         *---M---*
      |       |         |       |         |       |         |       |
    *-B-*   *-F-*     *-J-*   *-N-*     *-C-*   *-G-*     *-K-*   *-O-*
    |   |   |   |     |   |   |   |     |   |   |   |     |   |   |   |
    A   C   E   G     I   K   M   O     B   D   F   H     J   L   N   P
  
                                                                        */
      if (maxBal == 15)
        {
          GBSNode a = fpoint;
          GBSNode b = a.rightChild();
          GBSNode c = b.rightChild();
          GBSNode d = c.rightChild();
          GBSNode e = d.rightChild();
          GBSNode f = e.rightChild();
          GBSNode g = f.rightChild();
          GBSNode h = g.rightChild();
          GBSNode i = h.rightChild();
          GBSNode j = i.rightChild();
          GBSNode k = j.rightChild();
          GBSNode l = k.rightChild();
          GBSNode m = l.rightChild();
          GBSNode n = m.rightChild();
          h.setLeftChild(d);
          h.setRightChild(l);
          d.setLeftChild(b);
          d.setRightChild(f);
          b.setLeftChild(a);
          a.clearRightChild();
          c.clearRightChild();
          f.setLeftChild(e);
          e.clearRightChild();
          g.clearRightChild();
          l.setLeftChild(j);
          l.setRightChild(n);
          j.setLeftChild(i);
          i.clearRightChild();
          k.clearRightChild();
          n.setLeftChild(m);
          m.clearRightChild();
          if (bparent.rightChild() == a)
            bparent.setRightChild(h);
          else
            bparent.setLeftChild(h);
        }
      else
        {
          if (maxBal != 17)
            error("fringeBalance16: maxBal != 17, maxBal = " + maxBal);
          GBSNode t0_top = stack.node(fpidx-4);
          GBSNode h1 = stack.node(fpidx-3);
          GBSNode a = fpoint.rightChild();
          GBSNode b = a.rightChild();
          GBSNode c = b.rightChild();
          GBSNode d = c.rightChild();
          GBSNode e = d.rightChild();
          GBSNode f = e.rightChild();
          GBSNode g = f.rightChild();
          GBSNode h = g.rightChild();
          GBSNode i = h.rightChild();
          GBSNode j = i.rightChild();
          GBSNode k = j.rightChild();
          GBSNode l = k.rightChild();
          GBSNode m = l.rightChild();
          GBSNode n = m.rightChild();
          GBSNode o = n.rightChild();
          if (t0_top.rightChild() == h1)
            t0_top.setRightChild(a);
          else
            t0_top.setLeftChild(a);
          a.setLeftChild(h1);
          a.setRightChild(i);
          i.setLeftChild(e);
          i.setRightChild(m);
          e.setLeftChild(c);
          e.setRightChild(g);
          c.setLeftChild(b);
          b.clearRightChild();
          d.clearRightChild();
          g.setLeftChild(f);
          f.clearRightChild();
          h.clearRightChild();
          m.setLeftChild(k);
          m.setRightChild(o);
          k.setLeftChild(j);
          j.clearRightChild();
          l.clearRightChild();
          o.setLeftChild(n);
          n.clearRightChild();
          fpoint.clearRightChild();
          if ((fpidx > 4) && (stack.balancePointIndex() > -1))
            {
              GBSNode qpoint = a;
              stack.setNode(fpidx-3, qpoint);
              GBSInsertHeight.singleInstance().balance(stack, qpoint);
            }
        }
    }