Program: 80903
Project: 80903
Buggy source:
@Override public void fillTabList(ProxiedPlayer player,ITabList tabList) throws LayoutException {
  if (config.verticalMode) {
    tabList=tabList.flip();
  }
  if (config.autoShrinkTabList) {
    tabList.setShouldShrink(true);
  }
  List<Section> topSections=new ArrayList<>(top);
  List<Section> botSections=new ArrayList<>(bot);
  parseAutoFillplayers(player,topSections);
  parseAutoFillplayers(player,botSections);
  TabListContext context=new TabListContextImpl(tabList.getRows(),tabList.getColumns(),player);
  precalculateSections(context,topSections);
  precalculateSections(context,botSections);
  for (Iterator<Section> iterator=topSections.iterator(); iterator.hasNext(); ) {
    Section topSection=iterator.next();
    if (topSection.getMaxSize() == 0) {
      iterator.remove();
    }
  }
  for (Iterator<Section> iterator=botSections.iterator(); iterator.hasNext(); ) {
    Section botSection=iterator.next();
    if (botSection.getMaxSize() == 0) {
      iterator.remove();
    }
  }
  Layout<Section> layout=layoutManager.calculateLayout(topSections,botSections,context);
  for (int i=0; i < tabList.getSize(); i++) {
    Optional<Layout<Section>.SlotData> slotData=layout.getSlotData(i);
    if (slotData.isPresent()) {
      Layout<Section>.SlotData data=slotData.get();
      if (data.getSlotIndex() == 0) {
        data.getSection().calculate(context,tabList,i,data.getSectionSize());
      }
    }
  }
  if (this.config.shownFooterHeader) {
    String header=config.header;
    header=plugin.getVariablesManager().replacePlayerVariables(player,header,plugin.getBungeePlayerProvider().wrapPlayer(player));
    header=plugin.getVariablesManager().replaceVariables(player,header);
    header=ChatColor.translateAlternateColorCodes('&',header);
    header=header.replaceAll("String_Node_Str","String_Node_Str");
    tabList.setHeader(header);
    String footer=config.footer;
    footer=plugin.getVariablesManager().replacePlayerVariables(player,footer,plugin.getBungeePlayerProvider().wrapPlayer(player));
    footer=plugin.getVariablesManager().replaceVariables(player,footer);
    footer=ChatColor.translateAlternateColorCodes('&',footer);
    footer=footer.replaceAll("String_Node_Str","String_Node_Str");
    tabList.setFooter(footer);
  }
  if (BungeeTabListPlus.isVersion18()) {
    tabList.setDefaultSkin(plugin.getSkinManager().getSkin(config.defaultSkin));
  }
  tabList.setDefaultPing(config.defaultPing);
}

Fixed version (ground truth):
@Override public void fillTabList(ProxiedPlayer player,ITabList tabList,TabListContext context) throws LayoutException {
  if (config.verticalMode) {
    tabList=tabList.flip();
  }
  if (config.autoShrinkTabList) {
    tabList.setShouldShrink(true);
  }
  List<Section> topSections=new ArrayList<>(top);
  List<Section> botSections=new ArrayList<>(bot);
  parseAutoFillplayers(player,topSections,context);
  parseAutoFillplayers(player,botSections,context);
  precalculateSections(context,topSections);
  precalculateSections(context,botSections);
  for (Iterator<Section> iterator=topSections.iterator(); iterator.hasNext(); ) {
    Section topSection=iterator.next();
    if (topSection.getMaxSize() == 0) {
      iterator.remove();
    }
  }
  for (Iterator<Section> iterator=botSections.iterator(); iterator.hasNext(); ) {
    Section botSection=iterator.next();
    if (botSection.getMaxSize() == 0) {
      iterator.remove();
    }
  }
  Layout<Section> layout=layoutManager.calculateLayout(topSections,botSections,context);
  for (int i=0; i < tabList.getSize(); i++) {
    Optional<Layout<Section>.SlotData> slotData=layout.getSlotData(i);
    if (slotData.isPresent()) {
      Layout<Section>.SlotData data=slotData.get();
      if (data.getSlotIndex() == 0) {
        data.getSection().calculate(context,tabList,i,data.getSectionSize());
      }
    }
  }
  if (this.config.shownFooterHeader) {
    String header=config.header;
    header=plugin.getVariablesManager().replacePlayerVariables(player,header,plugin.getBungeePlayerProvider().wrapPlayer(player),context);
    header=plugin.getVariablesManager().replaceVariables(player,header,context);
    header=ChatColor.translateAlternateColorCodes('&',header);
    header=header.replaceAll("String_Node_Str","String_Node_Str");
    tabList.setHeader(header);
    String footer=config.footer;
    footer=plugin.getVariablesManager().replacePlayerVariables(player,footer,plugin.getBungeePlayerProvider().wrapPlayer(player),context);
    footer=plugin.getVariablesManager().replaceVariables(player,footer,context);
    footer=ChatColor.translateAlternateColorCodes('&',footer);
    footer=footer.replaceAll("String_Node_Str","String_Node_Str");
    tabList.setFooter(footer);
  }
  if (BungeeTabListPlus.isVersion18()) {
    tabList.setDefaultSkin(plugin.getSkinManager().getSkin(config.defaultSkin));
  }
  tabList.setDefaultPing(config.defaultPing);
}