    std::mutex thumbnail_lock;
    std::atomic<bool> abort_load_thumbnail = false;
    QMap<uint64_t, QPixmap> thumbnails;
    std::map<uint64_t, AlertInfo> alerts;
    QFuture<void> thumnail_future;
    InfoLabel thumbnail_label;
    friend class VideoWidget;
  };
  
  class VideoWidget : public QFrame {
 
</s> remove   std::atomic<bool> abort_load_thumbnail = false;
 </s> add   std::atomic<bool> abort_parse_qlog = false; </s> remove   void loadThumbnails();
 </s> add   void parseQLog(); </s> remove   abort_load_thumbnail = true;
  thumnail_future.waitForFinished();
 </s> add   abort_parse_qlog = true;
  if (qlog_future) {
    qlog_future->waitForFinished();
  } </s> remove void Slider::loadThumbnails() {
 </s> add void Slider::parseQLog() { </s> remove   thumnail_future = QtConcurrent::run(this, &Slider::loadThumbnails);
 </s> add   QObject::connect(can, &AbstractStream::eventsMerged, [this]() {
    if (!qlog_future) {
      qlog_future = std::make_unique<QFuture<void>>(QtConcurrent::run(this, &Slider::parseQLog));
    }
  });
  std::unique_ptr<QFuture<void>> qlog_future;
    std::mutex thumbnail_lock;
    std::atomic<bool> abort_load_thumbnail = false;
    QMap<uint64_t, QPixmap> thumbnails;
    std::map<uint64_t, AlertInfo> alerts;
  std::unique_ptr<QFuture<void>> qlog_future;
    InfoLabel thumbnail_label;
    friend class VideoWidget;
  };
  
  class VideoWidget : public QFrame {
keep keep keep keep replace keep keep keep keep keep
 cabana: fix seeking issue (#28346)

* fix seekto

* rename loadThumbnail to parseQLog 
tools/cabana/videowidget.h